S3のクロスリージョンレプリケーションで削除マーカーがレプリケーションされるか確認

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

##参考
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/crr-what-is-isnot-replicated.html

##目的
S3のクロスリージョンレプリケーションで削除マーカーがレプリケーションされるか確認する

##手順
転送元のS3バケットと転送先のS3バケットを作成する(それぞれリージョンは別にする)
転送元のバージョンは必須ではないが今回は有効にする
転送先のバージョニングは必須
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/fd6d6b9f-788e-3d7d-2851-cfee183cb7b8.png)

転送元のS3バケットでクロスリージョンレプリケーションの設定を行う
管理からレプリケーションをクリックして、ルールの追加をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/90a936c7-e2f4-df5d-ecce-6abdcec22a1f.png)

すべてのオブジェクトを転送するかプレフィクスかタグでレプリケーションするオブジェクトを指定する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/08cab4f5-79c7-e26a-5f42-b2ec35ff5ff6.png)

送信先のS3バケットを指定する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/de9d29cf-e717-e075-3784-4e3ca50aae06.png)


送信元のS3が送信先のS3に書き込みできるようにIAMロールを付与する。AWSサービスにIAMロールを付与するため、サービスロールと呼ばれる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/4721302b-3379-d1d8-dd9f-36645bc7523b.png)

作成したIAMロールを書くにするとS3が信頼関係にある
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/2e347e2a-6b9f-49fc-ca7c-099cc7034f1f.png)

```json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<送信元バケット名>",
                "arn:aws:s3:::<送信元バケット名>/*"
            ]
        },
        {
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags",
                "s3:GetObjectVersionTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::<送信先バケット名>/*"
        }
    ]
}
```

ここまでで準備完了

###レプリケーション実施
転送元のS3バケットにファイルをアップロードする
※レプリケーション設定前にUploadしたオブジェクトはレプリケートされない

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/28b7c5b4-b00c-ddf7-e459-b0c7c91b6b59.png)

転送先のバケットにオブジェクトがレプリケーションされていることを確認する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/9abd6c25-f24a-908a-4609-a343c1925f8d.png)

転送元のS3バケットでオブジェクトを削除する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/82f7ee80-94c6-3a14-98c9-9ba4627f050c.png)

削除マーカーが付与される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/df6b85a7-48ec-e007-3f40-88ae279fe6a7.png)

転送先のs3バケットを確認すると削除マーカーはレプリケーションされない
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/17e2267b-2a66-f836-883f-fa7e9bc0b671.png)

2018/11/16時点だと日本語マニュアルに以下の記述があり挙動とことなるが、

>
削除オペレーションとクロスリージョンレプリケーション
レプリケート元バケットからオブジェクトを削除した場合、クロスリージョンレプリケーションの動作は次のようになります。
DELETE リクエストでオブジェクトバージョン ID が指定されていない場合、Amazon S3 は削除マーカーを追加し、クロスリージョンレプリケーションはそれをレプリケート先バケットにレプリケートします。 バージョニングと削除マーカーの詳細については、「バージョニングの使用」を参照してください。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/crr-what-is-isnot-replicated.html

英語版の方が記載内容が新しくなっており、転送設定のバージョンが新しい場合は、削除マーカーがレプリケーションされない仕様となっている。

>
How Delete Operations Affect CRR
If you delete an object from the source bucket, the following occurs:
If you make a DELETE request without specifying an object version ID, Amazon S3 adds a delete marker. Amazon S3 deals with the delete marker as follows:
If using latest version of the replication configuration, that is you specify the Filter element in a replication configuration rule, Amazon S3 does not replicate the delete marker.
If don't specify the Filter element, Amazon S3 assumes replication configuration is a prior version V1. In the earlier version, Amazon S3 handled replication of delete markers differently. For more information, see Backward Compatibility .