変数
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"
])