Amazon S3 バケットを別の AWS リージョンに移行する方法を教えてください。

最終更新日: 2019 年 5 月 17 日

Amazon Simple Storage Service (Amazon S3) バケットを別の AWS リージョンに移動したいです。どうすればできますか?

簡単な説明

既存の S3 バケットを別の AWS リージョンに移行することはできません。代わりに、送信先リージョンに新しいバケットを作成します。次に、ソースバケットから新しいバケットにデータをコピーします。

送信先リージョンで同じバケット名を使用するには、新しいバケットを作成する前にソースバケットを削除できなければなりません。これは、バケット名は Amazon S3 のすべての既存のバケット間で一意でなければならないためです。ソースバケットを削除している間、一時的なバケットを使用してデータを保存できます。 

解決方法

同じバケット名を使用して別のリージョンにソースバケットを再作成するには、次の手順に従います。

警告: バケット名が使用可能になると、そのバケット名はすべての AWS のお客様も使用できるようになります。バケット名を予約することはできません。名前が使用可能になり、別のユーザーがそれをリクエストした場合、名前を元に戻すことはできません。

1.    送信先リージョンに一時バケットを作成します (送信先バケット A)。

2.    ソースバケットから送信先バケット A にデータをコピーします。このコピーを実行する方法の 1 つは、AWS コマンドラインインターフェイス (CLI) を使用して sync コマンドを実行することです。次の点に注意してください。

  • 新しいバケットとそのオブジェクトを別の AWS アカウントに所属させる場合は、クロスアカウント許可を持つ AWS Identity and Access Management (IAM) ユーザーまたはロールでコピーを実行する必要があります。IAM ID がソースアカウントに属している場合、その ID には送信先バケットへのアクセス許可が必要です。IAM ID が送信先アカウントに属している場合、その ID にはソースバケットへのアクセス許可が必要です。
  • ソースアカウントの IAM ID を使用してコピーを実行する場合は、必ずオブジェクトのアクセスコントロールリスト (ACL) を「bucket-owner-full-control」に設定してください。これは、バケット所有者にオブジェクトへのフルアクセスを許可する定型 ACL です。
  • コピーにかかる時間はコピーしているデータの量によって異なります。操作の完了にかかる時間を短縮するため、データ転送セッションの複数のインスタンスを起動できます。たとえば、AWS CLI を使用して並列アップロードを実行できます。
 
3.    コピー操作が完了したら、 ソースバケットを削除します。

4.    bucket-exists コマンドを実行して、バケット名が使用可能であることを確認します。コマンドが「Waiter BucketExists failed: Max attempts exceeded」を返した場合は、そのバケット名を使用できます。

注: バケットを削除した後、名前を再利用して送信先リージョンに新しいバケットを作成するまでに、時間がかかる場合があります。利用可能になり次第バケット名を要求するには、スクリプトを実行してバケット名の利用可能性を継続的に確認します。その後名前が使用可能になると、スクリプトは CreateBucket API 呼び出しを発行できます。

5.    ソースバケットの名前で送信先リージョン (送信先バケット B) に新しいバケットを作成します。

6.    送信先バケット A から送信先バケット B にデータをコピーします。

7.    コピー操作が完了したら、送信先バケット A を削除します。