Although infrastructure-as-code is an excellent concept we all should obey, migration of infrastructure set up to written code is always challenging. The final infrastructure should be identical to the existing one to avoid the wide range of catastrophic failures. But manually writing the Terraform code (or any other infrastructure automation tool) is troublesome and error-prone. It can often force us to write and check much code to ensure it is consistent with the current infrastructure setup.

I found Terraformer is helpful for this purpose. It automatically loads states and writes the initial HCL code as we can get started on it.


Terraformer provides two options, import and plan. import imports the current TF state and writes the HCL code for us. plan only loads the state and shows what type of resource it is going to create. We can run plan first as we use Terraform to check the result of the command will work as expected.

$ terraformer --help

Available Commands:
  help        Help about any command
  import      Import current state to Terraform configuration
  plan        Plan to import current state to Terraform configuration
  version     Print the version number of Terraformer

  -h, --help      help for this command
  -v, --version   version for this command

Use " [command] --help" for more information about a command.

The following command will allow you to import AWS infrastructure.

$ terraformer plan aws

If you want to use the specific profile of the AWS role, we have a --profile option.

$ terraformer plan aws --profile <Your Profile>

Terraformer will dump the state file in the directory named generated as default. Next, you can generate the corresponding HCL code by the import command if the state looks okay.

$ terraformer import aws --profile <Your Profile>

One note is that it will create a brand-new infrastructure set, not modify the existing one. So please adjust the resource names as you like because all have prefixes tfer-- and auto-generated identifiers.