HCLのマップとリストをJSONに変換する
HCLのマップ(オブジェクト)とリスト(配列)がどのようにJSONに変換されるかを学びます。マップリテラル、リストリテラル、Terraform設定での使用方法を解説します。
Basic Syntax
詳細な説明
HCLのマップとリスト
HCLにはマップ(キーバリューコレクション)とリスト(順序付きシーケンス)のネイティブ構文があり、JSONオブジェクトと配列に直接マッピングされます。このマッピングの理解はTerraformのJSON構文で作業する際に不可欠です。
HCLマップ構文
locals {
tags = {
Environment = "production"
Team = "platform"
Project = "devtoolbox"
ManagedBy = "terraform"
}
}
マップは波括弧とkey = value構文を使用します。JSONでは通常のオブジェクトになります:
{
"locals": {
"tags": {
"Environment": "production",
"Team": "platform",
"Project": "devtoolbox",
"ManagedBy": "terraform"
}
}
}
HCLリスト構文
variable "availability_zones" {
default = ["us-east-1a", "us-east-1b", "us-east-1c"]
}
variable "ports" {
default = [80, 443, 8080]
}
リストはカンマ区切り値の角括弧を使用し、JSON配列と同一です。
ネストされたコレクション
マップはリストを含むことができ、その逆も可能です:
locals {
services = {
web = ["nginx", "apache"]
db = ["postgres", "redis"]
}
}
マップ vs ブロック
よくある混乱の原因は、マップ属性とブロックの違いです。マップは=代入を使用しますが、ブロックは使用しません。JSONでは両方ともオブジェクトになりますが、Terraformでのセマンティクスの意味は異なります。
ユースケース
共通タグの定義、複数のCIDRブロックを持つセキュリティグループルールの設定、複雑なデータ構造を持つ変数デフォルトの設定、値のコレクションを使用するTerraform設定全般。