【Terraform】Terraformでの条件分岐、ループ処理の書き方

【Terraform】 Terraformでの条件分岐、 ループ処理の書き方 インフラ
スポンサーリンク

はじめに

この記事で分かること
  • Terraformの条件分岐の書き方
  • Terraformのループ処理の書き方
ぴんくうさぎ
ぴんくうさぎ

Terraformってif文かけないの?

for文もJavaみたいに書けないの?

Terraform自体の説明やインストールについては、以下の記事で解説しております。
併せてご覧ください。

条件分岐

Terraformでの条件分岐は基本的に三項演算子で記述します。if文は記述できません。

Conditional Expressions - Configuration Language | Terraform | HashiCorp Developer
Conditional expressions select one of two values. You can use them to define defaults to replace inv...

以下の例では、変数のnumが1の場合は「yes」、それ以外の場合は「no」を返します。

var.num == "1" ? "yes" : "no"

より具体的な例を見ていきます。
以下は環境毎に作成するEC2インスタンスの設定を変えています。

variable "environment" {
  type    = string
  default = "prd"
}

resource "aws_instance" "example" {
  instance_type = var.environment == "prd" ? "t2.large" : "t2.micro"
  ami           = var.environment == "prd" ? "ami-0123456789" : "ami-9876543210"
  subnet_id     = var.environment == "prd" ? "subnet-12345678" : "subnet-87654321"
}

ループ処理

for

ループ構文です。forはExpression(式)なので、値を返すことができます。
後述するfor_each、countはMeta-Argumentであり、値を返すことができません。

主にデータの変換やループ処理に使用されますが、リソースの繰り返し作成には使用されません。
以下はフルーツの各要素をfor文を使用して大文字に変換しています。

locals {
  fruits = ["apple", "banana", "orange"]
}

output "upper_fruits" {
  value = [for fruit in local.fruits : upper(fruit)]
}
For Expressions - Configuration Language | Terraform | HashiCorp Developer
For expressions transform complex input values into complex output values. Learn how to filter input...

for_each

リソースのマッピングに使用されます。
一意のキーと値の組み合わせ(マップ)によって複数のリソースを作成する際に便利です。

以下では各キーと値の組み合わせに基づいて、2つのEC2インスタンスが作成されます。

variable "server_info" {
  type = map
  default = {
    "server1" = "abc"
    "server2" = "def"
  }
}

resource "aws_instance" "instance" {
  for_each = var.server_info

  instance_type = "t2.micro"
  ami           = "ami-0c94855ba95c71c99"

  tags = {
    Name = "${each.key}and${each.value}"
  }
}
The for_each Meta-Argument - Configuration Language | Terraform | HashiCorp Developer
The for_each meta-argument allows you to manage similar infrastructure resources without writing a s...

count

リソースの繰り返し作成を行うための方法です。
指定した数値に基づいて、リソースブロックを複数回作成します。

この方法は、特定の数のリソースを作成する場合に便利です。

resource "aws_instance" "instance" {
  count = 5

  instance_type = "t2.micro"
  ami           = "ami-0c94855ba95c71c99"

  tags = {
    Name = "instance${count.index}"
  }
}
The count Meta-Argument - Configuration Language | Terraform | HashiCorp Developer
Count helps you efficiently manage nearly identical infrastructure resources without writing a separ...

終わりに

本記事はここまでとなります。

ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢

コメント