Christian Saiki
Christian Saiki

Reputation: 1688

Difference between "Importing into module" and "Importing into resource" in terraforn

I was reading Terraform's docs and I found these two commands:

$ terraform import aws_instance.foo i-abcd1234
$ terraform import module.foo.aws_instance.bar i-abcd1234

So I was wondering what's the practical difference within terraform's state when you execute these two commands.

Thanks in advance!

Upvotes: 3

Views: 5122

Answers (2)

Styszma
Styszma

Reputation: 487

When running terrafom import Terraform expects the resources you're importing to to be defined in your configuration.

For your first case $ terraform import aws_instance.foo i-abcd1234 you would need to define at least:

# main.tf
resource "aws_instance" "foo" {
}

Terraform will update the statefile with details from AWS.

In the second one $ terraform import module.foo.aws_instance.bar i-abcd1234 Terraform expects module 'foo' containing resource 'aws_instance bar' to exist. Check on when to create modules and how to compose them. E.g.

# modules/foo
resource "aws_instance" "bar" {
}

# main.tf
module "consul_cluster" {
  source = "./modules/aws-consul-cluster"
}

If you will check the statefile you'll see that your imported resource is nested differently.

Upvotes: 5

Benjamistan
Benjamistan

Reputation: 11

If you import something into a resource that you later want to convert into a module, you need to re-import (and remove your original import from state). Worth bearing in mind as your codebase evolves.

Upvotes: 0

Related Questions