导入资源名称中包含 CIDR 的 terraform AWS VPC 子网

问题描述 投票:0回答:2

我需要使用 import 命令将 AWS VPC 子网导入 terraform。当我运行

terraform plan
命令时,我得到以下输出

module.test-vpc.aws_subnet.play["10.76.175.0/24"]

如何导入此资源,因为它包含此 [“10.76.175.0/24”] cidr 块。以下是我尝试过的命令,该命令失败并出现此错误

Error: Invalid number literal

terraform import module.test-vpc.aws_subnet.play[10.76.175.0/24] sub-xyz

我厌倦了下面的命令,这些命令成功导入,但当我再次运行

terraform plan
时无法识别资源。

terraform import module.test-vpc.aws_subnet.play sub-xyz
terraform import module.test-vpc.aws_subnet.play[0] sub-xyz
amazon-web-services terraform terraform-provider-aws amazon-vpc terraform0.12+
2个回答
1
投票

该模块可能使用 for_each 条件,因此正确的命令应该是

terraform import module.test-vpc.aws_subnet.play["10.76.175.0/24"] sub-xyz

terraform import 'module.test-vpc.aws_subnet.play["10.76.175.0/24"]' sub-xyz

带引号。因为您通过键引用资源。

也可以通过代表地图中顺序的数字来引用资源,但不建议这样做,因为很难理解您是否进行了正确的导入。

所以,执行命令

terraform import module.test-vpc.aws_subnet.play sub-xyz
terraform import module.test-vpc.aws_subnet.play[0] sub-xyz

您已经导入了资源,因此您不再在计划中看到它。您可以通过以下方式从状态中删除资源:

terraform state rm module.test-vpc.aws_subnet.play[0]

并重新导入资源


0
投票

我从 VPC 模块导入子网时遇到问题,它会重命名我的子网。如何保留已创建的子网名称?

module.vpc.aws_subnet.public[1] will be updated in-place
  ~ resource "aws_subnet" "public" {
        id                                             = "mySubnetID"
      ~ map_public_ip_on_launch                        = true -> false
      ~ tags                                           = {
            "Environment" = "lab"
          ~ "Name"        = "snet-public-lab-02" -> "VPC-LAB-Paris-public-eu-west-3b"
          + "Terraform"   = "true"
        }
      ~ tags_all                                       = {
          ~ "Name"        = "snet-public-lab-02" -> "VPC-LAB-Paris-public-eu-west-3b"
          + "Terraform"   = "true"
            # (1 unchanged element hidden)
        }
        # (18 unchanged attributes hidden)
    }
© www.soinside.com 2019 - 2024. All rights reserved.