How to refer a derived variable in CloudFormation?
amazon-web-services, aws-cloudformation
Solution
Unfortunately, the short answer is you can't. Hopefully someday AWS supports variables in CloudFormation.
There are some hacks that might be of interest. Emphasis on hack!
- Use a CloudFormation pre-processor that does what you want (eg, Troposphere)
- Use a Custom Resource that outputs the value, then use `GetAtt` to refer to the value. (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)
- Use the `AWS::Include` transform to refer to a template snippet in S3 (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html), in that case you're not really using variables, off course.
Problem
I am looking for small help in CloudFormation and could not find help from documentation or may be not searching the question in right way. Here is the question. I am getting availability zones for the environment from mappings as follows. ``` "AvailabilityZone": { "Fn::Select": [ "1", { "Fn::FindInMap": [ "Environment", { "Ref": "EnvType" }, "AvailabilityZones" ] } ] ``` } I need to use the AZ name in my volume naming convention. How could refer the derived variable "AvailabilityZone" again.? Currently i am doing this. ``` { "Key": "Name", "Value": { "Fn::Join": [ "-", [ { "Ref": "NamePrefix" }, { "Ref": "EnvType" }, "myconstant", { "Fn::Select": [ "2", { "Fn::Split": [ "-", { "Fn::Select": [ "1", { "Fn::FindInMap": [ "Environment", { "Ref": "EnvType" }, "AvailabilityZones" ] } ] } ] } ] } ] ] } } ``` I am doing the same code twice. How can i re-use the derived variable here.?