如何在serverless.yml中引用DynamoDB流作为Lambda触发器(免硬编码ARN)
如何在Serverless框架中引用DynamoDB表的流ARN而不硬编码?
这其实很简单,利用Serverless框架对CloudFormation内置函数的支持就能解决,不用手动硬编码ARN。直接看修改后的完整配置示例:
service: my-service resources: Resources: MyTable: Type: AWS::DynamoDB::Table Properties: TableName: my-table AttributeDefinitions: - AttributeName: "id" AttributeType: "S" KeySchema: - AttributeName: "id" KeyType: "HASH" ProvisionedThroughput: ReadCapacityUnits: "5" WriteCapacityUnits: "5" StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES # 必须开启流才能生成StreamArn属性 functions: my-handler: handler: src/handler.main events: - stream: type: dynamodb arn: !GetAtt MyTable.StreamArn # 动态引用表的流ARN
关键说明:
- 核心是用CloudFormation的
!GetAtt内置函数,它可以动态获取你定义的CloudFormation资源的属性值。这里MyTable是你在resources块中声明的DynamoDB表的逻辑名称,StreamArn是该表开启流后自动生成的属性。 - 必须确保你的DynamoDB表已经配置了
StreamSpecification(如示例所示),否则表不会生成流ARN,这个引用会在部署时报错。 - 部署时,Serverless框架会将这个配置转换为CloudFormation模板,CloudFormation会在创建DynamoDB表后自动获取其流ARN,再绑定到Lambda的触发器上,全程无需手动填写ARN。
内容的提问来源于stack exchange,提问作者not_a_cloud_guru
相关产品推荐
相关产品推荐

