Terraform 地形:插值可以用HCL2表达式代替

Terraform 地形:插值可以用HCL2表达式代替,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,当我尝试使用如下插值语法时: vpc_id = "${aws_vpc.prod-vpc.id}" 我在IntelliJ中得到“插值可以被HCL2表达式替换”的建议,因此如果我将该行更改为: vpc_id = "aws_vpc.prod-vpc.id" 发布terraform apply,我得到: C:\tf_ptojects\aws\subnet>terraform apply -auto-approve aws_subnet.

当我尝试使用如下插值语法时:

vpc_id     = "${aws_vpc.prod-vpc.id}"
我在IntelliJ中得到“插值可以被HCL2表达式替换”的建议,因此如果我将该行更改为:

 vpc_id     = "aws_vpc.prod-vpc.id"
发布terraform apply,我得到:

C:\tf_ptojects\aws\subnet>terraform apply -auto-approve
aws_subnet.prod-subnet: Creating...
aws_vpc.prod-vpc: Creating...
aws_vpc.prod-vpc: Creation complete after 2s [id=vpc-0cfb27255522bdf15]

Error: error creating subnet: InvalidVpcID.NotFound: The vpc ID 'aws_vpc.prod-vpc.id' does not exist
        status code: 400, request id: dab3fb03-424d-4bf2-ace6-bef93a94ee9c
如果我重新应用插值语法并再次运行terraform apply,那么资源将得到部署,但我在terraform中得到警告,表示仅插值表达式已被弃用:

 Warning: Interpolation-only expressions are deprecated

  on main.tf line 16, in resource "aws_subnet" "prod-subnet":
  16:   vpc_id     = "${aws_vpc.prod-vpc.id}"
因此,TF不鼓励使用插值语法,但如果不使用,就会发出错误。是某种虫子还是什么

C:\tf_ptojects\aws\subnet>terraform -version
Terraform v0.14.4
+ provider registry.terraform.io/hashicorp/aws v3.25.0
整个TF代码供参考:

provider "aws" {
  region = "eu-central-1"
}


resource "aws_vpc" "prod-vpc" {
  cidr_block = "10.100.0.0/16"

  tags = {
    name = "production vpc"
  }
}

resource "aws_subnet" "prod-subnet" {
  cidr_block = "10.100.1.0/24"
  vpc_id     = "aws_vpc.prod-vpc.id"

  tags = {
    name = "prod-subnet"
  }
}

您只需在不使用双引号的情况下获取id,因为您是从资源获取专有网络id。 如果使用双引号,它将被认为是一个字符串,不进行任何评估,TrRAFrm将考虑<代码>“AWSYVPC.PROD VPC.ID”<代码>作为ID。 这是正确的代码:

provider "aws" {
  region = "eu-central-1"
}


resource "aws_vpc" "prod-vpc" {
  cidr_block = "10.100.0.0/16"

  tags = {
    name = "production vpc"
  }
}

resource "aws_subnet" "prod-subnet" {
  cidr_block = "10.100.1.0/24"
  vpc_id     = aws_vpc.prod-vpc.id

  tags = {
    name = "prod-subnet"
  }
}
我已经测试了上面的代码片段,它工作得非常好