DEV Community

Thomas Step
Thomas Step

Posted on • Edited on • Originally published at thomasstep.com

CloudFormation Exports and Imports

When writing Cloudformation templates, there is a way to reference a common piece of infrastructure without having to pass it in through a parameter or a hard-coded value. That method is Exports and Imports. I have been using these more lately because I think that they clean up my templates, and coming from a programming background, it makes sense to me to import values from other files (in this case stacks) like a variable. Setting an Export is like defining a variable, and using an Import is like calling that variable. If you are Exporting and Importing a piece of infrastructure's name that may change in the future, then that means you will not have to change anything in your template as long as the Exports keep the same names. Unfortunately, before I learned how to use Exports and Imports, I passed in references through Parameters, which did not scale well into different environments.

Here is a quick and dirty snippet as an example of how to use Exports (in vpc-template) and Imports (in another-template).

vpc-template.yml
Resources:
  myVPC:
    .
    .
    .

Outputs:
  VPC:
    Description: A reference to the created VPC
    Value: !Ref myVPC
    Export:
      Name: accountVPC



another-template.yml
Resources:
  SecurityGroup:
    Properties:
      .
      .
      .
      VpcId:
        Fn::ImportValue:
          accountVPC
Enter fullscreen mode Exit fullscreen mode

The Outputs block is at the top level of your template, then comes the logical name of your output, and finally the Export with the Name of what you want to export. In order to use a reference to myVPC in another template you just need to import it using a Cloudformation intrinsic function called ImportValue. When I was trying to figure out how to "use variables in Cloudformation templates", this is what I ended up settling in on. I find that using Exports and Imports helps a ton when you need to reference the same piece of common infrastructure in an account across multiple templates.

Top comments (1)

Collapse
 
starpebble profile image
starpebble

I hope import/export doesn't step on anybody's toes. Looks nice. Possibly a shift. Nested stacks can cause fires. If we use our brains better I wonder if CloudFormation StackSets and CloudFormation Import/Export will help our cloud automation settle down quickly. I don't understand why nested stacks are so popular.