LoginSignup
2
2

More than 1 year has passed since last update.

【AWS】S3のPUTイベントをトリガーにLambda(Node.js 14.x)を起動する

Posted at

きっかけ

案件でS3ファイルのPUTをトリガーにLambdaを動かして、PUTされたファイルを加工するような処理が必要なため、仕組みの具体的な設定内容の確認をしたかったため。

やりたいこと概要

S3_copied.png

前提

  • AWS: 社用アカウント利用

構築Step

  1. S3バケット作成
  2. Lambdaの構築、ソース修正
  3. Lambdaに紐づくIAMロール修正
  4. Originバケット PUTトリガー設定
  5. 動作確認

1. S3バケット作成

  • デフォルト設定のまま、Origin、Copiedバケットを作成 screencapture-s3-console-aws-amazon-s3-bucket-create-2021-07-31-00_17_50.png screencapture-s3-console-aws-amazon-s3-bucket-create-2021-07-31-00_28_49.png

2. Lambdaの構築、ソース修正

  • デフォルト設定(ランタイム:Node.js 14.x)でLambdaを構築 screencapture-ap-northeast-1-console-aws-amazon-lambda-home-2021-07-31-00_33_12.png

Lambdaのソースコードを以下の内容に修正、デプロイを実施

index.js
'use strict';

const aws = require('aws-sdk');
const s3 = new aws.S3();

exports.handler = async (event) => {
    //S3から送られたトリガー内容を確認
    console.log(event);

    const bucket = event['Records'][0]['s3']['bucket']['name'];
    const key = event['Records'][0]['s3']['object']['key'];
    console.log(bucket);
    console.log(key);

    //S3.copyObjectを実施(params内Bucket,CopySource, Keyは必須) 
    const params = {
        Bucket: "copied-bucket-210731/210731", 
        CopySource: bucket+'/'+key, 
        Key: key
    };
    const result = await s3.copyObject(params).promise();

    console.log(result)
};

3. Lambdaに紐づくIAMロール修正

  • Lambdaに紐づいているLambda実行ロールにAmazonS3FullAccessをアタッチ (ベストプラクティスでは最小権限原則ですが今回は割愛) screencapture-console-aws-amazon-iam-home-2021-07-31-01_10_27.png

4. Originバケット PUTトリガー設定

  • S3のOriginバケットでプロパティ>イベント通知からイベント通知を作成
    スクリーンショット 2021-07-31 004222.png

  • 任意のイベント名を設定、イベントタイプを"PUT"に設定、送信先を今回作成したLambda関数を指定してトリガーを設定
    screencapture-s3-console-aws-amazon-s3-bucket-origin-bucket-210731-property-notification-create-2021-07-31-00_43_10.png

5. 動作確認

  • OriginバケットにAWS CLIでファイルをアップロードする
  • AWS CloudShellを起動、適当なテキストファイルを作成、CLIコマンドによりS3のOriginバケットへファイルをアップロードする
    スクリーンショット 2021-07-31 015328.png

  • Originバケットにファイルがアップロードされていることの確認
    スクリーンショット 2021-07-31 015346.png

  • Copiedバケットにファイルがコピーされていることの確認
    スクリーンショット 2021-07-31 015412.png

  • Lambdaの実行ログの確認
    スクリーンショット 2021-07-31 015515.png

参考サイト

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2