Reputation: 936
I want to use in Parameters of Cloudformation json template shortcut of some Policy/Loadbalancers tags name, like that:
"SomeScalingGroupName": {
"Type": "String",
"Default": {"Fn::Join": ["", ["Process-", {"Ref": "Env"}, "-Some-Worker-Name"]]}
},
And I get error:
Template validation error: Template format error: Every Default member must be a string.
So my question if that proper way to use function join in Parameters? Or I they have any other way to do that? Or you have any better suggestions to using that?
Thanks!
Upvotes: 25
Views: 22050
Reputation: 2105
You cannot use intrinsic functions within the parameters section of your template.
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
You will need use this function within your resource properties. For example:
"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" }]]}},
]
}
}
}
This will apply a 'Name' tag to your Load Balancer with a value of 'process-test-my-worker'. You can also use this same function anywhere else within the properties of your resources.
Upvotes: 29