開発日報

窓際エンジニアの開発備忘。日報は嘘です。

【忘備】Terraform基本構文 ~外部から変数値を与える~

変数の上書き方法

外部から変数値を与える方法は3種類

  • 環境変数環境変数へあらかじめ設定してある値を利用
    • TF_VAR_【Name】
  • 変数ファイル:あらかじめ決められた変数ファイル名のファイルに指定
    • terraform.tfvars
  • コマンド引数:以下のコマンド引数で指定された値を利用
    • -var 【NAME】=【NAME】
    • -var-file【FILE_PATH】

3種類の方法で同じ変数を並行して指定することも可能。

ただしその際は環境変数 < 変数ファイル < コマンド引数の順で上書き(強い)される。

また、同じ方法で変数の定義が重複した場合は原則として後に定義した変数が優先(つまりあと勝ち)される。

環境変数を使った上書き

ソースコード(main.tf)

variable "message" {
  type   = string
  default = "nothing"
}

環境変数定義、ビルド実行

export TF_VAR_message="Hello World !"
terraform apply

変数ファイルを使った上書き

ソースコード

variable "message" {
  type   = string
  default = "nothing"
}

変数ファイル(terraform.tfvars) ※ 変数ファイルの拡張子は".tfvars"

message = "Hello World!"

ビルド実行

terraform apply

コマンドを使った上書き

ソースコード(main.tf)

variable "message" {
  type   = string
  default = "nothing"

変数を指定したコマンド実行

terraform apply -var message="Hello World!"

変数の上書き使い分け

  • 環境変数:実行ログに残らない

    • 鍵情報など(ファイルとして残したくない情報)
    • 環境依存情報(dev stg prd)など
    • 運用管理サーバーで作業するような厳格な場合
  • 変数ファイル:git管理できる=構成管理として残せる

    • ロジックとデータ(変数)を切り離すことで変更箇所が分かりやすくなる。
    • 基本的にはこちらの方法(変数は別ファイルで外だし)がおすすめ
  • コマンド引数:実行ログに残る

    • テストで部分的に変更したい。
    • デバッグで一部変更したい。
    • など、一時的な利用