🗂

[備忘録]S3のレプリケーション設定する際のTips

2023/05/12に公開

前にも検証した事案のはずなのに、何も残していなくて、
もう1回調べる羽目になったので、今回は残そうかなと思いました。
なので、完全に備忘録です。
今更感半端ない、S3レプリケーション設定の話。

S3レプリケーションとは

S3バケットからS3バケットにオブジェクトをコピーする機能(超絶ざっくり)
クロスリージョン、クロスアカウントも可能。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html

基本的なルール

  • src(レプリケーション元)/dist(レプリケーションー先)ともに、バージョニングが有効になっている必要あり。
    • バージョニングが未設定のバケットで設定を行うとすると、エラーになってそもそも設定できない。
      • 設定ボタンがあるので、そのボタンをポチッとなで設定できます。
    • レプリケーション先も同様にバージョニング未設定だと、案内が出ます。そして、設定ボタンを同じように設定できる。
  • 対象バケットは、他のアカウントも指定できる。
  • レプリケーション可能な権限Roleとフィルタータイプを設定すれば、基本的にはOK。
    • Tagを使うことで、そのフィルターの中でもさらに対象オブジェクトを絞り込むことができる。
      • S3のオブジェクトにTag設定したことないな・・・(それ以外でもあまりTagを設定していないダメな人です)

プレフィックスについて

  • プレフィックスで指定したパス以下が対象になる。
  • 上記の場合、2023/05/bbb.txt はレプリケーション対象だが、 2023/04/aaa.txt はレプリケーション対象にはならない。
  • パスが複数に分かれる場合は、その分レプリケーション設定が必要(当たり前の話ですが)。

作成されるIAMロールのPolicy

レプリケーション設定時に、【新しいロールを作成】を選んだ場合、以下のようなPolicyが作成される。

{
    "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:::wada-replication-src-1",
                "arn:aws:s3:::wada-replication-src-1/*",
                "arn:aws:s3:::wada-replication-dist-1",
                "arn:aws:s3:::wada-replication-dist-1/*"
            ]
        },
        {
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags",
                "s3:ObjectOwnerOverrideToBucketOwner"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::wada-replication-src-1/*",
                "arn:aws:s3:::wada-replication-dist-1/*"
            ]
        }
    ]
}

コピー先のバケットを増やしたい場合は、Resource内に追加すれば良さそうですね。
※最小権限の原則だと、別々にした方がいい気がしますが、Role増えるのもねぇ・・・(おい)

レプリケーション実行!

  • レプリケーション対象のパス以下にファイルを配置すれば、レプリケーション開始。
    • 新規作成時、既存のオブジェクトのレプリケーションするか?っていうのが出てくる。
  • リアルタイムではないはずだけど、前より早くなっている感。
    • 時間は一応AWS次第なので、その点は注意
    • 「追加のレプリケーションオプション」 -> 「レプリケーション時間のコントロール(RTC)」で99.99%が15分以内にコピーできるようになるとのこと。
    • お金かかるので注意
  • プレフィックスは2023 とし、ファイルを以下のように配置した場合、


  • 2023 以下のパスのオブジェクトのみレプリケーション先にコピーされる。



終わり

  • 業務で使えるかなと思って、改めて調べました。
  • 前に調べた時は、クロスリージョンだったので、多少時間かかった感ありますが、同一リージョンだと結構すぐレプリケートされる。
  • コピーの際、パスを変えたいとかだと、AWS Lambdaでやるのは変わらなそう。
    • StepFunctionsだけでS3の操作ができるみたいなので、今度試してみようと思う。
      • 細かい操作となると、Lambdaで・・・という話にはなるみたいですが。

https://zenn.dev/pt_suzuki/articles/1413ff2c048968

参考

https://dev.classmethod.jp/articles/lim-s3-replication/

Discussion