参考 : 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 }
for_each = tomap({...})
:for_each
は、Terraformがリソースの複数のインスタンスを作成するための構文です。tomap({...})
は、リストやマップを明示的にマップ型に変換するために使います。- この場合、
tomap
関数はキーと値のペアを含むマップを作成しています。
name = each.key
:name
プロパティはリソースグループの名前を指定します。each.key
は、for_each
ループ内の現在のマップエントリのキーを参照します。ここでは、"a_group"
や"another_group"
になります。
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