MAGAZINE
ルーターマガジン
AWS S3バケットのミラーリング:オブジェクトを別のバケットに自動バックアップする
こんにちは。アルバイトのハオです。今回はAWS S3バケットのミラーリングについて紹介したいと思います。
ファイルがアップロード/変更されると、コピーが自動的に作成され、一方向に別の場所で保存する、という同期方法は「ミラーリング」といいます。今回はS3バケット間のミラーリング、いわばあるs3バケットにファイルをアップロードするとそのファイルのコピーが自動的に別のバケットに保存される仕組みを、Lambda関数で実現します。
今回執筆させていただいたこのブログは、主にこちらの内容を参考にやってきました。ただこの参考ブログは画像が古く、rootユーザではない場合についても触れていません。
1. lambda関数の中身を入手する
eleven41氏がGitHub上で公開されている、AWSバケットのミラーリング用のlambda関数aws-lambda-copy-s3-objectsのソース一式を取得します。こちらから最新バージョン(現在更新メンテナンスはされていないようです)の.zipファイルをダウンロードします。
2. IAMの設定
AWSコンソールにログインし、IAM権限の設定を行います。
まずIAMポリシーを作成します。以下の設定でポリシーを作成し、自分の使っているユーザーと紐づけます。
ポリシー:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetBucketTagging",
"s3:PutBucketTagging",
"s3:ListBucket",
"s3:GetBucketNotification"
],
"Resource": [
"arn:aws:s3:::bucket-mirroring-test/*",
"arn:aws:s3:::bucket-mirroring-test-dest/*",
"arn:aws:s3:::bucket-mirroring-test",
"arn:aws:s3:::bucket-mirroring-test-dest"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"iam:PassRole",
"s3:ListAllMyBuckets",
"cloudwatch:*",
"logs:*",
"lambda:*",
"iam:ListRoles"
],
"Resource": "*"
}
]
}
ポリシー作成画面:
ユーザを選択:
ポリシーをユーザに紐づける:
次に、Lambda関数を実行するIAMロールを作成し、同じポリシーを紐づけます。
ロール作成画面:
ロール作成画面 ポリシーを紐づける:
3. Lambda関数の作成
AWSコンソールでLambda関数作成の画面に入り、適当な名前を付けましょう。
「デフォルトの実行ロールの変更」をクリックし、「既存のロールを使用する」を選択し、先ほど作成したIAMロールを選択します。
他のフィールドをそのままにして「関数の作成」ボタンを押します。
作成が終わったら、その関数の詳細画面に遷移されると思います。「関数コード」のところに移動します。右上の「アクション」→「.zipファイルをアップロード」をクリックし、先ほどダウンロードした.zipファイルをアップロードします。すると画面真ん中のコードが変わると思います。これで関数の中身が設定完了です。
4. S3バケットの設定
ミラーリング先、ミラーリング元のバケットをまだ作成していないなら、作成してから進みましょう。
ミラーリング元のバケットの詳細画面に行き、「プロパティ」タブ→「タグ」→「編集する」ボタンへ移動します。
キーを「TargetBucket」、値をミラーリング先のバケット名で、タグを追加します。
「プロパティ」に戻り、「イベント通知」まで下にスクロールし、「イベント通知を作成」ボタンをクリックします。
イベント名は適当、プレフィックスもサフィックスも入れなくても良いです。
「イベントタイプ」のところで「すべてのオブジェクト作成イベント」をチェックします。
「送信先」のところで、「Lambda関数」にし、先ほど作成したミラーリング用のLambda関数を選択します。
これでミラーリングの設定が全部完了です!
ミラーリング元のバケットに画像一枚をアップロードしてから、ミラーリング先のバケットに移動し、画像がミラーリングされたのを確認しましょう!
CONTACT
お問い合わせ・ご依頼はこちらから