
# for_each
for_each 在功能上与 count 相似，for_each 使用键值对或字符串集合的形式快速地将值填入到对应的属性中，不仅可以优化脚本结构也有利于理解多实例间的关系。
在使用映射类型表达时，您可以使用 "each.key" 和 "each.value" 来访问映射的键和值。以创建VPC为例，通过 for_each 中的键值对，您可以灵活配置VPC的名称和CIDR。
```
resource "huaweicloud_vpc" "vpcs" {
  for_each = {
    vpc_demo1 = "192.168.0.0/16"
    vpc_demo2 = "172.16.0.0/16"
}
  name = each.key
  cidr = each.value
}
```
在使用字符串集合类型表达时，"each.key" 等同于 "each.value"，一般使用 each.key表示，另外，可以通过 toset() 函数将定义的 list 类型进行转化：
```
resource "huaweicloud_networking_secgroup" "mysecgroup" {
  for_each = toset(["secgroup_demo1", "secgroup_demo2"])
  name     = each.key
}
# 通过变量表示 for _each
variable "secgroup_name" {
  type = set(string)
}
resource "huaweicloud_networking_secgroup" "mysecgroup" {
  for_each = var.secgroup_name
  name     = each.key
}
```
使用 for_each 创建的资源需要通过键名进行访问，格式为：\<资源类型\>.\<名称\>\[键名\]
```
# 访问 vpc_demo1
> huaweicloud_vpc.vpcs["vpc_demo1"]
# 访问 vpc_demo1 的ID
> huaweicloud_vpc.vpcs["vpc_demo1"].id
```
由于 count 和 for_each 都可用于创建多个资源，建议参考以下规则进行选择：
1、如果资源实例的参数完全或者大部分一致，建议使用count；
2、如果资源的某些参数需要使用不同的值并且这些值不能由整数派生，建议使用 for_each；
