Update Approach
This guide assumes you are using Terragrunt version v0.35.0 or newer, so that all bug fixes for multiple include blocks are patched. Please upgrade to a compatible version prior to moving on in the guide.
In this guide, we will walk through how you can leverage the multiple includes feature to consolidate common configuration files for each component. The steps in this guide are intended to be generic so that they can apply to any component in the Reference Architecture. This allows you to incrementally roll out your changes instead of updating all components at once.
You can checkout the latest for-production example of the Service Catalog to see what the DRY Reference Architecture looks like, and what we are aiming for. In particular, the DRY version breaks down the common configuration into two tiers:
-
Root
terragrunt.hcl
: Configurations common to all accounts and environments, such as the remote state and provider configuration. -
One or more envcommon configurations: Configurations common to the component across environments. Typically, this configuration will also contain all the
dependency
definitions. These configurations are all stored in the_envcommon
folder.
Each live child configuration for the components merges these configurations together to get the final setup using
include
blocks. For example, the child app VPC configuration ends up with the following include
blocks,
combining both the root
and envcommon
includes:
include "root" {
path = find_in_parent_folders()
}
include "envcommon" {
path = "${dirname(find_in_parent_folders())}/_envcommon/networking/vpc-app.hcl"
}