6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Terraform】複数リソースを生成する方法(count, for_each)

Posted at

はじめに

Terraformで複数リソースを生成する方法として、countfor_eachがあるので使い方を簡単にまとめます。

countの使い方

countを使うと、指定した回数、リソースを生成することができます。

試しにIAMユーザーを2個作成します。

# ---------------------------------------------
# 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で指定した2個のIAMユーザーが作成されていることがわかります。
${count.index}は0から始まっていることがわかります。

スクリーンショット 2022-11-01 18.10.56.png

for_eachの使い方

for_eachを使うと、指定されたmapを展開しながら、複数リソースを生成することができます。

試しにサブネットを3個作成します。

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つ生成されていることがわかります。

スクリーンショット 2022-11-01 18.28.03.png

以上です。Terraformのcountとfor_eachを使って、複数リソースを生成してみました。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?