概要
今回は下記のUdemy動画講座を視聴しました。Terraformで使用できる変数について学習したのでそれらを自分なりに分かりやすくまとめてみたので、アウトプットとして記事に残しておきます。
講座について
こちらの講座は、AWSのリソース管理をTerraformを用いた方法で一から体系的に学べる講座になっています。
前半でTerraformの基本的な使用方法を解説し、後半ではAWS環境に実際にリソースを構築するハンズオンで構成されています。
言語について
まず、Terraformで使用される言語は HCL2 と呼ばれる言語です。
これはTerraformを提供するHashicorp社独自の言語になります。
下記のHashicorp社公式ページから言語について確認できますが、物量が多くて目当てのコードを探すのには時間がかかります。公式のドキュメントの読み方も動画講座内で解説していましたので、ぜひ参考にしてください。
変数とは
初めに、変数とは何かを再確認します。
変数とは、文字列や数字を入れておく箱とよく表現されます。
一つのファイルでproject-freddy
という名称が100回出てくるとして、
このfreddy
をchica
変えたいなら、100カ所すべて変えなければなりませんよね。そうなるとあまりにも大変でミスも多そうです。
その場合、freddy
の部分をあらかじめ適当な名前の変数の箱にしておくと、箱に何を入れるかを書き換えるだけですべての変更が終わりますし、また次に別の情報を入れる時もひと手間だけで済んで簡単です。
このように変更される可能性がある部分に中身を入れ替え可能な箱を設定することを変数といいます。
Terraformで使える変数について
今回学んだTerraformで使える変数についてまとめていきます。
Locals
ファイルに限定して動作する変数となり、ファイル外やコマンドなどから再定義ができない特徴を持ちます。
locals {
project = "demo" #変数名 = "値"
env = "env" #変数名 = "値"
}
上の例では緑色のproject
とenv
が変数名となり、=の後のdemo
とenv
が値になります。
このファイルで、locals以下に何度project
が出てきても、=の後のdemo
を変更するだけで一度に値を変更可能になるというわけですね。
Variable
別のファイルやコマンドから変数の中身(値)を変更可能で、基本的に変数を定義する際はこのコマンドを使用します。
Variableコマンドは種類が多いため分けて解説していきます。
プリミティブ
variableの最も基本的な形で、変数一つにつき一つのデータ型を指定して定義を行います。
variable "project" {
type = string #文字列を代入可能なデータ型
default = "demo"
}
variable "project" {
type = number #数字を代入可能なデータ型
default = 10
}
variable "project" {
type = bool #true,falseの真偽を代入可能なデータ型
default = true #trueもしくはfalse
}
上の例で、type
の後の記載がそれぞれ違うことが分かりますね。
これらはデータ型と呼ばれ、変数にどの形式の情報を入れることができるか定めています。
object
キーバリュー型のデータ型の一つで、一つの変数の中に複数のキーを設定でき、キーのデータ型も指定することができます。
variable "project" {
type = object({
name = string #キーのデータ型を指定
age = number #キーのデータ型を指定
})
default = {
name = "watanabe" #キーの値を指定
age = "22" #キーの値を指定
}
}
objectのいいところはキーに数字
や文字列
を指定できることです。
そのため、キーとバリューの組み合わせを自由度高く作成できます。
ちなみに、この変数をobjectを使用せずに書くとこうなります。
variable "name" {
type = string
default = "watanabe"
}
variable "age" {
type = number
default = "22"
}
サーバなどの設定値が多いリソースにも一つのvariable変数で対応でき、変数ファイルの記述が簡潔でより見やすくなるため、多用されるデータ型の一つです。
tuple
objectのように複数のデータ型と値を指定可能で、連続するデータのN番目のデータの型を指定できます。
variable "project" {
type = tuple([
string,number #1番目は文字列、2番目は数字のデータ型を指定
])
default = ["watanabe",22]
}
list
今度は連続するデータのデータ型を一括で指定可能なデータ型になります。
variable "project" {
type = list(string) #すべて文字列として指定
default = ["watanabe","horimoto"]
}
map
最後に、混同しやすいmap
ついてです。
まず、object
とmap
は2つともキーバリュー型の変数でよく似ているため混同されがちです。
map
の特徴は次の通りです。
・キーは必ず文字列となる。
・バリュー(値)はすべて同じデータ型となる。
variable "project" {
type = map(string) #データ型を文字列に一括指定
default = {
"High" = "m5.2xlarge"
"Mid" = "m5.large"
"Logh" = "t2.micro"
}
}
最後に
今回はTerraformで使用できるデータ型の代表的なものをまとめてみました。
個人的な学習の備忘録の点が強いので、見づらい部分があればコメントでご指摘いただけると幸いです。
本記事は以上で終わりですが、まだまだアウトプットしていくのでよろしくお願いします。