AWS S3 Batch Replicationを使用して既存のオブジェクトを別アカウントのバケットにレプリケートしてみた!
テクニカルサポートチームの丸屋 正志(Maruya Masashi)です。
困っていた内容
とある S3 バケット内に存在する全ての既存オブジェクトを、別アカウントの S3 バケットに全部移行したいです。 但し、同一リージョン間で送りたいです。
どう対応すればいいの?
Amazon S3 Batch Replication を用いることにより簡単に別 AWS アカウントのバケットにレプリケーションする事が出来ます。
NEW – Replicate Existing Objects with Amazon S3 Batch Replication
今までの S3 レプリケーションでは、既存オブジェクトを実施する際には、AWSサポートに問い合わせる必要がありましたが、今回のアップデートにより利用者側だけで完結するようになりました。
事前準備として、AWSアカウント2個用意していただき、バージョニングを有効にします。 ※下記に表示されているリソース名や AWS アカウント ID 等は、全て架空のリソース名です、実際に利用する際には、ご利用の環境に合わせてください。
- cm-target-replication00 (ターゲット先)
- バージョニング有効済み
- AWS アカウント ID : 000000000000
- cm-source-replication (ソース元)
やってみた
必ず開発環境でお試しいただいてから、その後に検証環境でもお試しいただき、最後に本番環境での実施をしてください。
ターゲット先での作業
レプリケーション設定をするために、ターゲット側の【管理】->【アクション】->【レプリケートされたオブジェクトの受信】をクリックします。
ソースバケットアカウント設定
- 『ソースバケットアカウント ID』 : [ソース先の AWS アカウント ID を入力] (例 : 123456789012)
- 『ポリシーの生成』 : 選択
ポリシー
- 『▼バケットポリシーの表示』 : 【選択】
- 『オブジェクト所有者を送信先バケット所有者に変更するアクセス許可を含める』 : 【チェック】
- 所有者の変更をしない場合は、チェックを外す
- 『設定の適用』 : 【選択】
ソース元での作業
レプリケーション設定をするために、ソース側の【管理】->【レプリケーションルールの作成】をクリックします。
レプリケーションルールの設定
- 『レプリケーションルール名』 : [任意の名前] (例 : Replication-Batch-TEST)
- 『ステータス』 : 【有効】(デフォルト)
ソースバケット
- 『ルールスコープの選択』 : 【バケット内のすべてのオブジェクトに適用】
送信先
- 『送信先』 : 【別のアカウントのバケットを指定する】
- 『アカウント ID』 : [ターゲット先の AWS アカウント ID を入力] (例 : 000000000000)
- 『バケット名』 : [ターゲット先の S3 バケット名] (例 : cm-target-replication00)
IAM ロール
- 『既存の IAM ロールから選択』 : デフォルト
- 『IAM ロール』 : 【新しいロールの作成】(プルダウンメニューから選択)
暗号化・送信先ストレージ・追加のレプリケーションオプション
上記については、ご利用の環境に合わせて変更し【保存】をクリックします。
既存のオブジェクトをレプリケートしますか?
- 『はい、既存のオブジェクトをレプリケートします。』 : 【選択】
バッチオペレーションジョブを作成します
cm-source-replication (ソース元) で作業を実施します。
ジョブ設定
- 『ジョブ実行オプション』 : 【準備ができたらジョブを自動的に実行します】(デフォルト)
完了レポート
- 『完了レポート』 : 不要な場合はチェックを外す
アクセス許可
- 『既存の IAM ロールから選択』 : デフォルト
- 『IAM ロール』 : 【新しいロールの作成】(プルダウンメニューから選択)
ジョブの実行
ジョブが正常に作成され、実行している状態となります。
しばらく待つと、『完了済み』と表示されます。
レプリケーションされたか確認
ターゲット先の S3 バケットでレプリケーションされているかを確認すると、オブジェクトが存在している事を確認することが出来ます。
FAQ
Q, ターゲット先のS3バケットでオブジェクトが表示されません。 A, 以下 2 点をご確認ください。
- ソース元のジョブは成功かつ、失敗した合計(率)は 0% でしょうか?
- ターゲット先にてバケット内でのスーパーリロード( F5 更新など)を実行しても表示されないでしょうか?
Q, IAMロールが上手く作成出来ません。 A, 作業している IAM ユーザー/ロールの権限見直してください。
Q, ターゲット先でも同じ(ソース元)バケット名を利用したいです。 A, 下記の手順を実行してください。
- ターゲット先にて β バケット名を作成後、レプリケーションを実施
- レプリケーション完了後にソース元アカウント 123456789012 の α バケットを削除
- 約1時間後にターゲット先アカウント 000000000000 で α バケット名を作成
- β バケットから α バケットに対してレプリケーションを実施
Q, ソース元でオブジェクトを消した場合は、どうなりますか? A, ターゲット先にレプリケート済みなのであれば、ターゲット先のオブジェクトは消えません。