きっかけ
案件でS3ファイルのPUTをトリガーにLambdaを動かして、PUTされたファイルを加工するような処理が必要なため、仕組みの具体的な設定内容の確認をしたかったため。
やりたいこと概要
前提
AWS: 社用アカウント利用
構築Step
S3バケット作成
Lambdaの構築、ソース修正
Lambdaに紐づくIAMロール修正
Originバケット PUTトリガー設定
動作確認
1. S3バケット作成
デフォルト設定のまま、Origin、Copiedバケットを作成
2. Lambdaの構築、ソース修正
デフォルト設定(ランタイム:Node.js 14.x)でLambdaを構築
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をアタッチ
(ベストプラクティスでは最小権限原則ですが今回は割愛)
4. Originバケット PUTトリガー設定
S3のOriginバケットでプロパティ>イベント通知からイベント通知を作成
任意のイベント名を設定、イベントタイプを"PUT"に設定、送信先を今回作成したLambda関数を指定してトリガーを設定
5. 動作確認
OriginバケットにAWS CLIでファイルをアップロードする
AWS CloudShellを起動、適当なテキストファイルを作成、CLIコマンドによりS3のOriginバケットへファイルをアップロードする
Originバケットにファイルがアップロードされていることの確認
Copiedバケットにファイルがコピーされていることの確認
Lambdaの実行ログの確認
参考サイト
↧