【发布时间】:2018-01-24 13:55:00
【问题描述】:
我一直在我的 CloudFormation Yaml 模板中使用 !Sub 函数。当它用作对象属性值时,它适用于我
Object:
Property1: !Sub some-value-with-a-${variable}-in-it
变量的值按预期被替换。
但是,我不知道如何在字符串数组的元素中使用 !Sub 函数
Array:
- !Sub some-value-with-a-${variable}-in-it
该数组元素会被忽略。
我在创建 AWS::Serverless::Function 类型资源的 SAM 模板的上下文中尝试此操作。 Policies 属性可以接受一个字符串数组:
lambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: api
FunctionName: !Sub api-${MyStageName}
Handler: Lambda:Api.Function::HandleAsync
Runtime: dotnetcore1.0
Policies:
- AWSLambdaBasicExecutionRole
- !Sub arn:aws:iam::${AWS::AccountId}:policy/some-policy
- arn:aws:iam::123456789:policy/another-policy
!Sub 函数在此示例中的 FunctionName 属性中起作用。但我最终只获得了 2 个附加到我生成的角色的策略 - AWSLambdaBasicExecutionRole 和 arn:aws:iam::123456789:policy/another-policy。包含!Sub 函数的那个会被忽略。
我尝试了将函数放在新行上的选项:
Array:
-
!Sub some value with a ${variable} in it
谁能帮忙?
更新
@Tom Melo 指出这不是数组问题,所以我调整了我的问题。
进一步调查显示,这并不是 Cloud Formation 问题,而是非常具体到 AWS::Serverless::Function 资源类型和 in 中的 Policies 属性。我怀疑这与 @987654332 的事实有关@property 在它可以接受的方面非常灵活。它可以接受引用策略名称或 Arns 的字符串,也可以接受描述新策略的策略文档。我怀疑这意味着它无法支持这些功能。
【问题讨论】:
-
!Sub与数组项或映射值一起使用应该没有区别。这似乎是一个错误,应该这样报告。我会尝试在!Sub之后引用标量;也许这是一个解析器错误,如果是这样,这可能是一种解决方法。 -
感谢您的回复。引号不起作用,所以我会尝试记录错误
标签: yaml aws-lambda amazon-cloudformation