繁体   English   中英

如何在单独的子目录中将现有资源导入到terraform?

[英]How to import existing resources to terraform in a separate subdirectory?

我很久以前使用控制台在 AWS 中创建了一些资源,包括 VPC,...现在我想将它们导入 Terraform。我已经为我的项目制作了一个结构,如:

└── project_xxx
    ├── main.tf
    ├── modules
    │   ├── module_foo
    │   │   ├── main.tf
    │   │   ├── outputs.tf
    │   │   └── variables.tf
    │   ├── module_bar
    │   │   ├── main.tf
    │   │   ├── outputs.tf
    │   │   └── variables.tf
    │   ...
    ├── outputs.tf
    ├── provider.tf
    ├── README.md
    ├── terraform.tfvars
    ├── variables.tf
    └── versions.tf

但是当我尝试在他们的模块中导入资源时,Terraform 给出了一个错误并要求在根目录中创建它们。 有什么建议么?

例如:在 modules/module_foo/main.tf 中,我有以下代码:

  resource "aws_vpc" "main" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "default"

  tags = {
    Name = "main"
  }
}

然后:在 root 中,我执行以下命令:

terraform init
terraform plan # it shows one resource will be added
terraform import aws_vpc.main vpc-xxx1234

然后我得到错误,资源必须在 root 中创建。

由于您正在尝试将资源导入模块,因此与不使用模块的情况相比,导入的语法略有不同。 在这种情况下,它应该是这样的:

terraform import module.module_foo.aws_vpc.main vpc-xxx1234

此处提供更多信息: https://www.terraform.io/docs/cli/commands/import.html#example-import-into-module

前段时间我为此苦苦挣扎,不完全是你的用例,而是类似的东西,所以我会放弃我在这里找到的东西,也许它对其他人有帮助。 我建议在这些情况下使用 terraformer,它有助于很好地了解您现有的基础设施,它会为您生成一个 state,它不是防弹但确实有用https://github.com/GoogleCloudPlatform/terraformer :CLI 工具从现有基础架构(反向 Terraform)生成 terraform 个文件。 基础设施到代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM