我需要使用 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
该模块可能使用 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]
并重新导入资源
我从 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)
}