terraforn中“导入模块”和“导入资源”的区别

时间:2021-01-25 04:45:22

标签: terraform

我正在阅读 Terraform 的文档,发现这两个命令:

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

所以我想知道执行这两个命令时 terraform 状态的实际区别是什么。

提前致谢!

1 个答案:

答案 0 :(得分:3)

运行 terrafom import 时,Terraform 期望您导入的 resources 在您的配置中定义。

对于您的第一种情况 $ terraform import aws_instance.foo i-abcd1234,您至少需要定义:

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

Terraform 将使用来自 AWS 的详细信息更新状态文件。

在第二个 $ terraform import module.foo.aws_instance.bar i-abcd1234 中,Terraform 期望包含资源“aws_instance bar”的模块“foo”存在。检查 when to create moduleshow to compose them。例如

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

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

如果您检查状态文件,您会发现导入的资源嵌套不同。