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_deviceやmetadata_optionsのようなネストされたブロックはネストされたJSONオブジェクトになります。
重要な考慮事項
- tagsマップ:
tags属性はブロックではなくマップなので、HCLでは=代入を使用し、通常のJSONオブジェクトになります。 - セキュリティグループID: リスト値はJSONでも配列構造を維持します。
- ネストされたブロック:
root_block_deviceとmetadata_optionsはブロック(=記号なし)であり、ネストされたオブジェクトになります。 - IMDSv2:
http_tokens = "required"を持つmetadata_optionsブロックはIMDSv2を強制し、セキュリティのベストプラクティスです。
ユースケース
プログラマティックなインフラプロビジョニングのためにEC2インスタンス定義をJSONに変換する場合、デプロイスクリプトからTerraform設定を生成する場合、CI/CDパイプラインでHCLとJSON形式間のインフラ定義を移行する場合。