我可以在 AWS Cloudformation json 模板的 "Parameters" 中使用 "Fn::Join"

Can I use "Fn::Join" in "Parameters" of AWS Cloudformation json template

我想在 Cloudformation 的参数中使用 json 一些 Policy/Loadbalancers 标签名称的模板快捷方式,例如:

"SomeScalingGroupName": {
            "Type": "String",
            "Default": {"Fn::Join": ["", ["Process-", {"Ref": "Env"}, "-Some-Worker-Name"]]}
        },

我得到错误:

Template validation error: Template format error: Every Default member must be a string.

所以我的问题是在参数中使用函数连接的正确方法吗?或者我他们有任何其他方法可以做到这一点?或者您有更好的使用建议吗?

谢谢!

您不能在模板的参数部分使用内部函数。

You can use intrinsic functions only in specific parts of a template. Currently, you can use intrinsic functions in resource properties, metadata attributes, and update policy attributes.

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html

您需要在资源属性中使用此功能。例如:

"Parameters" : {
  "Env" : {
    "Type" : "String",
    "Default" : "test"
  },
  "WorkerName" : {
    "Type" : "String",
    "Default" : "my-worker"
  }
}

"Resources" : {
  "LoadBalancer" : {
    "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
    ...
    "Properties" : {
      "Tags" : [ 
        { "Key" : "Name", "Value": { "Fn::Join" : [ "-", [ "process", { "Ref" : "Env" }, { "Ref" : "SomeWorkerName" }]]}},
      ]
    }
  }
}

这会将 'Name' 标签应用于您的负载均衡器,其值为 'process-test-my-worker'。您还可以在资源属性中的任何其他地方使用相同的功能。