S3レプリケーションでレプリケーション元のオブジェクトを削除した場合の挙動はどうなりますか?

S3レプリケーションを有効にしている場合、レプリケーション元のオブジェクトを削除した際に、レプリケーション設定によって異なる挙動をします。レプリケーション設定を見分ける方法と、レプリケーション設定の方法をご案内いたします。
2020.05.08

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

困っていた内容

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

get-bucket-replication — AWS CLI 1.18.53 Command Reference

put-bucket-replication — AWS CLI 1.18.53 Command Reference