S3 を使用して AMI を保存および復元する - Amazon Elastic Compute Cloud

S3 を使用して AMI を保存および復元する

Amazon マシンイメージ (AMI) を Amazon S3 バケットに保存し、AMI を別の S3 バケットにコピーして、S3 バケットから復元できます。S3 バケットを使用して AMI を保存および復元することで、AMI をある AWS パーティションから別のパーティション (例えば、主要な商用パーティションから AWS GovCloud (US) パーティション) にコピーできます。AMI を S3 バケットに保存することで、AMI のアーカイブコピーを作成することもできます。

S3 を使用した AMI の保存および復元のサポート対象の API は、CreateStoreImageTaskDescribeStoreImageTasks、および CreateRestoreImageTask です。

CopyImage は、AWS パーティション内の AMI のコピーの際に使用することが推奨される API です。ただし、CopyImage は、AMI を別のパーティションにコピーできません。

AWS パーティションの詳細については、「IAM ユーザーガイド」の「Amazon リソースネーム (ARN)」ページの「パーティション」を参照してください。

警告

AWS パーティションまたは AWS リージョン間でデータを移動する場合、適用されるすべての法令およびビジネス要件 (適用される政府の規制およびデータ所在地に関する要件を含みますが、これらに限られません) を確実に遵守してください。

ユースケース

ある AWS パーティションから別の AWS パーティションに AMI をコピーする

S3 バケットを使用して AMI を保存および復元することで、ある AWS パーティションから別のパーティションに、またはある AWS リージョンから別のリージョンに AMI をコピーできます。次の例では、主要な商用パーティションから AWS GovCloud (US) パーティションに、具体的には us-east-2 リージョンから us-gov-east-1 リージョンに AMI をコピーします。

あるパーティションから別のパーティションに AMI をコピーするには、次の手順に従います。

  • CreateStoreImageTask を使用して、現在のリージョンの S3 バケットに AMI を保存します。この例では、S3 バケットは us-east-2 にあります。コマンドの例については、S3 バケットに AMI を保存する をご参照ください。

  • DescribeStoreImageTasks を使用して、保存タスクの進行状況をモニタリングします。タスクが完了すると、オブジェクトが S3 バケットに表示されます。コマンドの例については、AMI 保存タスクの進行状況を記述する をご参照ください。

  • 任意の手順を使用して、保存された AMI オブジェクトをターゲットパーティションの S3 バケットにコピーします。この例では、S3 バケットは us-gov-east-1 にあります。

    注記

    パーティションごとに異なる AWS 認証情報が必要なため、S3 オブジェクトをあるパーティションから別のパーティションに直接コピーすることはできません。パーティション間で S3 オブジェクトをコピーするプロセスは、このドキュメントの対象外です。例として、次のコピープロセスを提供していますが、お客様のセキュリティ要件を満たすコピープロセスを使用する必要があります。

    • パーティション間で 1 つの AMI をコピーするためのコピープロセスはシンプルです。ソースバケットから中間ホスト (EC2 インスタンスやラップトップなど) にオブジェクトをダウンロードし、中間ホストからターゲットバケットにオブジェクトをアップロードするだけです。プロセスの各段階で、パーティションの AWS 認証情報を使用します。

    • より持続的な使用のために、コピーを管理するアプリケーションの開発をご検討ください。S3 マルチパートダウンロードとアップロードを使用することも考慮に値します。

  • CreateRestoreImageTask を使用して、ターゲットパーティションの S3 バケットから AMI を復元します。この例では、S3 バケットは us-gov-east-1 にあります。コマンドの例については、S3 バケットから AMI を復元する をご参照ください。

  • その状態が使用可能になるタイミングを確認するために、AMI を記述して復元タスクの進行状況をモニタリングします。また、スナップショットを記述することで、復元される AMI を構成するスナップショットの進行状況 (%) をモニタリングすることもできます。

AMI のアーカイブコピーを作成する

AMI を S3 バケットに保存することで、AMI のアーカイブコピーを作成できます。コマンドの例については、S3 バケットに AMI を保存する をご参照ください。

AMI は S3 内の 1 つのオブジェクトにパックされ、すべての AMI メタデータ (共有情報を除く) は、保存された AMI の一部として保持されます。AMI データは、ストレージプロセスの一環として圧縮されます。簡単に圧縮できるデータを含む AMI は、S3 で小さめのオブジェクトとなります。コストを削減するために、より安価な S3 ストレージ階層を使用できます。詳細については、Amazon S3 ストレージクラスおよび Amazon S3 の料金をご参照ください。

AMI ストアと復元 API の仕組み

S3 を使用して AMI を保存および復元するには、次の API を使用します。

  • CreateStoreImageTask – AMI を S3 バケットに保存する

  • DescribeStoreImageTasks – AMI 保存タスクの進行状況を示す

  • CreateRestoreImageTask – S3 バケットから AMI を復元する

CreateStoreImageTask

CreateStoreImageTask API は、AMI を S3 バケット内の単一のオブジェクトとして保存します。

API は、AMI とそのスナップショットからすべてのデータを読み取るタスクを作成し、S3 マルチパートアップロードを使用して S3 オブジェクトにデータを保存します。API は、リージョン固有でない AMI メタデータの大部分を含む AMI のすべてのコンポーネント、および AMI に含まれるすべての EBS スナップショットを取得し、S3 内の単一のオブジェクトにパックします。データは、S3 で使用される領域の量を削減するために、アップロードプロセスの一環として圧縮されるので、S3 内のオブジェクトは AMI 内のスナップショットのサイズの合計よりも小さくなる可能性があります。

この API を呼び出すアカウントに AMI タグとスナップショットタグが表示されている場合、それらは保持されます。

S3 のオブジェクトは AMI と同じ ID を持っていますが、.bin 拡張子が付いています。AMI 名、AMI の説明、AMI の登録日、AMI の所有者アカウント、および保存オペレーションのタイムスタンプといったデータも S3 オブジェクトに S3 メタデータタグとして保存されます。

タスクを完了するのにかかる時間は、AMI のサイズによって異なります。また、タスクがキューに入れられているため、進行中の他のタスクの数にも依存します。DescribeStoreImageTasks API を呼び出すことで、タスクの進行状況を追跡できます。

進行中のすべての AMI のサイズの合計は、アカウントごとに 600 GB の EBS スナップショットデータに制限されます。進行中のタスクが制限未満になるまで、それ以降のタスクの作成は拒否されます。例えば、100 GB のスナップショットデータを持つ AMI と 200 GB のスナップショットデータを持つ別の AMI が現在保存されている場合、別のリクエストが受け入れられます。これは、進行中の合計が 300 GB で、制限未満であるためです。ただし、800 GB のスナップショットデータを持つ 1 つの AMI が現在保存されようとしている場合は、タスクが完了するまでそれ以降のタスクは拒否されます。

DescribeStoreImageTasks

DescribeStoreImageTasks API は、AMI 保存タスクの進行状況を示します。指定した AMI のタスクを記述できます。AMI を指定しない場合、過去 31 日間に処理されたすべての保存イメージタスクのページ分割されたリストが表示されます。

各 AMI タスクについて、応答では、タスクが InProgressCompleted、または Failed のいずれであるかが示されます。InProgress のタスクの場合、応答では、進行状況がパーセンテージで示されます。

タスクは時系列の逆順にリストされます。

現時点では、前月のタスクのみを表示できます。

CreateRestoreImageTask

CreateRestoreImageTask API は、CreateStoreImageTask リクエストを使用して以前に作成された S3 オブジェクトから AMI を復元するタスクを開始します。

復元タスクは、保存タスクが実行されたリージョンと同じリージョンまたは別のリージョンで実行できます。

AMI オブジェクトの復元ソースである S3 バケットは、復元タスクがリクエストされたリージョンと同じリージョンに存在する必要があります。AMI はこのリージョンで復元されます。

AMI は、保存された AMI の値に対応する名前、説明、ブロックデバイスマッピングなどのメタデータとともに復元されます。このアカウントの名前は、リージョン内の AMI に対して一意である必要があります。名前を指定しない場合、新しい AMI は元の AMI と同じ名前になります。AMI は、復元プロセス時に生成される新しい AMI ID を取得します。

AMI 復元タスクを完了するのにかかる時間は、AMI のサイズによって異なります。また、タスクがキューに入れられているため、進行中の他のタスクの数にも依存します。タスクの進行状況は、AMI (describe-images) またはその EBS スナップショット (describe-snapshots) を記述することで確認できます。タスクが失敗すると、AMI とスナップショットは失敗の状態に移行されます。

進行中のすべての AMI のサイズの合計は、アカウントあたり 300 GB (復元後のサイズに基づく) の EBS スナップショットデータに制限されます。進行中のタスクが制限未満になるまで、それ以降のタスクの作成は拒否されます。

制限事項

  • AMI を保存するには、AWS アカウント が AMI とそのスナップショットを所有しているか、AMI とそのスナップショットをアカウントと直接共有する必要があります。公開されているだけの AMI は保存できません。

  • これらの API を使用して保存できるのは、EBS-backed AMI だけです。

  • 準仮想化 (PV) AMI はサポートされていません。

  • 保存可能な AMI の上限サイズ (圧縮前) は、5,000 GB です。

  • 保存イメージリクエストのクォータ: 進行中の 600 GB の保存作業 (スナップショットデータ)。

  • 復元イメージリクエストのクォータ: 進行中の 300 GB の復元作業 (スナップショットデータ)。

  • 保存タスク中は、スナップショットを削除してはならず、保存を実行する IAM プリンシパルにはスナップショットへのアクセス権が必要です。それ以外の場合は、保存プロセスが失敗します。

  • 同じ S3 バケットに AMI の複数のコピーを作成することはできません。

  • S3 バケットに保存されている AMI は、元の AMI ID では復元できません。AMI エイリアシングを使用すると、これを軽減できます。

  • 現在、保存 API と復元 API は、AWS Command Line Interface、AWS SDK、および Amazon EC2 API を使用する場合にのみサポートされます。Amazon EC2 コンソールを使用して AMI を保存および復元することはできません。

コスト

S3 を使用して AMI を保存および復元する場合、保存 API と復元 API で使用されるサービス、およびデータ転送について料金が発生します。API は、S3 と EBS Direct API を使用します (これらの API がスナップショットデータにアクセスするために内部的に使用されます)。詳細については、Amazon S3 の料金および Amazon EBS の料金をご参照ください。

AMI のセキュリティ保護

保存 API と復元 API を使用するには、S3 バケットと AMI が同じリージョンに存在する必要があります。AMI のコンテンツを保護するために十分なセキュリティをもって S3 バケットが確実に設定されていること、および AMI オブジェクトがバケット内に残っている限り、セキュリティが確実に維持されるようにすることが重要です。これを実行できない場合は、これらの API の使用はお勧めしません。S3 バケットへのパブリックアクセスが許可されていないことを確認します。必須ではありませんが、AMI を保存する S3 バケットのためにサーバー側の暗号化を有効にすることをお勧めします。

S3 バケットに適切なセキュリティを設定する方法については、次のセキュリティトピックをご参照ください。

AMI スナップショットが S3 オブジェクトにコピーされると、データは TLS 接続を介してコピーされます。暗号化されたスナップショットを使用して AMI を保存できますが、スナップショットは保存プロセスの一部として復号されます。

S3 を使用して AMI を保存および復元するためのアクセス権限

IAM プリンシパルが Amazon S3 を使用して AMI を保存または復元する場合は、必要な許可を付与する必要があります。

次のポリシーの例には、IAM プリンシパルが保存タスクと復元タスクを実行できるようにするために必要なすべてのアクションが含まれています。

特定のリソースへのアクセス権のみをプリンシパルに付与する IAM ポリシーを作成することもできます。ポリシーの例については、「IAM ユーザーガイド」の「AWS リソースのアクセス管理」を参照してください。

注記

AMI を構成するスナップショットが暗号化されている場合、またはアカウントの暗号化がデフォルトで有効になっている場合は、IAM プリンシパルに KMS キーを使用するための許可が付与されている必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:PutObjectTagging", "s3:AbortMultipartUpload", "ebs:CompleteSnapshot", "ebs:GetSnapshotBlock", "ebs:ListChangedBlocks", "ebs:ListSnapshotBlocks", "ebs:PutSnapshotBlock", "ebs:StartSnapshot", "ec2:CreateStoreImageTask", "ec2:DescribeStoreImageTasks", "ec2:CreateRestoreImageTask", "ec2:GetEbsEncryptionByDefault", "ec2:DescribeTags", "ec2:CreateTags" ], "Resource": "*" } ] }

AMI 保存 API および復元 API を使用する

S3 バケットに AMI を保存する

AMI (AWS CLI) を保存するには

create-store-image-task コマンドを使用します。AMI の ID と、AMI を保存する S3 バケットの名前を指定します。

aws ec2 create-store-image-task \ --image-id ami-1234567890abcdef0 \ --bucket myamibucket

正常な出力

{ "ObjectKey": "ami-1234567890abcdef0.bin" }

AMI 保存タスクの進行状況を記述する

AMI 保存タスクの進行状況を記述するには (AWS CLI)

describe-store-image-tasks コマンドを使用します。

aws ec2 describe-store-image-tasks

正常な出力

{ "AmiId": "ami-1234567890abcdef0", "Bucket": "myamibucket", "ProgressPercentage": 17, "S3ObjectKey": "ami-1234567890abcdef0.bin", "StoreTaskState": "InProgress", "StoreTaskFailureReason": null, "TaskStartTime": "2021-01-01T01:01:01.001Z" }

S3 バケットから AMI を復元する

AMI (AWS CLI) を復元するには

create-restore-image-task コマンドを使用します。describe-store-image-tasks 出力からの S3ObjectKey および Bucket の値を使用して、AMI のオブジェクトキーと AMI のコピー先の S3 バケットの名前を指定します。復元された AMI の名前も指定します。このアカウントの名前は、リージョン内の AMI に対して一意である必要があります。

注記

復元された AMI は、新しい AMI ID を取得します。

aws ec2 create-restore-image-task \ --object-key ami-1234567890abcdef0.bin \ --bucket myamibucket \ --name "New AMI Name"

正常な出力

{ "ImageId": "ami-0eab20fe36f83e1a8" }

S3 のファイルパスを使用する

AMI を保存および復元するときは、次の方法でファイルパスを使用できます。

  • AMI を S3 に保存する場合、ファイルパスをバケット名に追加できます。システム内部では、バケット名からパスが分離され、AMI を保存するために生成されたオブジェクトキーにそのパスが追加されます。完全なオブジェクトパスは、API 呼び出しからのレスポンスに表示されます。

  • AMI を復元する場合、オブジェクトキーパラメータを使用できるので、オブジェクトキー値の先頭にパスを追加できます。

AWS CLI および SDK を使用するときは、ファイルパスを使用できます。

例: AMI の保存と復元にファイルパスを使用する (AWS CLI)

次の例では、まず、バケット名にファイルパスを追加して、AMI を S3 に保存します。次に、オブジェクトキーパラメータの先頭にファイルパスを追加して、S3 から AMI を復元します。

  1. AMI を保存します。--bucket には、次のようにバケット名の後にファイルパスを指定します。

    aws ec2 create-store-image-task \ --image-id ami-1234567890abcdef0 \ --bucket myamibucket/path1/path2

    正常な出力

    { "ObjectKey": "path1/path2/ami-1234567890abcdef0.bin" }
  2. AMI を復元します。--object-key には、前のステップの出力からの、ファイルパスを含む値を指定します。

    aws ec2 create-restore-image-task \ --object-key path1/path2/ami-1234567890abcdef0.bin \ --bucket myamibucket \ --name "New AMI Name"