【Terraform】创建多个资源的方法(count、for_each)
首先
以下是关于使用 Terraform 生成多个资源的两种方法 count 和 for_each 的简要总结。
如何使用count
使用 count 可以指定生成资源的次数。
我們將試著創建二個IAM使用者。
# ---------------------------------------------
# Terraform configuration
# ---------------------------------------------
terraform {
required_version = ">=0.13"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
profile = "terraform" # ご自身のaws profile
region = "ap-northeast-1"
}
# ---------------------------------------------
# IAM User
# ---------------------------------------------
resource "aws_iam_user" "user" {
count = 2
name = "testuser-${count.index}"
}
我将执行。
$ terraform apply
当您查看AWS控制台时,您会发现已创建了两个按照指定的计数(count)生成的IAM用户。
您可以看到 ${count.index} 在0开始。
for_each的使用方法
使用for_each可以在展开指定的映射时生成多个资源。
我們試著創建三個子網絡。
for_each用以按照键值对形式指定数值。
for_each = {
"192.168.1.0/24" = "ap-northeast-1a"
"192.168.2.0/24" = "ap-northeast-1c"
"192.168.3.0/24" = "ap-northeast-1d"
}
可以使用each.key和each.value来获取值。
cidr_block = each.key
availability_zone = each.value
实际的代码如下所示。
terraform {
required_version = ">=1.3"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
profile = "terraform"
region = "ap-northeast-1"
}
# ---------------------------------------------
# Network
# ---------------------------------------------
resource "aws_vpc" "vpc" {
cidr_block = "192.168.0.0/20"
}
resource "aws_subnet" "subnet" {
# キーバリュー形式で値を指定
for_each = {
"192.168.1.0/24" = "ap-northeast-1a"
"192.168.2.0/24" = "ap-northeast-1c"
"192.168.3.0/24" = "ap-northeast-1d"
}
# each.keyとeach.valueで値を取得
vpc_id = aws_vpc.vpc.id
cidr_block = each.key
availability_zone = each.value
}
我会执行。
$ terraform apply
只要没有问题,您可以通过查看AWS控制台来确定使用for_each创建的子网数量为3个。
我使用 Terraform 的 count 和 for_each 功能来生成多个资源。