Question:
I want to use in Parameters of Cloudformation json template shortcut of some Policy/Loadbalancers tags name, like that:
1 2 3 4 5 |
"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!
Answer:
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
"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.