
AWS AMIを別アカウントにコピーする方法

皆様こんにちは。tamです。
唐突ですが!
AMIを別のアカウントで使いたいってことないですか?
アカウントを間違えてインスタンスを立ち上げて諸々構築しちゃって後戻りできなくなったとか、そんなんじゃないんです。
検証環境で構築したものをそのまま本番環境で使えたら便利じゃないですか。
今回はその手順をお伝え出来たらと思います。
アカウントについて
アカウントA…間違えて作ったコピー元アカウント。
アカウントB…本当に構築したかったコピー先アカウント。
準備するもの
アカウントAのログイン情報
アカウントBのログイン情報
アカウントBのAWSアカウントID(ログインIDではなく12桁の数値)
AMIを2アカウント間で共有する
まずはアカウントAでアカウントBとAMIを共有する設定を行います。
アカウントAでAWSマネジメントコンソールにログインします。
EC2のAMI一覧から対象となるAMIにチェックを入れ「許可」タブの「AMI許可を編集」をクリックします。

そうすると次の画像のようにAMI共有の設定画面に遷移します。

この時、必ず次の項目にチェックを入れて下さい。入れないと私のように後悔することになります。
アカウント許可を作成するときに、関連付けられたスナップショットに [ボリュームを作成] の許可を追加します。
AMIの可用性は「プライベート」を選択します。
この状態で「アカウントIDを追加」をクリックします。

そうすると次のポップアップが表示されます。

共有先となる「アカウントB」の12桁数値のAWSアカウントIDを入力し「AMIを共有」をクリックします。
ポップアップが消えるので元の画面で「変更を保存」をクリックします。
これでアカウントAとアカウントBでAMIを共有することができました。
共有したAMIをアカウントBでコピーする
次にアカウントBでAWSマネジメントコンソールにログインします。
EC2のAMI一覧を表示します。
この段階では先ほど共有したAMIは一覧に表示されていません。
左上のメニューから「プライベートイメージ」を選択します。
そうすると先ほど共有を行ったAMIが一覧に表示されます。

対象となるAMIにチェックを入れ、右上のアクションから「AMIをコピー」を選択します。

次のAMIコピー画面が表示されます。
ここでAMIコピー名やAMIコピーの説明などを入力し「AMIをコピー」をクリックします。

ちなみに…
AMI共有を行う際のチェックボックスを入れ忘れていると…

このようにコピー失敗してしまいますので必ずチェックを入れて下さいね。
無事コピー成功した場合は、コピー元のファイルの所有者はアカウントA、コピー先のファイルの所有者はアカウントBになっているかと思います。
アカウント間でのAMI共有を解除する
AMIのコピーが終わり、所有者がアカウントBであるAMIが作成できました。
もう2アカウント間で共有しておく必要はありませんので解除してしまいましょう。
再度、アカウントAでマネジメントコンソールにログインします。
最初と同じようにEC2のAMI一覧から対象となるAMIにチェックを入れ「許可」タブの「AMI許可を編集」をクリックします。

そうすると次の画像のようにAMI共有の設定画面に遷移します。
ここで共有しているアカウントIDを選択し「選択項目を削除」をクリックします。
そして「変更を保存」をクリックします。

これで無事共有を解除できました。
もう1つ作業があるので表示されている「関連付けられたスナップショットID」をコピーしておきましょう。
スナップショットの共有を解除する
先ほどのAMIの共有解除で終わりかと思いきや、実はもう1つ解除するものがあります。
それはスナップショットの共有解除です。
スナップショット一覧から関連付けられたスナップショットを選択し「アクセス許可」から「アクセス権限を変更」をクリックします。
先ほどコピーしておいたスナップショットIDで検索するとすぐに見つかります。

スナップショット詳細設定画面で共有しているアカウントIDを選択し「選択項目を削除」をクリックします。
そして「変更を保存」をクリックします。

これでスナップショットの共有解除は完了です。
以上がAMIを別アカウントにコピーする方法となります。
限定的な用途ではありますが、異なるアカウントで全く同じ設定でインスタンスを起動させたい場合などに使えるかと思います。
いざという時?にお試し下さい。