AWS SAM CloudFormationで新規S3バケットにLambdaトリガーを設定する方法

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が設定されます。

CloudFormationで新規S3バケットにLambdaトリガーを設定する方法

既存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 Simple Notification Service (Amazon SNS) トピック、Amazon Simple Queue Service (Amazon SQS) キュー、AWS Lambda 関数、Amazon E...

参考サイト

S3 バケットで Lambda 用の Amazon S3 通知設定を作成する
既存の Amazon Simple Storage Service (Amazon S3) バケットを使用して AWS Lambda 関数の Amazon S3 通知設定を作成したいと考えています。
CloudFormation 一撃で既存のS3バケットでAWS LambdaのS3のオブジェクト作成通知を追加作成してみた | DevelopersIO
API Gateway REST API での、Lambda 統合エラーを解決する
Amazon API Gateway REST API から AWS Lambda 関数を呼び出すと、「Invalid permissions on Lambda function (Lambda 関数へのアクセス許可が無効です)」というエ...

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました