🗂
[備忘録]S3のレプリケーション設定する際のTips
前にも検証した事案のはずなのに、何も残していなくて、
もう1回調べる羽目になったので、今回は残そうかなと思いました。
なので、完全に備忘録です。
今更感半端ない、S3レプリケーション設定の話。
S3レプリケーションとは
S3バケットからS3バケットにオブジェクトをコピーする機能(超絶ざっくり)
クロスリージョン、クロスアカウントも可能。
基本的なルール
- src(レプリケーション元)/dist(レプリケーションー先)ともに、バージョニングが有効になっている必要あり。
- バージョニングが未設定のバケットで設定を行うとすると、エラーになってそもそも設定できない。
- 設定ボタンがあるので、そのボタンをポチッとなで設定できます。
- 設定ボタンがあるので、そのボタンをポチッとなで設定できます。
- レプリケーション先も同様にバージョニング未設定だと、案内が出ます。そして、設定ボタンを同じように設定できる。
- バージョニングが未設定のバケットで設定を行うとすると、エラーになってそもそも設定できない。
- 対象バケットは、他のアカウントも指定できる。
- レプリケーション可能な権限Roleとフィルタータイプを設定すれば、基本的にはOK。
- Tagを使うことで、そのフィルターの中でもさらに対象オブジェクトを絞り込むことができる。
- S3のオブジェクトにTag設定したことないな・・・(それ以外でもあまり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で・・・という話にはなるみたいですが。
- StepFunctionsだけでS3の操作ができるみたいなので、今度試してみようと思う。
参考
Discussion