在cloudformation中可以创建可重用的字符串吗?


14

我有一个字符串,它是由许多变量组成的,这些变量用于许多不同的事物,例如标签和主机名。

有没有一种方法可以创建一个可重复使用的字符串,我可以引用该模板?

任何对此的想法将不胜感激。编辑:一个示例将传递两个参数,例如ProjectName和Environment来加入它们

"Fn::Join" : [ "-", [ {"Ref":"ProjectName"}, {"Ref":"Environment"} ] ]

并在多个地方使用结果



我认为转换是AWS为此提供的。遗憾的是,它们还不支持YAML别名。
jgomo3

Answers:


7

不幸的是,我的实验是要同意您对格雷姆的结论。我为此苦苦挣扎了一段时间,但没有找到一种通过Fn :: Join计算字符串并将其保存在模板中的方法。

我可以和您分享一个典型的例子吗?

截至2014-09-18,在“资源”部分中存储字符串值以供重用的最复杂的方法是通过(第二级)映射。更好的是,我可以预先计算条件并确定是否使用字符串。但是不幸的是,字符串的存储是行不通的。

这是此类Mapping的示例节​​...

    "LoadBalancerBucketMap": {
        "BucketName": {
            "string": {
                "Fn::Join": [
                    "-",
                    [
                        "mylb",
                        {
                            "Ref": "Environment"
                        },
                        "logs"
                    ]
                ]
            }
        }
    },

这是在资源中对其的访问表达式

                "S3BucketName": {
                    "Fn::FindInMap": [
                        "LoadBalancerBucketMap",
                        "BucketName",
                        "string"
                    }

在此示例中,Environment是带有方便的默认值的文字字符串Parameter。因此,这是创建和重用字符串的非常明显的示例。但是,这就是CloudFormation处理器所说的……

模板验证错误:模板格式错误:每个映射属性都必须是字符串或列表。

因此,我与您一样感到沮丧的是,模板中似乎没有办法提供临时字符串变量的效果。

……据我所知。但是您最初收到的答案却与此相反(尽管没有示例)。

因此,如果有人有解决方法的示例,请他们分享一下吗?


2

您可以使用参数或映射来存储可在模板中使用的字符串。


1
这仅适用于静态字符串。OP专门要求计算字符串,这似乎根本不可能。

0

不幸的是,我发现不可能做我想达到的目标。它没有帮助,但确实有。


0

实际上,我们恰好{ProjectName}-{Environment}在期间指定了CloudFormation堆栈名称aws cloudformation deploy。您是否考虑过此堆栈名称的命名约定?

之后,您可以将其引用为{ "Fn:Sub": "${AWS::StackName}" }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.