S3レプリケーションでレプリケーション元のオブジェクトを削除した場合の挙動はどうなりますか?
困っていた内容
S3 バケットのレプリケーション設定を有効にしています。レプリケーション元のオブジェクトに削除マーカーを付与した場合、レプリケーション先のオブジェクトにも削除マーカーは付与されるかどうかが分かりません。
どう対応すればいいの?
レプリケーション元のオブジェクトに削除マーカーを付与した場合の挙動は、レプリケーション設定によって挙動が異なります。 レプリケーション設定は、最新バージョン、及び、V1 が存在します。
レプリケーション設定の見分け方
AWS CLI コマンドで以下のコマンドを実行します。
aws s3api get-bucket-replication --bucket <バケット名>
結果に Filter 要素、または、DeleteMarkerReplication 要素があれば、最新バージョンのレプリケーション設定です。
最新バージョンのレプリケーション設定の場合
{ "ReplicationConfiguration": { "Role": "arn:aws:iam::<アカウントID>:role/service-role/", "Rules": [ { "ID": "rule02", "Priority": 2, "Filter": { "Tag": { "Key": "<タグのキー>", "Value": "<タグの値>" } }, "Status": "Enabled", "Destination": { "Bucket": "<レプリケーション先バケット名>" }, "DeleteMarkerReplication": { "Status": "Disabled" } }, { "ID": "rule01", "Priority": 1, "Filter": { "Prefix": "<プレフィックス名>" }, "Status": "Enabled", "Destination": { "Bucket": "<レプリケーション先バケット名>" }, "DeleteMarkerReplication": { "Status": "Disabled" } } ] } }
V1 のレプリケーション設定の場合
{ "ReplicationConfiguration": { "Role": "arn:aws:iam::<アカウントID>:role/service-role/", "Rules": [ { "ID": "OTY0MGJhY2MtNGQyYy00MDkyLWI3OWUtZTE3YzI5YEXAMPLE", "Prefix": "<プレフィックス名>", "Status": "Enabled", "Destination": { "Bucket": "arn:aws:s3:::<レプリケーション先バケット名>" } } ] } }
最新バージョンのレプリケーション設定の場合
レプリケーション元のオブジェクトに削除マーカーを付与した場合、レプリケーション先のオブジェクトには削除マーカーをレプリケートしません。
V1 のレプリケーション設定を使用した場合
レプリケーション元のオブジェクトに削除マーカーを付与した場合、レプリケーション先のオブジェクトには削除マーカーをレプリケートします。
補足情報
現在では、マネジメントコンソールでレプリケーション設定を行った場合は、最新バージョンのレプリケーション設定が設定されます。
V1 のレプリケーション設定を行いたい場合は、AWS CLI コマンド put-bucket-replication
にて V1 のレプリケーション設定に沿った json ファイルを指定する必要があります。
実行例
実行コマンド
aws s3api put-bucket-replication \ --bucket <バケット名> \ --replication-configuration file://replication.json
replicaton.json ファイル
{ "Role": "arn:aws:iam::<アカウントID>:role/service-role/", "Rules": [ { "Status": "Enabled", "Prefix": "<プレフィックス名>", "Destination": { "Bucket": "arn:aws:s3:::<レプリケーション先バケット名>" } } ] }
参考情報
Amazon S3 は何をレプリケートしますか - Amazon Simple Storage Service