如何触发 lambda 函数事件类型:ObjectCreatedByPut

问题描述

我下面有 CF 模板

我需要为 s3 PUT 事件触发 lambda 函数

Event type: ObjectCreatedByPut

https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-s3-notification-config/

AWstemplateFormatVersion: "2010-09-09"
Transform:  'AWS::Serverless-2016-10-31'

rData:
        Type: AWS::Serverless::Function
        Properties:
            CodeUri: functions/load_data
            FunctionName: sample-function
            Handler: lambda_function.lambda_handler
            Runtime: python3.8
            MemorySize: 3008
            Timeout: 100
            Role: !Sub arn:aws:iam::${AWS::AccountId}:role/main_service_role
            Environment:
                Variables:
                    bucket_name: sample-bucket
                    file_name: config/test.csv
                    

解决方法

AWSTemplateFormatVersion: "2010-09-09"
Transform:  'AWS::Serverless-2016-10-31'

rData:
        Type: AWS::Serverless::Function
        Properties:
            CodeUri: functions/load_data
            FunctionName: sample-function
            Handler: lambda_function.lambda_handler
            Runtime: python3.8
            MemorySize: 3008
            Timeout: 100
            Role: !Sub arn:aws:iam::${AWS::AccountId}:role/main_service_role
            Environment:
                Variables:
                    bucket_name: sample-bucket
                    file_name: config/test.csvEvents:
            S3Event:
                Type: S3
                Properties:
                Bucket:
                    Ref: ImagesBucket     # This must be the name of an S3 bucket declared in the same template file
                Events: s3:ObjectCreated:Put
                Filter:
                    S3Key:
                    Rules:
                    - Name: prefix      # or "suffix"
                        Value: value      # The value to search for in the S3 object key names

S3 Event

Amazon S3 Event Notifications

,

您可以将 Events 添加到您的模板中。但是对于S3 event

S3 存储桶名称。此存储分区必须存在于同一模板中。

因此您的模板可以修改如下:

AWSTemplateFormatVersion: "2010-09-09"
Transform:  'AWS::Serverless-2016-10-31'
Resources:

  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: test-bucket-3422344

  rData:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/load_data     
      FunctionName: sample-function
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      MemorySize: 3008
      Timeout: 100
      Role: !Sub arn:aws:iam::${AWS::AccountId}:role/main_service_role
      Environment:
        Variables:
          bucket_name: sample-bucket
          file_name: config/test.csv
      Events:
        S3Event:
          Type: S3
          Properties:
            Bucket: !Ref MyBucket
            Events: s3:ObjectCreated:Put