Amazon EBS-backed AMI を作成する
Amazon EC2 インスタンスまたは Amazon EC2 インスタンスのルートボリュームのスナップショットから、独自の Amazon EBS-backed AMI を作成できます。
インスタンスから Amazon EBS-backed AMI を作成するには、既存の Amazon EBS-backed AMI を使用してインスタンスを起動することから開始します。この AMI は、例えば、AWS Marketplace から取得した AMI、VM Import/Export を使用して作成した AMI、またはユーザーがアクセス可能なその他の任意の AMI です。特定の要件を満たすようにインスタンスをカスタマイズしたら、新しい AMI を作成して登録します。その後、新しい AMI を使用して、カスタマイズした新しいインスタンスを起動できます。
以下に説明された手順は、暗号化された Amazon Elastic Block Store (Amazon EBS) ボリューム (ルートボリュームを含む) でバックアップされた Amazon EC2 インスタンスにも、暗号化されていないボリューム同様に機能します。
AMI の作成プロセスは、Amazon S3-backed AMI の場合とは異なります。詳細については、「Amazon S3-backed AMI を作成する」を参照してください。
インスタンスからの AMI 作成の概要
次の図は、実行中の EC2 インスタンスから Amazon EBS-backed AMI を作成するプロセスをまとめたものです。既存の AMI から開始して、インスタンスを起動してカスタマイズし、そこから新しい AMI を作成し、最後に新しい AMI のインスタンスを起動します。図表内の数字は、次の説明の数値と一致します。
- 1 — AMI #1: 既存の AMI から始める
-
作成する AMI に似た既存の AMI を検索します。例えば、AWS Marketplace から取得した AMI、VM Import/Export を使用して作成した AMI、またはユーザーがアクセス可能なその他の任意の AMI です。この AMI を必要に応じてカスタマイズします。
図表内の EBS ルートボリュームスナップショット #1 は、AMI が Amazon EBS-backed AMI であり、ルートボリュームに関する情報がこのスナップショットに格納されていることを示します。
- 2 — 既存の AMI からインスタンスを起動する
-
AMI を設定する方法は、新しい AMI のベースとなる AMI からインスタンスを起動し、インスタンスをカスタマイズすることです (図表内の 3)。次に、カスタマイズを含む新しい AMI を作成します (図表内の 4)。
- 3 — EC2 インスタンス #1: インスタンスをカスタマイズする
-
インスタンスに接続し、必要に応じてカスタマイズします。新しい AMI には、これらのカスタマイズが含まれます。
インスタンスで次のアクションを実行して、インスタンスをカスタマイズできます。
- 4 – イメージを作成する
-
インスタンスから AMI を作成する際に、Amazon EC2 がインスタンスをシャットダウンしてから AMI を作成するのは、インスタンス上のすべての動作を停止し、作成プロセス中に一貫した状態が保たれるようにするためです。インスタンスが一貫した状態にあり、適切に AMI を作成できる場合、インスタンスの電源を落として再起動しないように、Amazon EC2 に指定できます。XFS などの一部のファイルシステムでは、アクティビティのフリーズおよびフリーズ解除が可能なため、インスタンスを再起動しなくてもイメージを安全に作成できます。
AMI 作成プロセスの間、Amazon EC2 はインスタンスのルートボリュームとインスタンスにアタッチされているその他の EBS ボリュームのスナップショットを作成します。AMI の登録を解除してスナップショットを削除するまで、スナップショットは課金の対象となります。インスタンスにアタッチされるいずれかのボリュームが暗号化されている場合、新しい AMI は、Amazon EBS 暗号化をサポートするインスタンスでのみ正常に起動します。
ボリュームのサイズによっては、AMI 作成プロセスの完了に数分かかる場合があります (最長で 24 時間かかることもあります)。AMI を作成する前に、ボリュームのスナップショットを作成しておくと、効率が向上する可能性があります。この方法では、AMI を作成する際に作成する必要があるのは小さい差分スナップショットのみになるため、プロセスがよりすばやく完了します (スナップショット作成の合計時間は同じです)。
- 5 — AMI #2: 新しい AMI
-
プロセスが完了すると、新しい AMI と、インスタンスのルートボリュームから作成されたスナップショット (スナップショット #2) が得られます。ルートボリュームに加えて、インスタンスストアボリュームまたは EBS ボリュームをインスタンスに追加した場合、新しい AMI のブロックデバイスマッピングにこれらのボリュームの情報が含まれます。
Amazon EC2 では AMI は自動的に登録されます。
- 6 – 新しい AMI からインスタンスを起動する
-
新しい AMI を使用してインスタンスを起動できます。
- 7 — EC2 インスタンス #2: 新しいインスタンス
-
ユーザーが新しい AMI を使用してインスタンスを起動すると、Amazon EC2 はスナップショットを使用して、そのインスタンスのルートボリュームのために新しい EBS ボリュームを作成します。インスタンスのカスタマイズ時に、インスタンスストアボリュームまたは EBS ボリュームを追加した場合、新しい AMI のブロックデバイスマッピングにこれらのボリュームの情報が含まれ、新しい AMI から起動するインスタンスのブロックデバイスマッピングに自動的にこれらのボリュームの情報が含まれます。新しいインスタンスのブロックデバイスマッピングに指定されているインスタンスストアボリュームは新しく、AMI の作成に使用したインスタンスのインスタンスストアボリュームからのデータは含まれていません。EBS ボリュームのデータは永続的です。詳細については、Amazon EC2 インスタンスでのボリュームのブロックデバイスマッピング を参照してください。
EBS-backed AMI から新しいインスタンスを作成する場合、本稼働環境に移す前にそのルートボリュームと追加 EBS ストレージの両方を初期化する必要があります。詳細については、「Amazon EBS ユーザーガイド」の「Amazon EBS ボリュームの初期化」を参照してください。
インスタンスから AMI を作成する
既存のインスタンスがある場合は、このインスタンスから AMI を作成できます。
- Console
-
AMI を作成するには
-
Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開きます。
-
ナビゲーションペインで、[インスタンス] を選択してください。
-
AMI を作成するインスタンスを選択し、[アクション] 、[イメージとテンプレート] の順に選択し、[イメージの作成] をクリックしてください。
このオプションが無効になっている場合、そのインスタンスは Amazon EBS-backed インスタンスではありません。
-
[イメージの作成] ページで、次の情報を指定します。
-
[イメージ名] に、最大 127 文字までイメージの一意の名前を入力してください。
-
[イメージの説明] に、最大 255 文字までイメージの説明を入力します (オプション)。
-
[インスタンスを再起動] の場合、チェックボックスをオンのまま (デフォルト) にするか、オフにします。
[インスタンスを再起動] をクリアした場合は、作成されたイメージのファイルシステムの整合性は保証されません。
-
[インスタンスボリューム] - 次のとおり、ルートボリュームを変更し、Amazon EBS およびインスタンスストアボリュームを追加できます。
-
ルートボリュームは、最初の行で定義されます。
-
EBS ボリュームを追加するには、[ボリューム追加] を選択します (これにより、新しい行が追加されます)。[ストレージタイプ] で [EBS] を選択し、行のフィールドに入力してください。作成した AMI からインスタンスを起動すると、追加したボリュームは自動的にそのインスタンスにアタッチされます。空のボリュームはフォーマットしてマウントする必要があります。スナップショットベースのボリュームはマウントする必要があります。
-
インスタンスストアボリュームを追加するには、「Amazon EC2 AMI にインスタンスストアボリュームを追加する」を参照してください。その後新しい AMI からインスタンスを起動すると、追加されたボリュームは自動的に初期化されてマウントされます。これらのボリュームには、AMI の作成に使用された実行中のインスタンスのインスタンスストアボリュームのデータは含まれません。
-
スナップショットの送信先 – インスタンスボリュームが EBS ローカルスナップショットをサポートしているローカルゾーンにある場合は、AMI のスナップショットを作成する場所を選択します。
このオプションは、EBS ローカルスナップショットをサポートするローカルゾーンにのみ、インスタンスがローカルゾーンで作成された場合に限って表示されます。ボリュームがリージョンにある場合、このオプションは表示されず、スナップショットはボリュームと同じリージョンに自動作成されます。詳細については、「Amazon EBS ユーザーガイド」の「Local snapshots in Local Zones」を参照してください。
インスタンスのボリュームのスナップショットはすべて同じ場所に存在する必要があります。既存のスナップショットの場所を確認してください。選択した送信先とは別の場所に既存のスナップショットがある場合、AMI の作成は失敗します。
-
タグ - AMI とスナップショットに同じタグを付けることも、異なるタグを付けることもできます。
-
AMI とスナップショットに同じタグを付けるには、[イメージとスナップショットに一緒にタグを付ける] を選択してください。AMI と作成されるすべてのスナップショットには、同じタグが適用されます。
-
AMI とスナップショットに異なるタグを付けるには、[イメージとスナップショットに個別にタグを付ける] を選択してください。AMI と作成されるスナップショットには、異なるタグが適用されます。ただし、すべてのスナップショットに同じタグが付けられます。各スナップショットに異なるタグを付けることはできません。
(オプション) タグを追加するには、[Add tag] を選択し、そのタグのキーと値を入力してください。各タグについて、これを繰り返します。
-
AMI を作成する準備ができたら、[イメージの作成] を選択してください。
-
作成中に AMI のステータスを表示するには
-
ナビゲーションペインで [AMI] を選択してください。
-
フィルタを [自分が所有] に設定し、リストから AMI を探します。
最初は、ステータスは pending ですが、数分後 available に変わります。
-
(オプション) 新しい AMI に作成されたスナップショットを表示するには:
-
前のステップで特定した AMI の ID をメモします。
-
ナビゲーションペインで、[スナップショット] を選択してください。
-
フィルターを [自分が所有] に設定し、新しい AMI ID のスナップショットを [説明] 列で検索します。
ユーザーがこの AMI からインスタンスを起動すると、Amazon EC2 はこのスナップショットを使用して、インスタンスのルートボリュームを作成します。
- AWS CLI
-
AMI を作成するには
create-image コマンドを使用します。
aws ec2 create-image \
--instance-id i-1234567890abcdef0 \
--name "my-web-server" \
--description "My web server image" \
--no-reboot
- PowerShell
-
AMI を作成するには
New-EC2Image コマンドレットを使用します。
New-EC2Image `
-InstanceId i-1234567890abcdef0 `
-Name "my-web-server" `
-Description "My web server image" `
-NoReboot $true
スナップショットから AMI を作成する
インスタンスのルートボリュームのスナップショットがある場合、このスナップショットから AMI を作成できます。
ほとんどの場合、Windows、RedHat、SUSE、SQL Server の AMI には、正しいライセンス情報が存在する必要があります。詳細については、「AMI の請求情報について」を参照してください。スナップショットから AMI を作成する場合、RegisterImage オペレーションはスナップショットのメタデータから正しい請求情報を取得しますが、これには適切なメタデータが必要です。正しい請求情報が適用されたかどうかを確認するには、新しい AMI の [プラットフォームの詳細] フィールドを確認します。フィールドが空であるか、所定のオペレーティングシステムコード (Windows、RedHat、SUSE、SQL など) と一致しない場合、AMI の作成は失敗しているため、この AMI を破棄して「インスタンスから AMI を作成する」の手順に従う必要があります。
- Console
-
スナップショットから AMI を作成するには
Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開きます。
-
ナビゲーションペインで、[スナップショット] を選択してください。
-
AMI の作成元になるスナップショットを選択してから、[アクション]、[スナップショットからイメージ作成] の順に選択してください。
-
[スナップショットからイメージを作成] ページで、次の情報を指定します。
-
[イメージ名] に、イメージのわかりやすい名前を入力してください。
-
[説明] に、イメージの簡単な説明を入力してください。
-
[アーキテクチャ] で、イメージアーキテクチャを選択してください。32 ビットの場合は [i386]、64 ビットの場合は [x86_64]、64 ビット ARM の場合は [arm64]、64 ビット macOS の場合は [x86_64] をそれぞれ選択してください。
-
[ルートデバイス名] に、ルートボリュームに使用するデバイス名を入力してください。詳細については、「Amazon EC2 インスタンス上のボリュームのデバイス名」を参照してください。
-
[仮想化タイプ] で、この AMI から起動されたインスタンスで使用する仮想化タイプを選択してください。詳細については、仮想化タイプ を参照してください。
-
(準仮想化の場合のみ) [カーネル ID] で、イメージのオペレーティングシステムのカーネルを選択してください。インスタンスのルートボリュームのスナップショットを使用している場合、元のインスタンスと同じカーネル ID を選択してください。不明な場合は、デフォルトのカーネルを使用してください。
-
(準仮想仮想化の場合のみ) [RAM ディスク ID] で、イメージの RAM ディスクを選択してください。カーネルを選択した場合は、サポートするドライバーとともに特定の RAM ディスクを選択しなければならない可能性があります。
-
[ブートモード] では、イメージのブートモードを選択するか [デフォルトを使用] を選択し、この AMI でインスタンスを起動したときにインスタンスタイプでサポートされているブートモードで起動するようにします。詳細については、「Amazon EC2 AMI のブートモードを設定する」を参照してください。
-
(オプション) [ブロックデバイスマッピング] で、ルートボリュームをカスタマイズし、データボリュームを追加します。
ボリュームごとに、サイズ、タイプ、パフォーマンス特性、終了時の削除の動作、および暗号化ステータスを指定できます。ルートボリュームについては、サイズをスナップショットのサイズより小さくすることはできません。ボリュームタイプには、汎用 SSD gp3 がデフォルトで選択されています。
-
(オプション) [タグ] で、新しい AMI に 1 つ以上のタグを追加できます。(オプション) タグを追加するには、[タグ追加] を選択し、そのタグのキーと値を入力してください。各タグについて、これを繰り返します。
-
AMI を作成する準備ができたら、[イメージの作成] を選択してください。
-
(Windows、RedHat、SUSE、SQL Server のみ) 正しい請求情報が適用されたかどうかを確認するには、新しい AMI の [プラットフォームの詳細] フィールドを確認します。フィールドが空であるか、所定のオペレーティングシステムコード (Windows や RedHat など) と一致しない場合、AMI の作成は失敗しているため、この AMI を破棄して「インスタンスから AMI を作成する」の手順に従う必要があります。
- AWS CLI
-
AWS CLI を使用してスナップショットから AMI を作成するには
register-image コマンドを使用します。
aws ec2 register-image \
--name my-image \
--root-device-name /dev/xvda \
--block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0db2cf683925d191f}
- PowerShell
-
PowerShell を使用してスナップショットから AMI を作成するには
Register-EC2Image コマンドレットを使用します。
$block = @{SnapshotId=snap-0db2cf683925d191f}
Register-EC2Image `
-Name my-image `
-RootDeviceName /dev/xvda `
-BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block}