In AWS CloudFormation templates you often have the need to make a reference to an earlier created component. For instance the unique ID of a vpc, subnet, security group or instance. You have two choices: continue with separated stacks or combine them to create a nested stack. In our case we wanted to keep seperated stacks so needed a way to export/import settings from an earlier network related CloudFormation stack holding our VPC and Subnet Identifier which the new stack uses. To share information between stacks we can export output values from the first stack and import these values in new stacks. Other stacks that are in the same AWS account and region can import the exported values.
Example of an VPC ID which we export in our network stack (named t10-cf-vpc):
###################### ## OUTPUT ###################### Outputs: VPC: Description: A reference to the created VPC Value: !Ref VPC Export: Name: t10-vpc-id
You can easily check if the export succeeded by using the AWS CloudFormation GUI
or using the AWS CLI to get a list
jvzoggel$ aws cloudformation list-exports { "Exports": [ { "ExportingStackId": "arn:aws:cloudformation:xxxxx:xxxxxxx:stack/t10-cf-vpc/xxxxxxxx", "Name": "t10-vpc-id", "Value": "vpc-xxxxxxx" }, .....
Importing the values in new stacks
The new CloudFormation stack can make use of the exported value simple by using the !ImportValue function
Parameters: NetworkStackNameParameter: Description: Reference to the vpc-10 stack Type: String Default: 't10-cf-vpc' Resources: MyTerra10SecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupName: MyTerra10SecurityGroup GroupDescription: MyTerra10SecurityGroup VpcId: !ImportValue t10-vpc-id
Note: After another stack imports an output value, you can’t delete the stack that is exporting the output value or modify the exported output value.
References: