プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

for_eachの使い方 【Terraform】

参考 : https://developer.hashicorp.com/terraform/language/meta-arguments/for_each

for_each構文とは

for_eachは、Terraform言語で定義された文法です。モジュールとすべてのリソースタイプで使用します。

for_eachは、辞書または文字列の配列を受け入れ、 各要素に対応するAWSリソースを作成することができます。

以下のコードは、Terraformを使用してAzure Resource Manager (ARM) リソースグループを作成するためのものです。具体的には、複数のリソースグループを一度に作成するために、for_eachループを使っています。

resource "azurerm_resource_group" "rg" {
    for_each = tomap({
        a_group       = "eastus"
        another_group = "westus2"  
    })
    name = each.key
    location = each.value
}
  1. for_each = tomap({...}):

    • for_each は、Terraformがリソースの複数のインスタンスを作成するための構文です。
    • tomap({...}) は、リストやマップを明示的にマップ型に変換するために使います。
    • この場合、tomap関数はキーと値のペアを含むマップを作成しています。
  2. name = each.key:

    • name プロパティはリソースグループの名前を指定します。
    • each.key は、for_each ループ内の現在のマップエントリのキーを参照します。ここでは、"a_group""another_group" になります。
  3. location = each.value:

    • location プロパティはリソースグループが作成されるAzureリージョンを指定します。
    • each.value は、for_each ループ内の現在のマップエントリの値を参照します。ここでは、"eastus""westus2" になります。

このように、for_each を使うことで、複数のリソースを一度に動的に作成することができます。

上記は辞書形式のループでしたが、文字列のループも可能です。

resource "aws_iam_user" "the-accounts" {
    for_each = toset(["Todd", "James", "Alice", "Dottie"])
    name     = each.key
}

eachオブジェクトについて

for_eachが設定されているブロックでは、各要素への参照がeach式できるため、各インスタンスの構成を配列でカスタマイズできます。 このオブジェクトには2つの属性があります。

https://developer.hashicorp.com/terraform/language/meta-arguments/for_each

page:https://minegishirei.hatenablog.com/entry/2024/06/10/202721