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

Chr*_*iki 3 terraform

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

$ terraform import aws_instance.foo i-abcd1234
Run Code Online (Sandbox Code Playgroud)
$ terraform import module.foo.aws_instance.bar i-abcd1234
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Sty*_*zma 5

运行terrafom importTerraform 时,您要导入的资源将在您的配置中定义。

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

# main.tf
resource "aws_instance" "foo" {
}
Run Code Online (Sandbox Code Playgroud)

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

在第二个中,$ terraform import module.foo.aws_instance.bar i-abcd1234Terraform 期望包含资源“aws_instance bar”的模块“foo”存在。检查何时创建模块以及如何组合它们。例如

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

# main.tf
module "consul_cluster" {
  source = "./modules/aws-consul-cluster"
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为这一行 `resource "aws_instance" "foo"` 中的 `foo` 应该是 `bar` (2认同)