terraform - 如何在同一个列表上迭代多个资源?

标签 terraform terraform-provider-gcp

这里是 Terraform 的新手。我正在尝试使用 Terraform 创建多个项目(在 Google Cloud 中)。问题是我必须执行多个资源才能完全设置一个项目。我尝试了 count,但如何使用 count 依次绑定(bind)多个资源?以下是我需要为每个项目执行的以下资源:

  1. 使用资源“google_project”创建项目
  2. 使用资源“google_project_service”启用API服务
  3. 使用 resource "google_compute_shared_vpc_service_project" 将服务项目附加到宿主项目(我正在使用共享 VPC)

如果我想创建一个项目,这很有效。但是,如果我将项目列表作为输入传递,我如何才能按顺序为该列表中的每个项目执行上述所有资源?

例如。

输入

project_list=["proj-1","proj-2"]

依次执行以下操作:

resource "google-project" for "proj-1"
resource "google_project_service" for "proj-1"
resource "google_compute_shared_vpc_service_project" for "proj-1"

resource "google-project" for "proj-2"
resource "google_project_service" for "proj-2"
resource "google_compute_shared_vpc_service_project" for "proj-2"

我使用的是 Terraform 版本 0.11,它不支持 for 循环

最佳答案

在 Terraform 中,您可以使用 count 和两个插值函数 element()length() 来完成此操作。

首先,您将为您的模块提供一个输入变量:

variable "project_list" {
  type = "list"
}

然后,你会得到类似的东西:

resource "google_project" {
  count = "${length(var.project_list)}"
  name  = "${element(var.project_list, count.index)}"
}

resource "google_project_service" {
  count = "${length(var.project_list)}"
  name  = "${element(var.project_list, count.index)}"
}

resource "google_compute_shared_vpc_service_project" {
  count = "${length(var.project_list)}"
  name  = "${element(var.project_list, count.index)}"
}

当然,您还将在这些资源声明中拥有其他配置。

请注意,此模式在 Terraform Up and Running 中有所描述。 、第 5 章以及文档中使用 count.index 的其他示例 here .

关于terraform - 如何在同一个列表上迭代多个资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56137102/

相关文章:

amazon-web-services - Terraform:特定于 ubuntu 20.08 LTS AWS 的 AMI 列表

amazon-web-services - 如何使用 terraform 修复 AWS 中的 LimitExceeded 问题?

godep save ./... 似乎不适用于 https ://github. com/hashicorp/terraform

Terraform - GCP - 将 IP 地址链接到链接到云存储桶的负载均衡器

terraform - 无法执行 terraform apply -target

google-cloud-platform - 更改 Cloud Composer 的 DAG 的默认 GCS 位置

azure - Terraform 导入 - 资源标签重要吗?

Azure 终结点 'resourceTargetId' 的 'vm1-TF' 属性无效或丢失

google-cloud-platform - 使用 terraform 自动创建防火墙规则以及 Dataproc 集群创建