我有一个 Cloudformation 模板,目前大致如下所示。
Resources:
MyLayer:
Type: AWS::Lambda::LayerVersion
Properties:
CompatibleRuntimes:
- nodejs12.x
- nodejs10.x
Content: ../layers/nodejs/
LayerName: myLayer
### etc...
MyLambda:
Type: AWS::Lambda::Function
DependsOn: MyLayer
Properties:
Code: lambdas/my-lambda.js
Description: A lambda that makes use of MyLayer
FunctionName: myLambda
Handler: my-lambda.handler
Layers: !Ref CommonLayer
### etc...
这里的核心思想是我想创建一个新的 LayerVersion,并让 Lambda 在每次部署时更新到这个最新的 LayerVersion。我无法将 MyLayer 的 Arn 插入到 MyLambda 的 Layer 属性中。以下是我尝试过的方法:
我看到的 !Ref CommonLayer 根据此返回 ArnCloudFormation 备忘单。在创建 MyLambda 时创建堆栈时出现故障(输出显示 MyLayer 已成功创建),提示:“属性 Layers 的值必须是字符串列表类型”
!GetAtt CommonLayer.Arn 但是该函数不支持 Layers/返回值没有 Arn 字段。
这是 YAML 语法类型问题吗?还是我的目标是创建一个 Layer,然后创建一个依赖于该 Layer 的 Lambda,这在一个 Cloudformation 模板中不可能实现?谢谢!
答案1
属性 Layers 的值必须是字符串列表类型
图层必须是列表。您必须更换:
MyLambda:
Properties:
Layers: !Ref CommonLayer
有了这个:
MyLambda:
Properties:
Layers:
- !Ref CommonLayer
希望有帮助:)