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

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

前提

項目内容補足
Lambdaindex.zipzip圧縮済
デプロイ用バケット名hogehoge
バケット名deploy-bucket新規作成バケット
prefiximages/
イベントタイプ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を設定するのは少し厄介そうです。

参考サイト

CloudFormation を使用して S3 バケットに Lambda の Amazon S3 通知設定を作成する
CloudFormation 一撃で既存のS3バケットでAWS LambdaのS3のオブジェクト作成通知を追加作成してみた | DevelopersIO
AWS事業本部 梶原@福岡オフィスです。 AWSのブログで公開されている ‘CloudFormation を使用して、既存の S3 バケットで Lambda 用の Amazon S3 通知設定を作成する方法を教えてくださ …

コメント

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