Amazon Web Services ブログ
S3 バケット間で既存のオブジェクトをレプリケートする
更新(2021/8/25):当ブログ記事の、Amazon S3コンソールでのレプリケーションルールの設定は、更新されています。
更新(2022/2/10): Amazon S3 Batch Replicationは、2022/2/8に開始され、既存のS3オブジェクトのレプリケーションとS3バケットの同期ができるようになりました。詳細は、S3ユーザーガイドを参照してください。
——–
お客様は、そのビジネス要件またはエンタープライズポリシー上、既存の Amazon S3 オブジェクトの追加コピーを求められることがよくあります。Amazon S3 レプリケーションは、新しくアップロードされたオブジェクトを S3 バケット間でレプリケートするために広く使われていますが、S3 バケット間で既存のオブジェクトを多数レプリケートする最も簡単な方法をまだご存知ではないお客様が数多くいらっしゃいます。この記事では、Amazon S3 レプリケーションを使用して既存のオブジェクトのクロスリージョンレプリケーションをトリガーする方法を説明します。
Amazon S3 レプリケーションは、オブジェクトをある Amazon S3 バケットから別のバケットにコピーするための、低コストで柔軟なマネージド型ソリューションです。Amazon S3 レプリケーションでは、Amazon S3 Cross-Region Replication (CRR) を使って、異なる AWS リージョンをまたいで S3 オブジェクトを自動的にレプリケートするルールを設定できます。または、Amazon S3 Same-Region Replication (SRR) を使用して、同じ AWS リージョン内のバケット間でオブジェクトをレプリケートするルールを設定できます。
お客様は、AWS サポートに連絡してこの機能をソースバケットに追加することにより、同じ AWS リージョン内または異なる AWS リージョン間の別のバケットに既存のオブジェクトをコピーできます。ソースバケットで既存のオブジェクトのレプリケーションのサポートを有効にすると、お客様は、新しくアップロードされたオブジェクトに加えて、既存のすべてのオブジェクトに対して S3 レプリケーションを使用できるようになります。レプリケーションプロセスが完了すると、お客様はすべてのオブジェクトが含まれる 2 つのバケットを持つことができ、新しくアップロードされたオブジェクトは宛先バケットにレプリケートされます。
既存のオブジェクトのレプリケーションは、既存の S3 レプリケーション機能を拡張したものであり、同じ機能がすべて含まれます。これには、メタデータ (オブジェクトの作成日時など) を保持しながらオブジェクトをレプリケートしたり、オブジェクトを異なるストレージクラスにレプリケートしたり、異なる所有権でオブジェクトのコピーを保持したりする機能が含まれます。Amazon S3 Replication Time Control (S3 RTC) は、既存のオブジェクトレプリケーションを設定するときにも有効にできます。ただし、S3 RTC は新しくアップロードされたオブジェクトのレプリケーションにのみ適用され、既存のオブジェクトには適用されないことに注意してください。
このブログ記事では、既存のオブジェクトに対して S3 レプリケーションを有効にして設定する方法を示します。
既存のオブジェクトのレプリケーションを設定する
アカウントで既存のオブジェクトレプリケーションを有効にするには、AWS サポートに連絡して、テクニカルサポートケース (サービス: Amazon S3) を開いてください。これは、レプリケーションが正しく設定されるようにするために必要です。リクエストの遅延を防ぐには、AWS サポートケースに「既存のオブジェクトのレプリケーション」という件名を付け、必ず次の情報を含めてください。
- ソースバケット
- 宛先バケット
- レプリケートする推定ストレージボリューム (テラバイト単位)
- レプリケートする推定ストレージオブジェクト数
注意: サポートチケットが作成されると、AWS サポートは S3 チームと連携して、既存のオブジェクトのレプリケーション用にお客様のバケットをホワイトリストに登録します。
AWS サポートがバケットの既存のオブジェクトをレプリケートするためのサポートを行ったら、レプリケーション設定を確認することをお勧めします。より大きなデータセットに適用する前に、小さなテストバケット/プレフィックスをセットアップすることで、権限に加えて設定の正確さをテストできます。失敗したオブジェクトのレプリケーションを再度トリガーするのは容易ではないため、この検証手順を踏むことが重要です。
また、レプリケーションを有効にする前に、要件を忘れずに確認しましょう。これには、ソースバケットと宛先バケットの両方でバージョン管理が有効になっているかを確認することが含まれます。
S3 レプリケーションで既存のオブジェクトのレプリケーションを開始する
この例では、us-east-1 リージョンのソースバケット (s3replication-source) 全体を us-west-1 リージョンの宛先バケット (s3replication-destination) にレプリケートします。また、宛先オブジェクトストレージクラスを S3 標準 – 低頻度アクセスに設定します。
ソースバケットがホワイトリストに登録されたら、次のようにレプリケーションルールを設定できます。
パート 1: S3 マネジメントコンソールでレプリケーションルールを設定する
ここで、ソースバケットにレプリケーションルールを作成するプロセスを開始します。これには、レプリケートするオブジェクトを選択し、既存のオブジェクトのレプリケーションを有効にすることが含まれます。
- AWS マネジメントコンソールにサインインし、Amazon S3 コンソールを開きます。
- [バケット名] リストで、既存のオブジェクトのレプリケーション用にホワイトリストに登録されているソースバケットを選択します。
- バケットの [管理] タブに移動し、[レプリケーション] を選択します。ここで、既存のオブジェクトを移行するためのレプリケーションルールを作成します。
- [ルールを追加] を選択します。このルールを作成すると、バケットで標準の CRR または SRR も有効になります。
- [レプリケーションルール] ウィザードの [ソースの設定] で [バケット全体] を選択して、すべての既存のオブジェクトと新しいオブジェクトをコピーします。
- 注意: また、特定のタグまたはプレフィックスを使用してオブジェクトをコピーする場合は、[プレフィックスまたはタグ] を選択することもできます 。
- 既存のオブジェクトをレプリケートするには、[レプリケーション条件] で [既存のオブジェクトをレプリケート] チェックボックスをオンにします。これにより、既存のオブジェクトの S3 レプリケーションが有効になります。[既存のオブジェクトをレプリケート] チェックボックスが表示されない場合、ソースバケットはまだホワイトリストに登録されていません。
パート 2: S3 マネジメントコンソールでレプリケーションルールを設定する
これで、ストレージクラス、オブジェクトの所有権、Replication Time Control の設定など、宛先オプションとルールオプションを指定する準備ができました。S3 RTC は新しいオブジェクトにのみ適用され、既存のオブジェクトには適用されないことに注意してください。レプリケーションに使用する IAM ロールと優先度の値も選択します。
- ウィザードの宛先設定セクションで、ドロップダウンリストから宛先バケットを選択します。この例では、s3repliction-destination バケットが宛先バケットです。
- レプリケートされたオブジェクトのストレージクラスを変更するには、[レプリケートされたオブジェクト用のストレージクラスを変更] チェックボックスをオンにし、宛先のストレージクラスを選択します。前述のように、この例では、次のスクリーンショットに示すように、レプリケートされたオブジェクトストレージクラスを S3 標準 – 低頻度アクセスに設定しています。
- 既存の AWS Identity and Access Management (AWS IAM) ロールを作成または指定して、Amazon S3 が代わりにオブジェクトをレプリケートできるようにします。IAM ロールフィールドを選択して新しいロールを作成すると、S3 は次の権限を持った新しいロール (s3crr_role_for_<SourceBucket>_to_<DestinationBucket>) を作成します。
-
- ソースバケットでの Get と List 権限
- 宛先バケットでの ReplicateObject、ReplicateDelete、ReplicateTags、GetObjectVersionTagging 権限
注意: 宛先バケットが別の AWS アカウントにある場合、宛先アカウントの所有者は、ソースバケットにレプリカを格納するための権限を付与する必要があります。詳細については、このドキュメントをご覧ください。
- [ルール名] で、ルールの名前を入力します。名前は必須で、バケット内で一意である必要があります。
注意: バケットに既存のレプリケーションルールがある場合、ルールの優先度を設定するように求められます。これは、複数のルールのスコープに含まれるオブジェクトによって引き起こされる競合を回避するために使用します。ルールが重複している場合、Amazon S3 はルールの優先度を使用して、適用するルールを決定します。数値が大きいほど、優先度が高くなります。
- [確認する] で設定を確認します。既存のオブジェクトのレプリケーションを有効にした場合、次のスクリーンショットに示すように、[ソース] で、[レプリケート] が [すべてのオブジェクト] に設定されていることが確認できます。
- ルールを保存したら、S3 コンソールの [レプリケーション] ページでルールを編集、有効化、無効化、または削除できます。
注: 新しくアップロードしたオブジェクトのレプリケーションとは異なり、既存のオブジェクトにレプリケーションルールが設定された後、レプリケーションが開始されるまでに最大 48 時間かかります。
AWS CLI を使用してレプリケーションポリシーを設定する
AWS CLI を使用してレプリケーションルールを設定するには、設定レプリケーションの例を紹介している S3 ドキュメントに記載されている手順に従います。ただし、レプリケーション設定 (JSON ドキュメント) を作成するときは、ExistingObjectReplication を追加し、ステータス値を設定して有効化する必要があります。次の例でこれを示します。
{
"Role": "<IAM-Role-ARN>",
"Rules": [
{
"Status": "Enabled",
"Filter": {},
"DeleteMarkerReplication": {
"Status": "Disabled"
},
"Destination": {
"Account": "<Destination-Account-ID>",
"AccessControlTranslation": {
"Owner": "Destination"
},
"Bucket": "arn:aws:s3:::<Destination-Bucket-Name>",
"StorageClass": "<Destination-Storage-Class>"
},
"Priority": <Rule-Priority>,
"ExistingObjectReplication": {
"Status": "Enabled"
},
"ID": "<Replication-Rule-Name>"
}
]
}
レプリケーションのモニタリング
既存のオブジェクトのレプリケーションステータスをモニタリングするには、レプリケーションを有効にする少なくとも 48 時間前にソースバケットで Amazon S3 インベントリを設定します。これを設定する詳細な手順については、Amazon S3 インベントリの設定に関するユーザーガイドを参照してください。
S3 インベントリをクエリするには、こちらで説明しているように AWS CLI を使用するか、このブログ記事で説明しているように Athena を使用できます。レプリケーションステータスは、オブジェクトのレプリケーションが保留中か、完了したか、失敗したかに関する情報を示します。
クリーンアップ
テスト目的でこのブログの手順を一緒に実行した場合は、コストが不必要に発生しないようにするために、不要になったすべてのオブジェクトとバケットを忘れずに削除してください。
まとめ
このブログ記事では、S3 バケットの既存のオブジェクトレプリケーションを有効にする方法を説明しました。また、S3 レプリケーションを設定して、同じリージョン内または異なるリージョン間のバケットに、または異なる AWS アカウントが所有するバケットに既存のオブジェクトをレプリケートする方法も示しました。これにより、多数の既存のオブジェクトを簡単にレプリケートでき、S3 オブジェクトのコピーを追加で必要とするビジネスポリシーを順守するのに役立ちます。
以下は、役立つと思われるその他の参考資料です。
- Amazon S3 レプリケーション
- レプリケーション
- レプリケーションの要件
- ソースバケットを所有する AWS アカウントと宛先バケットを所有する AWS アカウントが異なる場合にレプリケーション権限を付与する
- S3 Replication Time Control
- Amazon S3 インベントリの設定
お読みいただきありがとうございます。ご質問がある場合は、以下のコメント欄にご記入ください。