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設定全般。

試してみる — HCL ↔ JSON Converter

フルツールを開く