web-dev-qa-db-ja.com

JSON文字列をテラフォームマップにデコードする

HTTPデータソース を使用して、内部サービスからデータを取得しています。サービスはJSONデータを返します。

返されたJSONデータを補間してデータを検索することはできません。

例えば:

モジュールA

data "http" "json_data" {
    url = "http://myservice/jsondata"

    # Optional request headers
    request_headers {
       "Accept" = "application/json"
    }
}

output "json_data_key" {
    value = "${lookup(data.http.json_data.body, "mykey")}"
}

main.tf

provider "aws" {
   region = "${var.region}"
   version = "~> 0.1"
}

module "moduleA" {
   source = "../../../terraform-modules/moduleA"
}

resource "aws_instance" "example" {
    AMI = "AMI-2757f631"
    instance_type = "${module.moduleA.json_data_key}"
}

ルックアップ関数は、JSONデータ内のキーの抽出に失敗します。

JSONデータをTerraformマップにデコードする方法はありますか?

10
Ofer Velich

OK、jsonレスポンスからmapを返すため、外部データを使用する方法であるようです。 https://www.terraform.io/docs/providers/external/data_source.html

terraformバージョンv0.10.6

5
Ofer Velich
data "external" "json" {
  program = ["echo", "${var.json}"]
}

output "map" {
  value = "${data.external.json.result}"
}
15
victor m

Terraformの0.12バージョン以降、jsondecode関数を使用してjsonをTerraformマップにデコードできます。詳細: https://www.terraform.io/docs/configuration/functions/jsondecode.html

上記のページの例:

> jsondecode("{\"hello\": \"world\"}")
{
  "hello" = "world"
}
> jsondecode("true")
true
1
mlysiu