count
默认情况下,Terraform的 resource块只配置一个资源。当我们需要创建多个相同的资源时,如果配置多个独立的 resource块就显得很冗余,且不利于维护。我们可以使用 count 或 for_each 参数在同一个 resource块中管理多个相同的资源。在同一个 resource块中不能同时使用count 和 for_each 参数。示例如下:
resource "huaweicloud_evs_volume" "volumes" { count = 3 size = 20 volume_type = "SSD" availability_zone = "cn-north-4a" }
我们通过如上配置创建了3个相同的云硬盘(EVS)。在很多情况下,Provider 要求创建资源的某些参数具有唯一性,这时我们可以使用 "count.index" 属性来进行区分,这是一个从0开始计数的索引值。
resource "huaweicloud_vpc" "vpcs" { count = 2 name = "myvpc_${count.index}" cidr = "192.168.0.0/16" }
我们通过如上配置创建了两个VPC,名字分别为 myvpc_0 和 myvpc_1,它们具有相同的CIDR值。如果进一步修改CIDR值,我们可以声明一个string列表用于存储不同VPC的CIDR值,然后通过 count.index 去访问列表元素。
variable "name_list" { type = list(string) default = ["vpc_demo1", "vpc_demo2"] } variable "cidr_list" { type = list(string) default = ["192.168.0.0/16", "172.16.0.0/16"] } resource "huaweicloud_vpc" "vpcs" { count = 2 name = var.name_list[count.index] cidr = var.cidr_list[count.index] }
使用 count 创建的资源需要通过索引值进行访问,格式为:<资源类型>.<名称>[索引值]
# 访问第一个VPC > huaweicloud_vpc.vpcs[0] # 访问第一个VPC的ID > huaweicloud_vpc.vpcs[0].id # 访问所有VPC的ID > huaweicloud_vpc.vpcs[*].id