AWS S3 Batch Replicationを使用して既存のオブジェクトを別アカウントのバケットにレプリケートしてみた!

2022.02.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

テクニカルサポートチームの丸屋 正志(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 (ソース元)
    • バージョニング有効済み
    • AWS アカウント ID : 123456789012
    • 事前にファイルを複数アップロード済み(下記画像を参照) Image from Gyazo

やってみた

必ず開発環境でお試しいただいてから、その後に検証環境でもお試しいただき、最後に本番環境での実施をしてください。

ターゲット先での作業

レプリケーション設定をするために、ターゲット側の【管理】->【アクション】->【レプリケートされたオブジェクトの受信】をクリックします。 Image from Gyazo

ソースバケットアカウント設定

  • 『ソースバケットアカウント ID』 : [ソース先の AWS アカウント ID を入力] (例 : 123456789012)
  • 『ポリシーの生成』 : 選択

Image from Gyazo

ポリシー

  • 『▼バケットポリシーの表示』 : 【選択
  • 『オブジェクト所有者を送信先バケット所有者に変更するアクセス許可を含める』 : 【チェック
    • 所有者の変更をしない場合は、チェックを外す
  • 『設定の適用』 : 【選択

Image from Gyazo


ソース元での作業

レプリケーション設定をするために、ソース側の【管理】->【レプリケーションルールの作成】をクリックします。

Image from Gyazo

レプリケーションルールの設定

  • 『レプリケーションルール名』 : [任意の名前] (例 : Replication-Batch-TEST)
  • 『ステータス』 : 【有効】(デフォルト)

Image from Gyazo

ソースバケット

  • 『ルールスコープの選択』 : 【バケット内のすべてのオブジェクトに適用

Image from Gyazo

送信先

  • 『送信先』 : 【別のアカウントのバケットを指定する
  • 『アカウント ID』 : [ターゲット先の AWS アカウント ID を入力] (例 : 000000000000)
  • 『バケット名』 : [ターゲット先の S3 バケット名] (例 : cm-target-replication00)

Image from Gyazo

IAM ロール

  • 『既存の IAM ロールから選択』 : デフォルト
  • 『IAM ロール』 : 【新しいロールの作成】(プルダウンメニューから選択)

Image from Gyazo

暗号化・送信先ストレージ・追加のレプリケーションオプション

上記については、ご利用の環境に合わせて変更し【保存】をクリックします。

Image from Gyazo

既存のオブジェクトをレプリケートしますか?

  • 『はい、既存のオブジェクトをレプリケートします。』 : 【選択

Image from Gyazo


バッチオペレーションジョブを作成します

cm-source-replication (ソース元) で作業を実施します。

ジョブ設定

  • 『ジョブ実行オプション』 : 【準備ができたらジョブを自動的に実行します】(デフォルト)

Image from Gyazo

完了レポート

  • 『完了レポート』 : 不要な場合はチェックを外す

Image from Gyazo

アクセス許可

  • 『既存の IAM ロールから選択』 : デフォルト
  • 『IAM ロール』 : 【新しいロールの作成】(プルダウンメニューから選択)

Image from Gyazo


ジョブの実行

ジョブが正常に作成され、実行している状態となります。

Image from Gyazo

しばらく待つと、『完了済み』と表示されます。

Image from Gyazo


レプリケーションされたか確認

ターゲット先の S3 バケットでレプリケーションされているかを確認すると、オブジェクトが存在している事を確認することが出来ます。

Image from Gyazo

FAQ

Q, ターゲット先のS3バケットでオブジェクトが表示されません。
A, 以下 2 点をご確認ください。

  • ソース元のジョブは成功かつ、失敗した合計(率)は 0% でしょうか?
  • ターゲット先にてバケット内でのスーパーリロード( F5 更新など)を実行しても表示されないでしょうか?

Q, IAMロールが上手く作成出来ません。
A, 作業している IAM ユーザー/ロールの権限見直してください。


Q, ターゲット先でも同じ(ソース元)バケット名を利用したいです。
A, 下記の手順を実行してください。

  1. ターゲット先にて β バケット名を作成後、レプリケーションを実施
  2. レプリケーション完了後にソース元アカウント 123456789012 の α バケットを削除
  3. 約1時間後にターゲット先アカウント 000000000000 で α バケット名を作成
  4. β バケットから α バケットに対してレプリケーションを実施

Q, ソース元でオブジェクトを消した場合は、どうなりますか?
A, ターゲット先にレプリケート済みなのであれば、ターゲット先のオブジェクトは消えません。