使用 SAM 启用 Amazon S3 存储桶以触发 Lambda 函数

Enable Amazon S3 bucket to Trigger Lambda function using SAM

我想在使用 SAM 将文件上传到具有特定前缀和后缀的 Amazon S3 存储桶时触发 Lambda 函数。现在我正在使用这段代码,但它给出了错误

"ARN 格式不正确(服务:Amazon S3;状态代码:400;错误代码:InvalidArgument"

编辑:

这是有效的,但它没有提供添加后缀或前缀的选项。

NotificationConfiguration 中,您只是使用 !Ref HelloWorld 来引用您的函数,但是,正如 the documentation for AWS::Serverless::Function 所述:

When the logical ID of this resource is provided to the Ref intrinsic function, it returns the resource name of the underlying Lambda function.

如果我们查看 the documentation for the LambdaConfiguration,它指出:

The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3 invokes when the specified event type occurs.

如果您只是将 !Ref HelloWorld 更改为 !GetAtt HelloWorld.Arn,它应该会传递正确的值。

但是请注意 the NotificationConfiguration documentation 上的评论,如果您在创建通知配置的同时创建存储桶,则可能会导致循环依赖,因为您还需要添加一个 AWS::Lamdba::Permission(或使用 AWS::Serverless::FunctionEvents)以允许 S3 调用您的 lambda 函数。