如何为 Terraform GCP 模块的每个资源指定不同的区域?

How do I specify different regions per resource for Terraform GCP module?

Terraform google provider module 的文档列出了设置区域的全局选项:

region - (Optional) The region to operate under, if not specified by a given resource. This can also be specified using any of the following environment variables (listed in order of precedence):

GOOGLE_REGION

GCLOUD_REGION

CLOUDSDK_COMPUTE_REGION

但是,我找不到为 google_compute_instance or a google_compute_disk 资源指定区域的方法。如何在同一项目的不同区域创建多个 instances/disks?

OP 的回答措辞:

这两种资源类型都位于一个区域内,它们有一个相应的 zone 字段来指定在何处提供它们。由于区域位于单个区域中,因此为资源指定请求的区域就足够了,因为它也隐式指定了区域。没有为这些资源类型指定区域的选项,因为这与指定区域是多余的,并且仅指定区域是不够的。

提供的原始答案:

您链接的两个资源都有 zone 标记,这是需要放置实例和 VM 磁盘的位置,因为它们不是区域范围的。区域位于一个区域内,通常每个区域有两个或三个区域。

例如,以区域 us-west1 为例,在 this list 中,您可以看到它具有区域 abc,这在区域标签中指定时需要写成us-west1-aus-west1-bus-west1-c

编辑:

此示例显示了一个示例 terraform 配置文件,它在位于两个不同区域的两个不同区域中创建了两个不同的 Compute Engine VM 实例:

provider "google" {
        project="YOUR-PROJECT"  # Project ID
        region="europe-west2"   # Default resource region 
        zone="europe-west2-b"   # Default resource zone 
}

/*
 * Create instance in region Europe West 1, zone b
 */
resource "google_compute_instance" "europe_instance"{
        name            = "europe-instance-1"
        machine_type    = "n1-standard-1"
        zone            = "europe-west1-b"

        boot_disk {
                initialize_params {
                        image = "debian-cloud/debian-9"
                }
        }
        network_interface {
                network = "default"
        }

}

/*
 * Create instance in US West 1, zone c
 */
resource "google_compute_instance" "us_instance"{
        name            = "us-instance-2"
        machine_type    = "n1-standard-1"
        zone            = "us-west1-c"

        boot_disk {
                initialize_params {
                        image = "debian-cloud/debian-9"
                }
        }

        network_interface {
                network = "default"
        }

}