MAGAZINE

ルーターマガジン

AWS

AWS S3バケットのミラーリング:オブジェクトを別のバケットに自動バックアップする

2021.08.18
Pocket

こんにちは。アルバイトのハオです。今回は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関数を選択します。

これでミラーリングの設定が全部完了です!

ミラーリング元のバケットに画像一枚をアップロードしてから、ミラーリング先のバケットに移動し、画像がミラーリングされたのを確認しましょう!

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから