1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3バケットクロスリージョンレプリケーションと既存オブジェクトの同期を試してみた

Last updated at Posted at 2025-07-09

S3バケットレプリケーションを使用する機会があったのでまとめます。
また、既存オブジェクトがあるS3バケットを別の新規S3バケットと同期をする方法についてもまとめます。

S3バケットレプリケーションとは

簡単にいうと、異なるS3バケット間でオブジェクトを自動でコピー(レプリケート)できる機能。
同じリージョン間やAWSアカウント内の別リージョン間はもちろん、別のAWSアカウントとレプリケートすることもできます。

レプリケーションを使用すると、Amazon S3 バケット間でオブジェクトを自動で非同期的にコピーできます。オブジェクトのレプリケーション用に設定されたバケットは、同じ AWS アカウント が所有することも、異なるアカウントが所有することもできます。オブジェクトは、単一または複数の送信先バケットにレプリケートできます。送信先バケットは、異なる AWS リージョン でも、ソースバケットと同じリージョン内でも配置することができます。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html

レプリケーションは2種類ある

ライブレプリケーション

新規で作成されたオブジェクトや更新されたオブジェクトを自動でレプリケートする機能です。

  • レプリケーション設定前にバケットにあったオブジェクトはレプリケートされないのが注意点
  • レプリケーション設定前の既存オブジェクトをレプリケートするには後述する「オンデマンドレプリケーション」の設定が必要

レプリケート元のバケットに書き込まれる際に、新しく作成されたオブジェクトまたは更新されたオブジェクトを自動的にレプリケートするには、ライブレプリケーションを使用します。ライブレプリケーションでは、レプリケーションを設定する前にバケットに存在していたオブジェクトはレプリケートされません。レプリケーションを設定する前に存在していたオブジェクトをレプリケートするには、オンデマンドレプリケーションを使用します。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html

また、ライブレプリケーションには次の2つがある。名前のとおりレプリケーションするバケットが別リージョンか同じリージョンかの違いだからイメージしやすいはず。

  1. クロスリージョンレプリケーション (CRR)
  2. 同一リージョンレプリケーション (SRR)

オンデマンドレプリケーション(S3 バッチレプリケーション)

前述のとおりでレプリケーション設定前の既存オブジェクトをレプリケートする際に使用する。
S3 バッチレプリケーションを使用するとのこと。
(今回はこのオンデマンドレプリケーションをちゃんと使ってみたい)

レプリケート元のバケットから 1 つ以上のレプリケート先バケットにオンデマンドで既存のオブジェクトをレプリケートするには、S3 バッチレプリケーションを使用します。既存のオブジェクトのレプリケーションの詳細については、「S3 バッチレプリケーションを使用する状況」を参照してください。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html

ライブレプリケーションを試す

これは過去に設定したことがありますが、一応記録として残します。
今回は同一アカウント内でクロスリージョンレプリケーションを実施します。

リソース作成・設定

次のリソースを作成します。詳細設定は後述します。

  • S3バケット(プライマリ(東京リージョン))
  • S3バケット(レプリケーション先(大阪リージョン))
  • IAMロール

S3バケット(共通設定)

レプリケーション元(プライマリ)、レプリケーション先どちらのS3バケットにも バージョニング設定 が必要なので設定します。

バージョニング設定

  1. 対象のS3バケットのプロパティタブからバケットのバージョニングを編集
    Pasted image 20250710010235.png

  2. 有効化して保存
    Pasted image 20250710010247.png

プライマリのS3バケットでレプリケーションルール作成

プライマリ(レプリケーション元)のS3バケットでレプリケーションルールを作成します。

  1. 管理タブからレプリケーションルールを作成
    Pasted image 20250710010739.png

  2. 次のとおり設定します。(一応スクショはります)

項目 内容
レプリケーションルール名 適当
ステータス 有効
ルールスコープ バケット内のすべてのオブジェクトに適用
送信先 このアカウントのバケットを選択する
バケット名 レプリケーション先S3バケット
IAMロール 新しいロールの作成
送信先ストレージクラス レプリケートされたオブジェクト用のストレージクラスを変更
ストレージクラス Intelligent-Tiering
(Glacier Deep Archiveとか色々選択できる)
削除マーカーのレプリケーション チェック
(レプリケーション元で削除されたものをレプリケーション先でも削除するようになる)

Pasted image 20250710010902.png
Pasted image 20250710011057.png
Pasted image 20250710011110.png
Pasted image 20250710011132.png

3 . 既存のオブジェクトをレプリケートしますか?」と聞かれますが一旦「いいえ」としておきます
Pasted image 20250710011629.png

IAMロール

自動作成されたIAMロールを記載しておく
S3バケット名は適宜変更をお願いします

IAMポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetReplicationConfiguration",
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging",
                "s3:GetObjectRetention",
                "s3:GetObjectLegalHold"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::s3-replication-test-primary-d05def17",
                "arn:aws:s3:::s3-replication-test-primary-d05def17/*",
                "arn:aws:s3:::s3-replication-test-replica-d05def17",
                "arn:aws:s3:::s3-replication-test-replica-d05def17/*"
            ]
        },
        {
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags",
                "s3:ObjectOwnerOverrideToBucketOwner"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::s3-replication-test-primary-d05def17/*",
                "arn:aws:s3:::s3-replication-test-replica-d05def17/*"
            ]
        }
    ]
}

信頼ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

動作確認のためにテストファイルをアップロード・削除

適当にローカルでファイルを作成しアップロードする。

アップロード

アップロード直後はレプリケーション先S3バケットには何も存在しない。
Pasted image 20250710012149.png

少し(数秒?)待って更新してみると、レプリケーション先S3バケットにプライマリのS3バケットのファイルと同じものが存在していた。
ストレージクラスもレプリケーション先で変わっているので想定どおりの挙動。
Pasted image 20250710012252.png

削除

ファイル削除してみた。
Pasted image 20250710012426.png

更新すると削除されていること確認できた。
Pasted image 20250710012445.png

ライブレプリケーションはOK。

オンデマンドレプリケーション(S3 バッチレプリケーション)

次に既存オブジェクトをレプリケートする方法を試す。
※先ほどプライマリS3バケットで設定したレプリケーション設定は一旦削除しておいた。

リソース作成・設定

S3ファイル準備

プライマリS3バケットには3つのファイルを配置しておく
Pasted image 20250710013942.png

プライマリのS3バケットでレプリケーションルール作成

先ほどと同様、プライマリ(レプリケーション元)S3バケットにてレプリケーション設定を実施
設定内容は先ほどと同様のため詳細省略(設定した項目表のみ記載しておきます)

項目 内容
レプリケーションルール名 適当
ステータス 有効
ルールスコープ バケット内のすべてのオブジェクトに適用
送信先 このアカウントのバケットを選択する
バケット名 レプリケーション先S3バケット
IAMロール 新しいロールの作成
送信先ストレージクラス レプリケートされたオブジェクト用のストレージクラスを変更
ストレージクラス Intelligent-Tiering
(Glacier Deep Archiveとか色々選択できる)
削除マーカーのレプリケーション チェック
(レプリケーション元で削除されたものをレプリケーション先でも削除するようになる)

既存のオブジェクトをレプリケートする

先ほどは「いいえ」とした設定。
既存のオブジェクトをレプリケートしたいため「はい、既存のオブジェクトをレプリケートします。」を選択。
Pasted image 20250710014129.png

上記で「送信」をクリックすると次の画面が表示される。
各項目設定し保存することで、既存オブジェクトをレプリケートするバッチジョブが始まる。

項目 内容
ジョブ実行オプション 準備ができたらジョブを自動的に実行します
完了レポートの生成 チェック
完了レポートの範囲 すべてのタスク
完了レポートの送信先 レポート用のS3バケット
アクセス許可 新しいロールの作成

Pasted image 20250710014355.png

IAMロール

バッチオペレーションジョブにおいて自動作成されたIAMロールを記載しておく
S3バケット名は適宜変更をお願いします

IAMポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:InitiateReplication",
                "s3:GetReplicationConfiguration",
                "s3:PutInventoryConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::s3-replication-test-primary-d05def17",
                "arn:aws:s3:::s3-replication-test-primary-d05def17/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::test-report-20250710/*"
        }
    ]
}

信頼ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "batchoperations.s3.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

オンデマンドレプリケーション(S3 バッチレプリケーション)開始・完了確認

開始を確認

ジョブ実行オプションで「準備ができたらジョブを自動的に実行します」と選択したためすぐにバッチオペレーションが開始された。

Pasted image 20250710014835.png

完了

ステータスが完了済みとなっておりバッチオペレーションが完了したことがわかる。
Pasted image 20250710015235.png

詳細を見ると完了レポートが別のS3バケットに作成されていることも確認できる
Pasted image 20250710015452.png
Pasted image 20250710015504.png

完了レポートを見てみる

どんなのかイメージもつかないがどのような内容なのか確認してみる。

いくつかファイルが生成されている。
Pasted image 20250710015632.png

manifest.json

{
  "Format": "Report_CSV_20180820",
  "ReportCreationDate": "2025-07-09T16:50:10.039908116Z",
  "Results": [{
    "TaskExecutionStatus": "succeeded",
    "Bucket": "test-report-20250710",
    "MD5Checksum": "5bf051e8bb81db10e77dfd96c3b010a2",
    "Key": "job-bf0a959f-6da0-4c0d-864d-33928408aa59/results/0d7de2b917f2540f3849319264b23cde99923ce4.csv"
  }],
  "ReportSchema": "Bucket, Key, VersionId, TaskStatus, ErrorCode, HTTPStatusCode, ResultMessage"
}

csvファイル

どのオブジェクトがどんな結果だったのか確認できる状態になっていた。

s3-replication-test-primary-d05def17 test1.txt F8s0rBWlbmr4LsA2pXds5SLnGTCzOlKq succeeded 200 success
s3-replication-test-primary-d05def17 test.txt 8.rJG2QWcD0gmVdLZR3GWgd1dA9AnJV5 succeeded 200 success
s3-replication-test-primary-d05def17 test2.txt zuyPrpsBxvXqyn6xTDhcQvlGtEHT3sSM succeeded 200 success
s3-replication-test-primary-d05def17 test3.txt p2pglmqtiyTmYuQO.8f_I5bS7zotQMUo succeeded 200 success
s3-replication-test-primary-d05def17 test.txt s35owxbIpqovrd_nrpZ78LFqfGSgYYPc succeeded 200 success
s3-replication-test-primary-d05def17,test1.txt,F8s0rBWlbmr4LsA2pXds5SLnGTCzOlKq,succeeded,200,,success
s3-replication-test-primary-d05def17,test.txt,8.rJG2QWcD0gmVdLZR3GWgd1dA9AnJV5,succeeded,200,,success
s3-replication-test-primary-d05def17,test2.txt,zuyPrpsBxvXqyn6xTDhcQvlGtEHT3sSM,succeeded,200,,success
s3-replication-test-primary-d05def17,test3.txt,p2pglmqtiyTmYuQO.8f_I5bS7zotQMUo,succeeded,200,,success
s3-replication-test-primary-d05def17,test.txt,s35owxbIpqovrd_nrpZ78LFqfGSgYYPc,succeeded,200,,success

ファイルがレプリケートされたか確認

他のファイルなどの確認をしていて肝心なことを忘れていた。バッチオペレーションによってレプリケートされたかを確認する。

ちゃんとレプリケートされてた

バッチオペレーションで成功となっていたとおり全ての既存ファイルがレプリケーション先のS3バケットへレプリケートされていた。AWS優秀!
Pasted image 20250710020219.png

感想

あんま感想ないけどこんな簡単にレプリケーションできるんやって思いました。

参考URL

ライブレプリケーション

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html
https://dev.classmethod.jp/articles/lim-s3-replication/

オンデマンドレプリケーション(S3 バッチレプリケーション)

https://aws.amazon.com/jp/getting-started/hands-on/replicate-existing-objects-with-amazon-s3-batch-replication/ (これ公式やし画像つきやしわかりやすい)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-batch-replication-batch.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?