amazon-web-services - 如何使用从一个 Terraform 计划创建到另一个 Terraform 计划的 VPC id 和子网 id 值

标签 amazon-web-services terraform terraform-provider-aws

我在一个 Terraform 计划中创建了 VPC、子网和安全组(我们称之为 Plan A)。它执行得很好,状态也存储在远程 S3 后端。

现在我有了一个新的 Terraform 计划(我们称之为 Plan B),我需要在其中启动一个 EC2 实例。为此,我需要从 Plan A 中获取 VPC、子网 ID。地形输出。

有没有推荐的方法来做到这一点?

最佳答案

在 Terraform 中有两种主要的方式来传递事物的输出。

第一种也是最古老的方法是使用 remote state feature在不同的状态文件中获取输出。

第二种更新的方法是使用供应商的 data sources向您的提供者公开只读请求以获取有关资源的信息。

有了这个,您将使用 aws_vpc aws_subnet_ids 数据源以检索有关相关子网 ID 的信息。

一个示例可能类似于 aws_subnet_ids 中给出的示例。文档:

variable "vpc" {}
variable "ami" {}

data "aws_vpc" "selected" {
  tags {
    Name = "${var.vpc}"
  }
}

data "aws_subnet_ids" "private" {
  vpc_id = "${data.aws_vpc.selected.id}"
  tags {
    Tier = "Private"
  }
}

resource "aws_instance" "app" {
  count         = "3"
  ami           = "${var.ami}"
  instance_type = "t2.micro"
  subnet_id     = "${element(data.aws_subnet_ids.private.ids, count.index)}"
}

这将在标记为 Tier 的 3 个子网中的每个子网中放置一个 EC2 实例。 = Private在具有 Name 的 VPC 中vpc 提供的标签值多变的。

显然,您可以使用 aws_ami data source 进一步插入这一点。还可以根据某些过滤条件获取要使用的 AMI ID。这也有助于删除一些您可能在 Terraform 代码中拥有的更神奇的变量。

关于amazon-web-services - 如何使用从一个 Terraform 计划创建到另一个 Terraform 计划的 VPC id 和子网 id 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074138/

相关文章:

amazon-web-services - 创建或更新作业时自动运行 AWS Glue 作业

amazon-web-services - 使用 Hive 创建 DynamoDB 表

amazon-web-services - 使用 Terraform 使用来自不同区域的 S3 的代码创建 Lambda 函数

azure - Terraform - 用于资源创建的嵌套循环

amazon-web-services - 允许 lambda 权限访问 Secretsmanager 值

amazon-web-services - 策略文档不应指定主体 - terraform aws_iam_policy_document

java - AWS Lambda 上的 "The connection attempt failed"Postgres

amazon-web-services - Amazon CloudFront 中的 NextJS 动态路由

amazon-web-services - 如何防止 terraform 询问在 AWS Secrets Manager 上设置的变量的值?

node.js - 尽管指定了 Kubernetes 部署/服务端口,但连接端口错误