我有一个字符串,它是由许多变量组成的,这些变量用于许多不同的事物,例如标签和主机名。
有没有一种方法可以创建一个可重复使用的字符串,我可以引用该模板?
任何对此的想法将不胜感激。编辑:一个示例将传递两个参数,例如ProjectName和Environment来加入它们
"Fn::Join" : [ "-", [ {"Ref":"ProjectName"}, {"Ref":"Environment"} ] ]
并在多个地方使用结果
我有一个字符串,它是由许多变量组成的,这些变量用于许多不同的事物,例如标签和主机名。
有没有一种方法可以创建一个可重复使用的字符串,我可以引用该模板?
任何对此的想法将不胜感激。编辑:一个示例将传递两个参数,例如ProjectName和Environment来加入它们
"Fn::Join" : [ "-", [ {"Ref":"ProjectName"}, {"Ref":"Environment"} ] ]
并在多个地方使用结果
Answers:
不幸的是,我的实验是要同意您对格雷姆的结论。我为此苦苦挣扎了一段时间,但没有找到一种通过Fn :: Join计算字符串并将其保存在模板中的方法。
我可以和您分享一个典型的例子吗?
截至2014-09-18,在“资源”部分中存储字符串值以供重用的最复杂的方法是通过(第二级)映射。更好的是,我可以预先计算条件并确定是否使用字符串。但是不幸的是,字符串的存储是行不通的。
这是此类Mapping的示例节...
"LoadBalancerBucketMap": {
"BucketName": {
"string": {
"Fn::Join": [
"-",
[
"mylb",
{
"Ref": "Environment"
},
"logs"
]
]
}
}
},
这是在资源中对其的访问表达式
"S3BucketName": {
"Fn::FindInMap": [
"LoadBalancerBucketMap",
"BucketName",
"string"
}
在此示例中,Environment是带有方便的默认值的文字字符串Parameter。因此,这是创建和重用字符串的非常明显的示例。但是,这就是CloudFormation处理器所说的……
模板验证错误:模板格式错误:每个映射属性都必须是字符串或列表。
因此,我与您一样感到沮丧的是,模板中似乎没有办法提供临时字符串变量的效果。
……据我所知。但是您最初收到的答案却与此相反(尽管没有示例)。
因此,如果有人有解决方法的示例,请他们分享一下吗?
实际上,我们恰好{ProjectName}-{Environment}
在期间指定了CloudFormation堆栈名称aws cloudformation deploy
。您是否考虑过此堆栈名称的命名约定?
之后,您可以将其引用为{ "Fn:Sub": "${AWS::StackName}" }
。