gpt4 book ai didi

amazon-web-services - 无法使用 SAM 模板为 Lambda 函数创建 S3 PutObject 事件

转载 作者:行者123 更新时间:2023-12-03 07:31:02 25 4
gpt4 key购买 nike

我是 SAM 模板的新手。我的 SAM 模板有以下片段,我曾在其中将存储桶名称作为参数从该 SAM YAML 文件外部传递:-

SAM 模板:-

MyLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./functions/test/dist/
Handler: index.lambdaHandler
Runtime: nodejs12.x
Events:
S3PutObjectEvent:
Type: S3
Properties:
Bucket: !Ref S3BucketName
Events: s3:ObjectCreated:*

参数.YAML:-

DeploymentEnvironment:
default:
S3BucketName: my-awesome-s3-bucket

现在,我不使用 SAM 模板或基础设施即代码 (IaC) 创建任何 S3 存储桶。存储桶创建是由 Lambda 代码本身完成的,因此我的 SAM 模板中没有 S3 对象类型声明。

当我执行此命令时,sam validate 验证 SAM 模板,然后我收到此错误:-

/template.yaml' 是无效的 SAM 模板。错误:[InvalidResourceException('MyLambda', 'ID 为 [S3PutObjectEvent] 的事件无效。S3 事件必须引用同一模板中的 S3 存储桶。')] ('MyLambda', 'ID 为 [S3PutObjectEvent] 的事件无效。S3事件必须引用同一模板中的 S3 存储桶。')

我真的需要你的帮助来实现这个目标,因为我努力解决这个问题。我阅读了各种论坛,不确定我们是否可以从 SAM 模板外部传递存储桶名称。

有什么办法可以解决吗?这对我来说确实是一个关键问题。感谢您对此的帮助。谢谢

最佳答案

Bucket creation is done by Lambda code itself

我建议不要使用这种模式,因为如果存储桶尚不存在,您的 Lambda 甚至源也不会被创建。

尝试在 SAM 模板中创建存储桶,并将存储桶名称作为环境变量传递给您的函数。

您可以选择使用参数在存储桶名称(地址注释)上设置不同的环境名称。

Parameters:
Env:
Type: String
AllowedValues:
- dev
- qa
- prod
Default: dev
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub 'My-unique-bucket-name-${Env}'
MyLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./functions/test/dist/
Handler: index.lambdaHandler
Runtime: nodejs12.x
Environment:
Variables:
BUCKET_NAME: !Ref MyBucket # passed to Lambda as environment variable
Events:
S3PutObjectEvent:
Type: S3
Properties:
Bucket: !Ref MyBucket
Events: s3:ObjectCreated:*

并在函数中获取存储桶名称

const bucket = process.env.BUCKET_NAME

关于amazon-web-services - 无法使用 SAM 模板为 Lambda 函数创建 S3 PutObject 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63703579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com