概要
S3に何かしらのオブジェクトを配置したことをトリガーにLambdaを動かす設定について紹介します。 runtimeはnode.jsです。
lambdaの処理を書く
lambdaにはトリガーが正常に動いていることだけを確認すれば良いので、
console.log("hello")
とだけ書いておきます。
ファイル名はhandler.js
にしておきます。
'use strict'; module.exports.hello = (event, context, callback) => { console.log(JSON.stringify(event, undefined, 1)); console.log("hello"); const response = { statusCode: 200, body: "{\"msg\": \"success\"}" }; callback(null, response); };
serverless.ymlの設定
functions: hello: handler: handler.hello events: - s3: bucket: "uploads" event: s3:ObjectCreated:* rules: - prefix: original-files/ memorySize: 128 #resources: # もしリサイズ処理をするなら、リサイズ後のデータを格納するバケットが必要 # Resources: # UploadBucket: # Type: AWS::S3::Bucket # Properties: # BucketName: "lambda-result"
functions.hello.events.s3
ブロックは、トリガーを検知するS3バケットの設定 & 生成時に実行されます。
そのため、serverlessを使用しないでAWSマネジメントコンソールから手動で作ったバケットを後からserverlessで操作しようとすると、下記のエラーに見舞われます。
Serverless Error --------------------------------------- An error occurred while provisioning your stack: S3BucketBucketName - bucket-name already exists.
LambdaのTriggerだけを後から追加はできない(というか、しにくいというか、避けたい)ってことですね。