Skip to content

Terraform で JSON ファイルを扱う

Terraform を利用する際、一般的には HCL (HashiCorp Configuration Language) 形式で記載された .tf (Template File) を利用するケースをよく見かけます。 ですが、Terraform 自体は HCL = .tf ファイル以外にも JSON を扱うことも出来ます。 .tf ファイルを JSON 形式に変換するには HashiCorp 公式の hcldec を使う方法もありますが、より手軽に OSS の tmccombs/hcl2json を利用する方法もあります。 今回はこの hcl2json を利用し、HCL を JSON 形式に変換する方法をメモしておきます。 尚、今回は Ubuntu 22.04LTS 上でテストしました。

注意点

2 点、注意点があります。

  1. hcl2json は HCL -> JSON 形式への変換は可能ですが、逆向きになる JSON -> HCL 形式への変換は出来ないようです。 「相互変換は出来ない」点を理解して利用する必要があります。
  2. Terraform で利用する JSON ファイルは拡張子を .tf.json にする必要があります (.json だけにすると Terraform に無視され、処理されません)。

インストール

GitHub のリリースページからバイナリをダウンロードし、インストールします。

1
2
curl -L https://github.com/tmccombs/hcl2json/releases/download/v0.3.6/hcl2json_linux_amd64 -o /usr/local/bin/hcl2json
chmod 755 /usr/local/bin/hcl2json

変換前の .tf ファイル

今回、検証に用いるのは 前回 利用した "変換前の .tf ファイル" は以下です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
variable "prefix" { default = "TEST_" }

provider "aws" {
  access_key = "ACCESS-KEY"
  secret_key = "SECRET-KEY"
  region     = "ap-northeast-1"
}

# VPC

resource "aws_vpc" "vpc-1" {
  cidr_block = "10.0.0.0/16"
  tags       = { Name = "${var.prefix}vpc" }
}

HCL -> JSON 形式へ変換する

HCL -> JSON 形式への変換は簡単です。 hcl2json の引数として JSON ファイルを指定すれば標準出力に JSON が出力されます。 hcl2json にはオプションがほぼ存在しないようなので、ファイルに保存したい場合は標準出力をファイルへリダイレクトします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# hcl2json main.tf
{
    "provider": {
        "aws": [
            {
                "access_key": "ACCESS-KEY",
                "region": "ap-northeast-1",
                "secret_key": "SECRET-KEY"
            }
        ]
    },
    "resource": {
        "aws_vpc": {
            "vpc-1": [
                {
                    "cidr_block": "10.0.0.0/16",
                    "tags": {
                        "Name": "${var.prefix}vpc"
                    }
                }
            ]
        }
    },
    "variable": {
        "prefix": [
            {
                "default": "TEST_"
            }
        ]
    }
}

Terraform で JSON ファイルを利用する

冒頭の「注意点」に記載した通り、ファイルの拡張子を .tf.json にすれば、HCL ファイルと同様に JSON 形式のファイルを Terraform で扱うことが出来ます。