MAGAZINE
ルーターマガジン
AWS S3バケットのミラーリング:オブジェクトを別のバケットに自動バックアップする
![](https://rooter.jp/wp-content/uploads/2020/12/aws-s3-bucket-mirroring.jpg)
こんにちは。アルバイトのハオです。今回はAWS S3バケットのミラーリングについて紹介したいと思います。
ファイルがアップロード/変更されると、コピーが自動的に作成され、一方向に別の場所で保存する、という同期方法は「ミラーリング」といいます。今回はS3バケット間のミラーリング、いわばあるs3バケットにファイルをアップロードするとそのファイルのコピーが自動的に別のバケットに保存される仕組みを、Lambda関数で実現します。
今回執筆させていただいたこのブログは、主にこちらの内容を参考にやってきました。ただこの参考ブログは画像が古く、rootユーザではない場合についても触れていません。
1. lambda関数の中身を入手する
eleven41氏がGitHub上で公開されている、AWSバケットのミラーリング用のlambda関数aws-lambda-copy-s3-objectsのソース一式を取得します。こちらから最新バージョン(現在更新メンテナンスはされていないようです)の.zipファイルをダウンロードします。
![](https://rooter.jp/wp-content/uploads/2020/12/e446e3964ee2eff4ea1d935f0a91ff2b.jpg)
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": "*" } ] }ポリシー作成画面:
![](https://rooter.jp/wp-content/uploads/2020/12/c2d4876e13b2b2012d925dd0e80ebed1.jpg)
ユーザを選択:
![](https://rooter.jp/wp-content/uploads/2020/12/8adf9608598c8ef6f3ce7f739c2d20e5.jpg)
ポリシーをユーザに紐づける:
![](https://rooter.jp/wp-content/uploads/2020/12/372f45ef93e677999008010859f1cb82.jpg)
![](https://rooter.jp/wp-content/uploads/2020/12/3dd77e31405d68fd9d6476b43b00dfdf.jpg)
次に、Lambda関数を実行するIAMロールを作成し、同じポリシーを紐づけます。
ロール作成画面:![](https://rooter.jp/wp-content/uploads/2020/12/f631f5521af1818bc63039363b74ec9b-1.jpg)
![](https://rooter.jp/wp-content/uploads/2020/12/ef89ebd936343decb9e6c7ee4fbcd113.jpg)
ロール作成画面 ポリシーを紐づける:
![](https://rooter.jp/wp-content/uploads/2020/12/222e4033c65cf386b4f2c77dbd748e0e.jpg)
3. Lambda関数の作成
AWSコンソールでLambda関数作成の画面に入り、適当な名前を付けましょう。
![](https://rooter.jp/wp-content/uploads/2020/11/d6ba40a8cfe1151720d640d0bcd7c8df-1.jpg)
「デフォルトの実行ロールの変更」をクリックし、「既存のロールを使用する」を選択し、先ほど作成したIAMロールを選択します。
![](https://rooter.jp/wp-content/uploads/2020/11/07b5832407a1828dc45444da2ef86006.jpg)
他のフィールドをそのままにして「関数の作成」ボタンを押します。
作成が終わったら、その関数の詳細画面に遷移されると思います。「関数コード」のところに移動します。右上の「アクション」→「.zipファイルをアップロード」をクリックし、先ほどダウンロードした.zipファイルをアップロードします。すると画面真ん中のコードが変わると思います。これで関数の中身が設定完了です。
![](https://rooter.jp/wp-content/uploads/2020/12/ba87abf1b2f8efaf0e829ff326fa1a4f.jpg)
4. S3バケットの設定
ミラーリング先、ミラーリング元のバケットをまだ作成していないなら、作成してから進みましょう。
ミラーリング元のバケットの詳細画面に行き、「プロパティ」タブ→「タグ」→「編集する」ボタンへ移動します。
![](https://rooter.jp/wp-content/uploads/2020/11/bb426ef3ed82e220a217a630f64048f7.jpg)
キーを「TargetBucket」、値をミラーリング先のバケット名で、タグを追加します。
![](https://rooter.jp/wp-content/uploads/2020/11/b77dee29ae65b2ee9a05f94150f8d4be.jpg)
「プロパティ」に戻り、「イベント通知」まで下にスクロールし、「イベント通知を作成」ボタンをクリックします。
![](https://rooter.jp/wp-content/uploads/2021/08/7ba9f2402954d87b15bf5e29510cf927.jpg)
イベント名は適当、プレフィックスもサフィックスも入れなくても良いです。
「イベントタイプ」のところで「すべてのオブジェクト作成イベント」をチェックします。
![](https://rooter.jp/wp-content/uploads/2020/11/473f55a5c1b660d3a32a0202e52bd476.jpg)
「送信先」のところで、「Lambda関数」にし、先ほど作成したミラーリング用のLambda関数を選択します。
![](https://rooter.jp/wp-content/uploads/2020/11/05929eb56e04e7141c23cd2d717929c0.jpg)
これでミラーリングの設定が全部完了です!
ミラーリング元のバケットに画像一枚をアップロードしてから、ミラーリング先のバケットに移動し、画像がミラーリングされたのを確認しましょう!
CONTACT
お問い合わせ・ご依頼はこちらから