はじめに
udemyを使ってTerraformの勉強をしたので、Terraformで扱える変数とデータ型についての学習備忘録です。
HCL2とは
Terraformは、HCL2言語で書きます。
HCL2とは、the HashiCorp configuration language
です。
コメントの書き方
# コメントは#で書ける
ブロックタイプとは
下記のコードで、resource部分をブロックタイプ
と言います
resource "aws_instance" "hello-world" {
ブロックタイプまとめ
種類 | 説明 |
---|---|
locals | 外部から変更できない変数 |
variables | 外部から変更できる変数 |
terraform | terraformの設定 |
provider | プロバイダ |
data | terraform管理していないリソースを参照する |
resource | terraform管理対象となるリソース |
output | 外部から参照できるようにする値 |
localsの定義
localsブロック
で定義して、${local.<NAME>}
で参照します
locals {
name = "HelloWorld"
}
resource "aws_instance" "hello-world" {
ami = "ami-0ce107ae7af2e92b5"
instance_type = "t2.micro"
tags = {
Name = "${local.name}-ec2"
}
}
variablesの定義
variablesブロック
で定義して、${var.<NAME>}
で参照します
# variable <変数名>
variable "name" {
type = string # 変数の型
default = "HelloWorld" # デフォルト値
}
resource "aws_instance" "hello-world" {
ami = "ami-0ce107ae7af2e92b5"
instance_type = "t2.micro"
tags = {
Name = "${var.name}-ec2"
}
}
HCL2で扱えるデータ型
プリミティブ
string
: Unicode文字列
number
: 数値。整数と少数の両方を表現する
bool
: true/false
variable "string" {
type = string # 変数の型
default = "HelloWorld" # デフォルト値
}
variable "number" {
type = number # 変数の型
default = 10 # デフォルト値
}
variable "bool" {
type = bool # 変数の型
default = true # デフォルト値
}
構造体
object({<NAME>=<TYPE>, ...})
: キーバリュー型データ
# 定義
variable "object_sample" {
type = object({
name = string
age = number
})
default = {
name = "sasayoshi"
age = 100
}
}
# 参照
Name = ${var.object_sample.name}
tuple([<TYPE>, ...])
: 各列の型が決まっている配列
# 定義
variable "tuple_sample" {
type = tuple([
string, number
])
default = ["sasayoshi", 1000]
}
# 参照
Name = "${var.tuple_sample[0]}"
コレクション
list(<TYPE>)
: 特定の型で構成される配列
# 定義
variable "list_sample" {
type = list(string)
default = ["hoge", "hogehoge"]
}
# 参照
Name = "${var.list_sample[0]}"
map(<TYPE>)
: キーが文字列の配列
# 定義
variable "map_sample" {
type = map(string)
default = {
"High" = "m5.2xlarge"
"Mid" = "m5.large"
"Low" = "t2.micro"
}
}
# 参照
instance_type = var.map_sample.High
set(<TYPE>)
: 値の重複がない配列
# 定義
variable "set_sample" {
type = set(string)
default = [
"tanaka",
"sato",
"tanaka",
"sato"
]
}
# 参照
[for itm in var.set_samle : itm]
→ toset([
"sato",
"tanaka"
])
以上です。今日は、Terraformで扱える変数とデータ型をまとめてみました。