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

时间:2019-01-11 09:34:45

标签: google-cloud-platform terraform terraform-provider-gcp

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

  

region-(可选)要在其下操作的区域,如果没有指定   给定资源。也可以使用以下任意一种方式指定   环境变量(按优先顺序列出):

     

GOOGLE_REGION

     

GCLOUD_REGION

     

CLOUDSDK_COMPUTE_REGION

但是,我发现没有办法为google_compute_instancegoogle_compute_disk资源指定区域。如何在同一项目的不同区域中创建多个实例/磁盘?

1 个答案:

答案 0 :(得分:1)

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"
        }

}