ネストされたHCLブロックをJSONに変換する

ネストされたHCLブロックがどのようにネストされたJSONオブジェクトに変換されるかを理解します。provisioner、lifecycle、connectionなどの内部ブロックを解説します。

Basic Syntax

詳細な説明

HCLのネストされたブロック

HCLはブロック内にブロックをネストすることをサポートしています。各ネストされたブロックは親内のネストされたJSONオブジェクトになります。このパターンはTerraformのprovisionerlifecycleconnectiondynamicブロックなどの設定セクションで一般的です。

HCLの例

resource "aws_instance" "web" {
  ami           = "ami-abc123"
  instance_type = "t3.medium"

  root_block_device {
    volume_size = 50
    volume_type = "gp3"
    encrypted   = true
  }

  lifecycle {
    create_before_destroy = true
    prevent_destroy       = false
  }
}

ネストの仕組み

JSONでは、ネストされたブロックは親ブロックのオブジェクト内のネストされたオブジェクトになります。ブロックタイプ名がキーになり、ブロック本体が値オブジェクトになります。

{
  "resource": {
    "aws_instance": {
      "web": {
        "ami": "ami-abc123",
        "instance_type": "t3.medium",
        "root_block_device": {
          "volume_size": 50,
          "volume_type": "gp3",
          "encrypted": true
        },
        "lifecycle": {
          "create_before_destroy": true,
          "prevent_destroy": false
        }
      }
    }
  }
}

同一タイプの複数ブロック

同じタイプの複数ブロック(例:複数のprovisionerブロック)が存在する場合、JSON配列にまとめられます。単一ブロックはオブジェクトのまま残ります。

ネストの深さ制限

ネストの深さに実用上の制限はありません。ブロックはブロックを含むブロックを含むことができ、JSON出力はネスト構造を忠実に反映します。

ユースケース

ブロックデバイスマッピング付きのAWS EC2インスタンス、コンテナ設定付きのECSタスク定義、ライフサイクルルールやプロビジョナーを使用するリソースなど、複雑なネスト設定を持つTerraformリソースで作業する場合。

試してみる — HCL ↔ JSON Converter

フルツールを開く