変数
HCL2で利用可能な変数は2種類
- locals : ローカル変数。プライベートな変数で外部から変更はできない。
- variables : 外部から変更可能な変数。コマンドライン実行時にオプションやファイル指定で上書きできる。
locals の定義と参照
「localsブロックで」定義して「${local.【Name】}」で参照
locals { project = "testylog" env = "dev" } resource <RESOURCE_TYPE> <RESOURCE_NAME> { ... tags = { Name = "${local.project}-${local.env}-vpc" } output<OUTPUT_NAME> { ... } }
variablesの定義と参照
「variableブロック」で変数を1つ定義し、「${var.【NAME】}」で参照
variable "project" { type = string default = "tastylog" } resource <RESOURCE_TYPE> <RESOURCE_NAME> { ... tags = { Name = "${var.project}-dev-vpc" } output<OUTPUT_NAME> { ... } }
データ型
HCLで扱えるデータ型、
- プリミティブ
- string : Unicode文字列
- number : 数値。整数と少数の両方を表現
- bool : true/falseの2つ
- 構造体
- object : キーバリュー型データ
- tuple : 各列の方が決まっている配列
- コレクション
- list : 特定の方で構成される配列
- map : キーが文字列の配列
- set : 値の重複がない配列
プリミティブ
基本となるデータ型
variable "message" { type = string default = "Hello World" } variable "max_count" { type = number default = 10 } variable "is_enable" { type = bool default = true }
Object
キーバリュー形式で定義されるデータ型。キーごとに方の定義が可能。
variable "obj_sample" { type = object({ name = string age = number }) default = { name = "tabaka" age = 28 } }
username = var.obj_sample.name
tuple
配列のN番目にどういった型を使うかが決められたデータ型。下の例だと0要素目が文字列、1要素目が数値。
variable "tuple_sample" { type = tuple([ string, number ]) default = ["tanaka", 28] }
username = var.tuple_sample[0]
list
すべて同じ型で定義される配列
variable "list_sample" { type = list(string) default = ["tanaka", "sato"] }
username = var.list_sample[0]
map
キーが文字列、バリューが指定された方となる配列。
variable "map_sample" { type = map(string) default = { "High" = "m5.2xlarge" "Mid" = "m5.large" "Low" = "t2.micro" } }
instance = var.map_sample.High
set
バリューの重複が排除される配列
variable "set_sample" { type = set(string) default = [ "tanaka", "sato", "tanaka", "sato" ] }
[for itm in var.set_samle : itm] → toset([ "sato", "tanaka" ])