如何将现有的vpc导入到此模块

ani*_*ish 0 amazon-web-services terraform terraform-provider-aws

您好,我正在尝试使用 terraform 模块导入现有资源 terraform-aws-modules/vpc/aws

\n

这是我的模块定义

\n
module "vpc" {\n  source = "terraform-aws-modules/vpc/aws"\n\n  name = "eks-dev"\n  cidr = "10.0.0.0/16"\n\n  azs             = ["us-east-1b", "us-east-1a"]\n  public_subnets = ["10.0.2.0/24", "10.0.1.0/24"]\n\n  enable_nat_gateway = false\n  enable_vpn_gateway = false\n\n  tags = {\n    Terraform = "true"\n    Environment = "dev"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当我执行计划时

\n
 # module.vpc.module.vpc.aws_vpc.this[0] will be created\n  + resource "aws_vpc" "this" {\n      + arn                                  = (known after apply)\n      + cidr_block                           = "10.0.0.0/16"\n      + default_network_acl_id               = (known after apply)\n      + default_route_table_id               = (known after apply)\n      + default_security_group_id            = (known after apply)\n      + dhcp_options_id                      = (known after apply)\n      + enable_dns_hostnames                 = true\n      + enable_dns_support                   = true\n      + enable_network_address_usage_metrics = (known after apply)\n      + id                                   = (known after apply)\n      + instance_tenancy                     = "default"\n      + ipv6_association_id                  = (known after apply)\n      + ipv6_cidr_block                      = (known after apply)\n      + ipv6_cidr_block_network_border_group = (known after apply)\n      + main_route_table_id                  = (known after apply)\n      + owner_id                             = (known after apply)\n      + tags                                 = {\n          + "Environment" = "dev"\n          + "Name"        = "eks-dev"\n          + "Terraform"   = "true"\n        }\n      + tags_all                             = {\n          + "Environment" = "dev"\n          + "Name"        = "eks-dev"\n          + "Terraform"   = "true"\n        }\n    }\n\n
Run Code Online (Sandbox Code Playgroud)\n

这向我展示了有关如何导入的足够信息,但是当我尝试导入这些内容时

\n
\xe2\x9d\xaf terraform import module.vpc.aws_vpc.this vpc-0d8bf51e96d3bc819\nError: resource address "module.vpc.aws_vpc.this" does not exist in the configuration.\n\nBefore importing this resource, please create its configuration in module.vpc. For example:\n\nresource "aws_vpc" "this" {\n  # (resource arguments)\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

公有子网相同

\n
\xe2\x9d\xaf terraform import "module.vpc.aws_subnet.public" "subnet-0d958d42eec08c493"\n\nError: resource address "module.vpc.aws_subnet.public" does not exist in the configuration.\n\nBefore importing this resource, please create its configuration in module.vpc. For example:\n\nresource "aws_subnet" "public" {\n  # (resource arguments)\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

如何解决这个语法是否正确?

\n

基于Marko Ecommen的这解决了问题

\n
\xe2\x9d\xaf terraform import 'module.vpc.module.vpc.aws_vpc.this[0]' vpc-0d8bf51e96d3bc819\nmodule.vpc.module.vpc.aws_vpc.this[0]: Importing from ID "vpc-0d8bf51e96d3bc819"...\nmodule.vpc.module.vpc.aws_vpc.this[0]: Import prepared!\n  Prepared aws_vpc for import\nmodule.vpc.module.vpc.aws_vpc.this[0]: Refreshing state... [id=vpc-0d8bf51e96d3bc819]\n\nImport successful!\n\nThe resources that were imported are shown above. These resources are now in\nyour Terraform state and will henceforth be managed by Terraform.\n\n
Run Code Online (Sandbox Code Playgroud)\n

Mar*_*o E 5

由于您似乎正在使用嵌套模块,即模块内的模块,因此仅使用问题中的命令是不够的:

terraform import module.vpc.aws_vpc.this vpc-0d8bf51e96d3bc819
Run Code Online (Sandbox Code Playgroud)

从计划输出可以看出,该模块实际上会尝试创建:

# module.vpc.module.vpc.aws_vpc.this[0] will be created
Run Code Online (Sandbox Code Playgroud)

这也意味着要使导入工作,您必须使用以下命令:

# module.vpc.module.vpc.aws_vpc.this[0] will be created
Run Code Online (Sandbox Code Playgroud)

相同的逻辑应该应用于属于嵌套模块的所有资源。