Reputation: 1688
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
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
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