JSON / YAML → Terraform HCL
Terraform HCL インフラストラクチャエンジニアリング

JSON / YAML から Terraform HCL 変数・Locals 変換ジェネレーター

JSON および YAML データを Terraform HCL の変数型制約 (type = object({...}))、デフォルト値、locals ブロック、terraform.tfvars 定義へ自動変換します。

サーバー送信ゼロ
Terraform 1.3+ optional()
プリセット:
入力ペイロード (JSON / YAML)yaml
variable "app_config" {
  description = "Auto-generated Terraform variable constraint for app_config"
  type = object({
    cidr_block           = string
    enable_dns_hostnames = bool
    enable_dns_support   = bool
    max_azs              = number
    nat_gateways         = list(string)
    subnets              = list(object({
      az             = string
      cidr           = string
      is_public      = bool
      name           = string
      route_table_id = string
    }))
    tags                 = map(string)
    vpc_name             = string
  })
  default = {
    cidr_block           = "10.100.0.0/16"
    enable_dns_hostnames = true
    enable_dns_support   = true
    max_azs              = 3
    nat_gateways         = ["nat-08127394821a", "nat-09823412344b"]
    subnets              = [
      {
        az             = "us-east-1a"
        cidr           = "10.100.1.0/24"
        is_public      = true
        name           = "public-1a"
        route_table_id = "rtb-01a9b2c3d4"
      },
      {
        az             = "us-east-1b"
        cidr           = "10.100.2.0/24"
        is_public      = true
        name           = "public-1b"
        route_table_id = "rtb-01a9b2c3d4"
      },
      {
        az             = "us-east-1a"
        cidr           = "10.100.10.0/24"
        is_public      = false
        name           = "private-app-1a"
        route_table_id = "rtb-09f8e7d6c5"
      },
      {
        az             = "us-east-1b"
        cidr           = "10.100.11.0/24"
        is_public      = false
        name           = "private-app-1b"
        route_table_id = "rtb-09f8e7d6c5"
      }
    ]
    tags                 = {
      CostCenter  = "infra-0091"
      Environment = "production"
      ManagedBy   = "terraform"
      Owner       = "cloud-platform-team"
    }
    vpc_name             = "prod-useast1-vpc"
  }
}
スキーマ複雑度
13 推論されたフィールド階層深度 2
オプショナル属性数
0 検出された任意フィールドv1.3+ 有効
出力方言
4 出力形式.tf / .tfvars / .json

100% クライアントサイドAST合成

JSONおよびYAMLの構文解析、ASTツリー走査、Terraform HCL型合成はすべてブラウザメモリ上でローカルに実行され、外部通信やテレメトリ送信は一切行われません。

Terraform 1.3+ 準拠とオプショナル属性

未定義またはnull許容フィールドを自動検出し、標準の optional(type, default) 構文でラップすることで、Terraform plan実行時の型エラーを未然に防止します。

マルチフォーマットIaCエクスポート

本番環境に対応した variables.tf 型制約、terraform.tfvars 値定義、locals.tf 設定ブロック、および tfvars.json ファイルをシームレスに出力します。

技術リファレンス&アーキテクチャガイド

JSON / YAML から Terraform HCL 変数・Locals 生成ツール — リファレンスガイド

JSON および YAML データを Terraform HCL の変数型制約 (type = object({...}))、デフォルト値、locals ブロック、terraform.tfvars 定義へ自動変換します。

主要パラメータ&設定項目

source_formatstring

変換元データのパーサー形式を指定します ('json' または 'yaml')。

初期値: "json"
target_modestring

出力する HCL 構造を指定します: 'variable' (型制約とデフォルト値付き変数)、'locals' (モジュール内計算式)、または 'tfvars' (変数値の直接代入)。

初期値: "variable"
variable_namestring

生成される HCL 変数ブロックまたは locals の識別子名。

初期値: "app_config"
use_optional_attributesboolean

Terraform 1.3 以降の optional() 属性構文を有効にし、null 許容または省略可能なオブジェクトキーにデフォルト値を設定します。

初期値: true
indent_spacesnumber

生成される HCL コードブロックのインデント文字数(スペース)。

初期値: 2

プロの活用テクニック&推奨設定

Terraform 1.3+ の optional() 型修飾子を活用する

複雑なネスト構造を持つオブジェクト型では、非必須キーに optional(type, default_value) を適用します。これによりランタイム時の null 参照エラーを防ぎ、モジュール内での冗長な coalesce() 呼び出しを削減できます。

異種データ型の配列には tuple を適用する

すべての要素が同型である JSON 配列は list(string) などに変換されますが、異なる型や構造が混在している場合は list(any) への安易なフォールバックを避け、tuple([type1, type2]) を指定して厳格な型安全性を維持してください。

CI/CD 自動化では *.auto.tfvars.json を直接利用する

デプロイパイプラインで動的な JSON 設定を生成する場合、HCL を再構築する代わりに *.auto.tfvars.json として書き出すと、Terraform が自動的に読み込むためパーサーエラーのリスクを回避できます。

ハイフンを含むキー名は必ずダブルクォートで囲む

HCL の識別子構文ではハイフンは減算演算子とみなされる場合があります。Kubernetes のラベルや AWS タグなどハイフンを含むキーは、必ず "app-service" = string のように引用符でエスケープしてください。

よくあるトラブルと解決策

エラー: Invalid attribute name - 識別子のハイフンによる構文異常

HCL オブジェクト内で引用符のないハイフン付きキーは演算子として解釈されます。該当するキーをダブルクォートで囲み、"service-mesh" = object({...}) の形式に修正してください。

null 値を渡した際の Type mismatch (型不一致) エラー

Terraform のオブジェクト属性はデフォルトで null 不可です。型定義に optional 修飾子を付与するか (key = optional(string))、変数ブロック自体に nullable = true を明示的に指定してください。

複数行 YAML スカラーのインデント崩れによるパースエラー

YAML の改行演算子 (| または >) の直後の行で半角スペース2文字のインデントが揃っているか確認してください。タブ文字 (\t) が混入していると YAML 仕様違反となります。

よくある質問 (FAQ)

JSON/YAML から Terraform HCL 型はどのように推論されますか?▼

文字列は string、数値は number、論理値は bool にマッピングされます。要素の型が揃った配列は list(type)、異なる型が混在する配列は tuple([...])、値の型が同一のマップは map(type)、個別のキーを持つオブジェクトは厳格な object({...}) 型に自動変換されます。

variable ブロックと locals ブロックの使い分けは何ですか?▼

variable ブロックは外部から値を受け取るための公開インターフェース(型制約、説明文、デフォルト値)を定義します。locals ブロックはモジュール内部で完結する計算式や固定値を定義するプライベートスコープです。

なぜ type = any ではなく厳格な type = object({...}) を使うべきですか?▼

type = any を使用すると Terraform による事前コンパイル時の型検証が行われず、terraform apply 時に予期せぬエラーが発生します。object({...}) 型を使用することで、terraform validate による早期エラー検知と IDE 補完が有効になります。

生成された HCL コードは Terraform Cloud や Terragrunt でそのまま使用できますか?▼

はい。生成された variable 定義は variables.tf に、デフォルト値や tfvars 出力は terraform.tfvars や terragrunt.hcl の inputs ブロックにそのまま配置して利用可能です。

関連するおすすめ開発ツール

すべてのツール →
OpenAPI・Swagger GraphQL SDL スキーマ変換 技術リファレンス開発ツール

OpenAPI 3.0/3.1およびSwagger 2.0のRESTエンドポイント、リクエストボディ、JSON SchemaをGraphQL SDLの型定義、Query、Mutation、Inputへマッピングする開発者向け技術仕様書。

ツールを開く→
SQL DDLからTypeBox TypeScriptスキーマへの変換ツール開発ツール

SQLのCREATE TABLE文を解析し、Type.Object、Type.String、Type.Number、Type.Optionalを用いた@sinclair/typeboxランタイム検証スキーマとStatic型定義へ高速変換します。

ツールを開く→
cURL から Rust (reqwest & tokio) コードジェネレーター開発ツール

cURL コマンドを、reqwest、serde_json、カスタムヘッダー、Tokio 非同期ランタイムを活用した慣用的で安全な Rust HTTP クライアントコードへ瞬時に変換します。

ツールを開く→
cURL to Ruby (Net::HTTP & Faraday) コード生成ツール開発ツール

cURLコマンドをNet::HTTP、URI、Faraday、JSON解析を活用したクリーンで慣用的なRubyコードへ瞬時に変換します。

ツールを開く→
Kubernetes NetworkPolicy 生成ツール開発ツール

宣言的Kubernetes NetworkPolicyマニフェスト、ゼロトラストPod分離、名前空間インgress/egressルール、CIDR ipBlock、複数ポート定義を生成するための開発者向けガイド。

ツールを開く→
Kubernetes RBAC Role & ClusterRoleBinding YAML 生成ツール開発ツール

APIグループ、リソース操作(verbs)、Subject(ServiceAccount/User/Group)を指定して、Kubernetes RBACのRole、ClusterRole、RoleBinding、ClusterRoleBindingマニフェストを迅速に設計・生成します。

ツールを開く→