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 S3 では、通知を発行できるいくつかのイベント通知のタイプと送信先がサポートされています。イベント通知を設定するときに、イベントタイプと送信先を指定できます。各イベント通知に指定できる送信先は 1 つだけです。Amazon S...

参考サイト

S3 バケットで Lambda 用の Amazon S3 通知設定を作成する
既存の Amazon Simple Storage Service (Amazon S3) バケットを使用して AWS Lambda 関数の Amazon S3 通知設定を作成したいと考えています。
CloudFormation 一撃で既存のS3バケットでAWS LambdaのS3のオブジェクト作成通知を追加作成してみた | DevelopersIO
AWS事業本部 梶原@福岡オフィスです。 AWSのブログで公開されている ‘CloudFormation を使用して、既存の S3 バケットで Lambda 用の Amazon S3 通知設定を作成する方法を教えてくださ …
ERROR: The request could not be satisfied

コメント

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