CloudFormationで新規S3バケットにLambdaトリガーを設定する方法
前提
| 項目 | 内容 | 補足 |
|---|---|---|
| Lambda | index.zip | zip圧縮済 |
| デプロイ用バケット名 | hogehoge | |
| バケット名 | deploy-bucket | 新規作成バケット |
| prefix | images/ | |
| イベントタイプ | PUT |
LambdaとS3バケット(新規)をデプロイする際にS3 Triggerの設定をします。
in.yml
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: create Lambda function
Resources:
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: 'mylambda'
CodeUri: ./index.zip
Handler: index.handler
Runtime: nodejs16.x
MemorySize: 128
Timeout: 15
TriggerLambdaPermission:
Type: "AWS::Lambda::Permission"
Properties:
Action: "lambda:InvokeFunction"
FunctionName: !GetAtt
- MyLambdaFunction
- Arn
Principal: "s3.amazonaws.com"
SourceArn: !Join
- ""
- - "arn:aws:s3:::"
- "deploy-bucket"
S3Bucket:
Type: "AWS::S3::Bucket"
DependsOn: "TriggerLambdaPermission"
Properties:
BucketName: "deploy-bucket"
NotificationConfiguration:
LambdaConfigurations:
- Event: "s3:ObjectCreated:Put"
Filter:
S3Key:
Rules:
- Name: prefix
Value: images/
Function: !GetAtt
- MyLambdaFunction
- Arn
aws cloudformation packageコマンドを実行します。
aws cloudformation package --template-file in.yml --s3-bucket hogehoge --output-template-file out.yml
out.ymlファイルが作成されるので、aws cloudformation deployコマンドを実行します。
スタック名はhogeとしています。
aws cloudformation deploy --template-file out.yml --stack-name hoge --capabilities CAPABILITY_NAMED_IAM
LambdaとS3バケットが新規作成され、S3 Triggerが設定されます。
既存S3バケットに対してS3 Triggerを設定するのは少し厄介そうです。
「S3バケットにイベント通知を設定する – AWS SDK for JavaScript v3」
Lambdaが実行されないケース
「s3:ObjectCreated:Put」だけだとLambdaが実行されないケースがあります。
大きいサイズのファイルがPUTされた場合は、「s3:ObjectCreated:CompleteMultipartUpload」となるようです。
https://tech.trustbank.co.jp/entry/2022/04/05/160000
イベント通知のタイプおよび送信先 - Amazon Simple Storage Service
Amazon S3 では、通知を発行できるいくつかのイベント通知のタイプと送信先がサポートされています。イベント通知を設定するときに、イベントタイプと送信先を指定できます。各イベント通知に指定できる送信先は 1 つだけです。Amazon S...
参考サイト

S3 バケットで Lambda 用の Amazon S3 通知設定を作成する
既存の Amazon Simple Storage Service (Amazon S3) バケットを使用して AWS Lambda 関数の Amazon S3 通知設定を作成したいと考えています。

CloudFormation 一撃で既存のS3バケットでAWS LambdaのS3のオブジェクト作成通知を追加作成してみた | DevelopersIO
ERROR: The request could not be satisfied

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^



コメント