AWS EC2インスタンスHCLをJSONに変換する

タグ、ブロックデバイス、ユーザーデータを含むTerraform AWS EC2インスタンスリソースをHCLからJSON形式に変換します。

Resources

詳細な説明

AWS EC2インスタンス設定

aws_instanceリソースは最も一般的なTerraformリソースの1つです。HCLからJSONへの変換は、リソースブロック、ネストされたブロック、マップ、文字列値がどのように変換されるかを示します。

完全なEC2 HCLの例

resource "aws_instance" "web" {
  ami                    = "ami-0c55b159cbfafe1f0"
  instance_type          = "t3.micro"
  key_name               = "my-key-pair"
  vpc_security_group_ids = ["sg-abc123"]
  subnet_id              = "subnet-xyz789"

  tags = {
    Name        = "web-server"
    Environment = "production"
  }

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

  metadata_options {
    http_endpoint = "enabled"
    http_tokens   = "required"
  }
}

JSONでの等価形式

TerraformのJSON構文では、3レベルのネスト(resource > リソースタイプ > リソース名)が設定本体を囲みます。vpc_security_group_idsのようなリストはJSON配列のまま残ります。root_block_devicemetadata_optionsのようなネストされたブロックはネストされたJSONオブジェクトになります。

重要な考慮事項

  • tagsマップ: tags属性はブロックではなくマップなので、HCLでは=代入を使用し、通常のJSONオブジェクトになります。
  • セキュリティグループID: リスト値はJSONでも配列構造を維持します。
  • ネストされたブロック: root_block_devicemetadata_optionsはブロック(=記号なし)であり、ネストされたオブジェクトになります。
  • IMDSv2: http_tokens = "required"を持つmetadata_optionsブロックはIMDSv2を強制し、セキュリティのベストプラクティスです。

ユースケース

プログラマティックなインフラプロビジョニングのためにEC2インスタンス定義をJSONに変換する場合、デプロイスクリプトからTerraform設定を生成する場合、CI/CDパイプラインでHCLとJSON形式間のインフラ定義を移行する場合。

試してみる — HCL ↔ JSON Converter

フルツールを開く