1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

My Infrastructure JourneyAdvent Calendar 2024

Day 3

Terraformにおける条件分岐についてまとめた

Last updated at Posted at 2024-12-02

はじめに

この記事では三ヶ月ほどTerraformに触れてきた人間から見た、Terraformで条件分岐をしたくなった時のやり方と使い分けについて書いていく。

Terraformにおける条件分岐処理

まず初めにTerraformには他の言語でいうif文のような命令型の条件分岐は存在しない。その代わりに三項演算子単体や、dynamicやcountと組み合わせて条件分岐を行うのがよくあるやり方だと思われる。

三項演算子の使い方

Terraformの三項演算子の使い方をまず説明していく。
基本的な構文は以下の通りで、conditionに条件式を書き、その結果がtrueだった場合にはtrue_valに書かれたものが結果として出力され、falseの場合にはfalse_valに書かれたものが結果として出力される。

condition ? true_val : false_val

実際に使ってみる。例えば環境によってインスタンスタイプを変えたい場合には以下のように実装していく。

instance_type = var.environment == "Production" ? "t3.large" : "t3.small"

ちなみに条件をいい感じに組み合わせて複雑な条件分岐を実現することも可能である。

instance_type = var.environment == "Production" ? (
  var.region == "ap-northeast-1" ? "t3.large" : "t3.medium"
) : "t3.small"

count + 三項演算子で行う条件分岐

countと組み合わせることで、リソースの増減を条件分岐で制御することができるようになる。

例えば以下の例では環境ごとに作成するインスタンス数を分岐させることができる。

resource "aws_instance" "example" {
  count = var.environment == "Production" ? 2 : 1
  
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

dynamic + 三項演算子で行う条件分岐

dynamicと三項演算子を使うとcountよりも柔軟に条件分岐を行うことができる。
dynamicはリソース内の特定のブロックの数を制御することができるので、例えばセキュリティグループの複数ルールを作成する場合やロードバランサーのリスナー設定など、細かい設定の条件分岐を行う際にdynamicは効果的に働く。

以下はセキュリティグループのingress ruleを環境ごとに分岐して作成する例である。

resource "aws_security_group" "example" {
  name = "example"

  dynamic "ingress" {
    for_each = var.environment == "Production" ? [80, 443] : [80]
    content {
      from_port   = ingress.value
      to_port     = ingress.value
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    }
  }
}

まとめ

この記事ではTerraformの条件分岐についてまとめた。

  • Terraformの条件分岐は三項演算子で行う
  • リソース自体を条件分岐させたい場合にはcountと組み合わせるのが効果的である
  • リソース内の設定ブロックを条件分岐させたい場合にはdynamicと組み合わせるのが効果的である
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?