如何获得 vpc_id 以便我可以在 Terraform 中创建 VPC 子网?

How do I get vpc_id so I can create a VPC subnet in Terraform?

我正在一个全新的 Terraform 项目中创建一个带有单个 public 子网的 AWS VPC,该项目仅包含一个 main.tf 文件。在该文件中,我使用了两个资源块,aws_vpcaws_subnet。第二个资源必须使用 vpc_id 属性附加到第一个资源。此属性的值仅在应用时创建,因此不能硬编码。如何获取刚刚创建的资源的ID,以便在后续块中使用它?

resource "aws_vpc" "my_vpc" {
  cidr_block = "102.0.0.0/16"
  tags = {
    Name = "My-VPC"
  }
}

resource "aws_subnet" "my_subnet" {
  vpc_id = # what goes here?
  cidr_block = "102.0.0.0/24"
  tags = {
    Name = "My-Subnet"
  }
}

The docsvpc_id举个例子data.aws_subnet.selected.vpc_id。 this 的值似乎取决于另外两个块,variabledata。我很难看到如何将它们连接到我的 VPC。我尝试直接从文档中复制它们。在 运行 terraform plan 我得到提示:

var.subnet_id
  Enter a value:

这样不行;我想从我刚刚创建的 VPC 中提取值,而不是在命令提示符下输入它。在哪里指定数据源是我在上一个代码块中刚刚创建的资源?

我听说人们创建一个单独的文件来保存 Terraform 变量。那是我应该在这里做的吗?从一个资源中获取 ID 并在下一个资源中使用它似乎应该是非常基本的。是否有单线传递此信息?

I want to pull the value from the VPC I just created,

你不能这样做。您不能从数据源动态填充变量。但是您可以使用 local 代替:

 locals {
   subnet_id = data.aws_subnet.selected.id
 }

并将其称为 local.subnet_id

您可以通过引用Terraform 的指针调用子网块中的VPC。此外,这样做会告诉 Terraform VPC 需要先创建然后销毁。

resource "aws_vpc" "my_vpc" {
  cidr_block = "102.0.0.0/16"
  tags = {
    Name = "My-VPC"
  }
}

resource "aws_subnet" "my_subnet" {
  vpc_id = aws_vpc.my_vpc.id
  cidr_block = "102.0.0.0/24"
  tags = {
    Name = "My-Subnet"
  }
}