Terraform Cloudの変数(Variables)のカテゴリーの違いをざっくり図解してみた

Terraform Cloudの変数(Variables)のカテゴリーの違いをざっくり図解してみた

Clock Icon2023.09.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Terraform Cloudの変数(Variables)は2種類あります。

  • Environment Variables
  • Terraform Variables

Terraform Cloudを使いはじめた方の中には、「2種類のVariablesの違いが分からない」となった方もいるのではないでしょうか。

違いを図を交えてざっくり説明します。

Terraform CloudのRun

Variablesの違いに入る前に、Terraform Cloudを使ったTerraformの実行環境についてです。

デフォルト(実行モード Remote)では、Terraform Cloud上でterraform applyterraform planといったTerraformのRunが行われます。

RUNの流れは以下になります。

  1. ユーザーやVCSがRUNをトリガー
  2. Terraform Cloud上で使い捨てのLinux VM起動
  3. VariablesがVMにセットされる
  4. Terraformコマンド実行

Environment Variables

実行用のVMに設定される環境変数です。

exportコマンドを使用して、シェルに設定されます。

ユースケース)

  • 各種クラウドプロパイダーの認証情報(例: AWSアクセスキー、AWSシークレットアクセスキー)

Terraform Variables

tfファイル中のvarialbesで受け取る変数です。(tfvarsをイメージしてもらえれば、分かりやすいかと)

ユースケース)

  • 作成するリソースのパラメータ(EC2のスペック、EC2のサブネットID等)

Tips: Variablesのカテゴリー設定ミス

よくあるミスとして、Variables設定時にVariablesのカテゴリーを間違えるということがあります。

以下はTFC_AWS_RUN_ROLE_ARNのVariablesのカテゴリーを間違ったエラーです。

╷
│ Warning: Value for undeclared variable
│ 
│ The root module does not declare a variable named "TFC_AWS_RUN_ROLE_ARN"
│ but a value was found in file
│ "/home/tfc-agent/.tfc-agent/component/terraform/runs/run-XXXXXX/terraform.tfvars".
│ If you meant to use this value, add a "variable" block to the
│ configuration.
│ 
│ To silence these warnings, use TF_VAR_... environment variables to provide
│ certain "global" settings to all configurations in your organization. To
│ reduce the verbosity of these warnings, use the -compact-warnings option.
╵

本来は、TFC_AWS_RUN_ROLE_ARNはVMの環境変数に設定する必要があるため、Environment Variablesで設定する必要があります。 Terraform Variablesで設定したときに上記のエラーがでました。

Terraform Variablesで設定した値は、VM内のterraform.tfvarsに保存されているようです。(エラーの6行目)

おそらく、terraform.tfvarsには以下の記述があります。(VMに入ることはできないため、直接は確認不可)

TFC_AWS_RUN_ROLE_ARN="XXXXX"

しかし、tfファイル側ではTFC_AWS_RUN_ROLE_ARNを変数として宣言していません。

そのため、未宣言の変数がある旨のエラーがでています。

仮にtfファイルに以下の記述をしたら、エラー自体はでなくなります。(今回のケースではAWS認証情報を受け取れないため、リソースのデプロイはできませんが)

variable TFC_AWS_RUN_ROLE_ARN {
    type     =  string
}

Authenticate providers with dynamic credentials | Terraform | HashiCorp Developer

QA: Terraform Variablesはどんなときに使うの?

Q. tfvarsを使って環境ごとの違いを吸収して運用しています。tfvarsで事足りるため、Terraform Variablesを使う必要が無いかと思ったのですが、どういったときに使いますか?

A. Terraform CloudではWorkspace内で、tfvarsを指定することができません。Terraform Variablesはtfvarsの代替として使います。 詳細は以下をご確認ください。

おわりに

Terraform Cloudの変数をざっくり図で説明してみました。

さらに詳細を知りたい方には以下がおすすめです。

あわせて読みたい記事

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.