概要
前回に引き続き、今回もTerraform触ってみる。 今回は設定ファイルに変数を使用し、コマンド実行時に外から値を注入してみる。
前回の記事はこちら
Terraformで設定ファイルに変数を使用する
公式的なサイトはこちら。 HashCorp Learn - Define Input Variables
事前準備
前回同様、任意の場所フォルダを作成する。
$ mkdir terraform-example $ cd terraform-example
以下の内容で設定ファイル main.tf
を作成する。
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 2.70" } } } provider "aws" { profile = "default" region = "ap-northeast-1" } resource "aws_instance" "example" { ami = "ami-830c94e3" instance_type = "t2.micro" }
準備おっけー。
変数定義ファイルの作成と参照
設定ファイル main.tf
と同じ場所に、以下の内容で変数定義ファイル variables.tf
を作成する。
ここで変数として定義しておくことで、 terraform apply
コマンド実行時にオプションで変数に値を割り当てることができる。
変数の値を指定していない場合は variables.tf
で定義した default 値が使用される。
variables "region" { default = "ap-northeast-1" }
これで設定ファイル main.tf
の中で変数の値を参照できるようになった。
設定ファイル main.tf
を以下のように編集する。
provider "aws" { profile = "default" - region = "ap-northeast-1" + region = var.region }
変数への値割当て
上述したように terraform apply
コマンド実行時にオプションで変数に値を割り当てることができる。
以下では region
という変数に ap-northeast-1
という値を割り当てている。
$ terraform apply -var 'region=ap-northeast-1'
また、変数への値の割当をファイルから行うこともできる。
以下の内容の terraform.tfvars
というファイルを作成する。
terraform.tfvars
は terraform apply
コマンド実行時にデフォルトとして自動で読み込まれる。
region = "ap-northeast-1"
なお terraform.tfvars
ではなく my-variables.tfvars
といった任意の名前をつけたとき、 以下のように terraform apply
コマンド実行時にオプションでファイルを指定することで、ファイルに記述された値を変数に割り当てることができる。
$ terraform apply -var-file 'my-variables.tfvars'
変数のタイプ
変数には List や Map を使用することができる。
List
こちらが変数の定義。
variable "cidrs" { default = [] }
こちらが値の割当て。
cidrs = [ "10.0.0.0/16", "10.1.0.0/16" ]
Map
こちらが変数の定義。
variable "amis" { type = "map" default = { "us-east-1" = "ami-b374d5a5" "us-west-2" = "ami-fc0b939c" } }
こちらが値の割当て。
resource "aws_instance" "example" { ami = var.amis[var.region] instance_type = "t2.micro" }
おわりに
Terraformの設定ファイルに変数を用いて、値を外部から注入してインフラを構築できるようにはなった。 ファイル内に値を直書きするのもいいけど、それだと再利用性低いので、可変な値は変数化して使いまわしできるようにしていくとよさそう。