这里是 Terraform 的新手。我正在尝试使用 Terraform 创建多个项目(在 Google Cloud 中)。问题是我必须执行多个资源才能完全设置一个项目。我尝试了 count
,但如何使用 count
依次绑定(bind)多个资源?以下是我需要为每个项目执行的以下资源:
- 使用
资源“google_project”
创建项目 - 使用
资源“google_project_service”
启用API服务 - 使用
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/