EC2インスタンスを別のAWSアカウントに移行する方法

EC2 を別の AWS アカウントに転送(移行)する方法を紹介します。移行元アカウントから移行先アカウントに対して AMI を共有して移行する方法となります。DNS による切り替えも一連の手順に含めました。
2021.08.25

AWS のサイトで、EC2 を別の AWS アカウントに転送(移行)する方法を説明している QA を見つけたので試してみました。

Amazon EC2 インスタンスをコピーする

移行シナリオ

移行シナリオとしては、移行元アカウント(Account-A)に存在する EC2 を移行先アカウント(Account-B)に移行してみます。

本構成では Route 53 で DNS ドメイン名を解決した後に EC2 インスタンスにアクセスする構成としています。

移行前構成図

移行元アカウントの EC2 設定

移行元アカウントの EC2(Amazon Linux 2)の構成は下図の通りです。さらに、Elastic IP を割り当てています。

注意点:本検証は EBS ボリュームを暗号化していないことが前提となります

OS 設定としては、Apache をインストールしておき、Web ページには「Account-Aで作成したEC2インスタンス」と表示させます。

$ sudo yum -y install httpd

/var/www/html/index.html

<html>
	<head>
		<title>Account-Aで作成したEC2インスタンス</title>
	</head>
	<body>
		Account-Aで作成したEC2インスタンス
	</body>
</html>

Web サーバを起動します。

$ sudo systemctl start httpd

Web サーバの自動起動設定を行います。

$ sudo systemctl is-enabled httpd

Route 53 の設定

Route 53 には A レコードを登録しておきます。値には EC2 インスタンスに割り当てた Elastic IP アドレスを入力します。

疎通確認

Route 53 で登録した DNS ドメイン名でアクセスできることを確認します。

EC2 インスタンスのアカウント移行

次の STEP に沿って、実際に EC2 のアカウント移行を行ってみます。

STEP 1 : 移行元アカウントで AMI を作成します

STEP 2 : STEP 1 で作成した移行元アカウントの AMI を移行先アカウントに共有します

STEP 3 : 移行元アカウントから共有された AMI を用いて移行先アカウントで EC2 インスタンスを起動します

STEP 4 : 移行先アカウントで AMI を作成します

STEP 5 : DNS の応答内容を移行先アカウントの EC2 インスタンスに切り替えます

STEP 6 : 移行元アカウントで AMI の共有を解除します

STEP 1

概要

移行元アカウントで AMI を作成します。

実施

移行元アカウントで EC2 を停止し、AMI を作成します。

注意点:AMI には静的な IP アドレスを設定していないこと(接続に問題が発生する可能性あり)

AMI には必要な EBS ボリュームをすべて含めるようにします。

STEP 2

概要

STEP 1 で作成した移行元アカウントの AMI を移行先アカウントに共有します。

実施

移行元アカウントにおいて、AMI の「アクション」→「イメージパーミッションの変更」を選択した後に、「AWS アカウント番号」に移行先アカウント(Account-B)のアカウント ID を入力して「保存」します。

移行先アカウントから共有された AMI を確認します。確認の際は「プライベートイメージ」を選択する必要があります。「所有者」には移行元アカウント(Account-A)のアカウント ID が表示されます。

STEP 3

概要

移行元アカウントから共有された AMI を用いて移行先アカウントで EC2 インスタンスを起動します。

実施

移行元アカウントから共有されている AMI を選択し、「アクション」→「起動」を実行して EC2 インスタンスを作成します。

今回のシナリオでは、EC2 のインスタンスタイプとストレージサイズは移行元 EC2 インスタンスと合わせています。

移行元アカウント同様に、作成した EC2 インスタンスには Elastic IP アドレスを割り当てます。

キーペアも移行する場合は別のブログを参照ください。今回のシナリオではキーペアは新しく作成しています。

疎通確認を行い、「Account-A で作成した EC2 インスタンス」と表示されることを確認します。まだ DNS の切り替えを行っていないので、Elastic IP アドレスでアクセスする必要があります。

STEP 4

概要

移行先アカウントで AMI を作成します。

実施

現状では移行元アカウントの AMI を利用しており、移行先アカウントには AMI が無い状況なので、移行先アカウントにおいても EC2 インスタンスを停止して AMI を作成します。

作成した AMI を確認します。「プライベートイメージ」で確認した場合に、移行元アカウントから共有されている AMI と移行先アカウントで作成した AMI の両方が表示されますが、移行先アカウントで作成した AMI 名「test-ami-b」の「所有者」を確認すると、移行先アカウントのアカウント ID が表示されていることが確認できます。

STEP 5

概要

DNS の応答内容を移行先アカウントの EC2 インスタンスに切り替えます。

実施

Route 53 において、DNS ドメインを解決する A レコードの値を移行先アカウントの EC2 インスタンスに割り当てた Elastic IP アドレスに更新します。

疎通確認を行います。

Web ページが表示されることを確認できました。

疎通確認の際に、DNS のキャッシュが残っている場合は、移行元アカウントの EC2 インスタンスを参照している可能性がありますので、キャッシュの TTL には注意する必要があります。dig コマンド等で DNS の応答内容を確認するようにしましょう。

$ dig test-instance.example.com +short
xxx.xxx.xxx.xxx # 移行先アカウントのEC2インスタンスに割り当てたElastic IPアドレスが表示されていることを確認

STEP 6

概要

移行元アカウントで AMI の共有を解除します。

実施

移行元アカウントにおいて、AMI の「アクション」→「イメージパーミッションの変更」を選択した後に、「AWS アカウント番号」に表示されている移行先アカウント(Account-B)のアカウント ID を削除します。

移行先アカウントから移行元アカウントの AMI が参照できないことを確認します。移行先アカウントのAMIの「プライベートイメージ」において、移行先アカウントで作成した AMI である「test-ami-b」しか存在しておらず、共有が解除されていることが確認できました。

以上で移行作業は完了となります。

最後に必要に応じて移行元アカウントの環境をクリーンアップします。

まとめ

EC2 インスタンスを別のアカウントに移行する一連の流れをDNSの切り替えも含めて試してみました。どなたかのご参考になれば幸いです。

参考

Amazon EC2 インスタンスをコピーする