はじめに
AWS S3にはクロスリージョンレプリケーション(以降はCRRと表記します。)という機能があります。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html
CRRでは要件を満たせない場合のS3データ同期方法として、
AWS CLIを用いてS3データを同期する方法となります。
要件・環境イメージ
・S3バケットとS3バケットをCRRを用いずに同期したい。
・同期元のデータが削除されている場合は同期先のデータを消す。
・AWS CLIを使用できるEC2は存在する。(aws-cli/2.9.19)
1. 同期コマンド
基本的な使い方としては以下のようになります。
aws s3 sync <同期元S3バケット> <同期先S3バケット>
上記のコマンドを実行することによりS3間でデータが同期されます。
2回目を実行した場合は差分のみ同期されます。
しかしこのコマンドのままでは同期元で削除されたファイルがある場合は同期先で削除されず残ってしまいます。
同期先にはあるが、同期元にはないファイルを削除したい場合は以下の[--delete]オプションを加えたコマンドを実行します。
aws s3 sync <同期元S3バケット> <同期先S3バケット> --delete
その他のオプションについては以下のURLを参考。
https://docs.aws.amazon.com/ja_jp/cli/latest/reference/s3/index.html
https://docs.aws.amazon.com/ja_jp/cli/latest/reference/s3/sync.html
2. S3データを同期するために必要な権限
S3を同期するのには以下の権限が必要となります。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": "s3://source-bucket"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": "s3://destination-bucket"
}
]
}
3. 動作確認
$ aws s3 sync s3://source-bucket s3://destination-bucket --delete
copy: s3://source-bucket/cp/01.txt to s3://destination-bucket/test/01.txt
copy: s3://source-bucket/cp/02.txt to s3://destination-bucket/test/02.txt
copy: s3://source-bucket/cp/03.txt to s3://destination-bucket/test/03.txt
delete: s3://destination-bucket/delete/delete.txt
参考