Terraform Cloudの変数(Variables)のカテゴリーの違いをざっくり図解してみた
Terraform Cloudの変数(Variables)は2種類あります。
- Environment Variables
- Terraform Variables
Terraform Cloudを使いはじめた方の中には、「2種類のVariablesの違いが分からない」となった方もいるのではないでしょうか。
違いを図を交えてざっくり説明します。
Terraform CloudのRun
Variablesの違いに入る前に、Terraform Cloudを使ったTerraformの実行環境についてです。
デフォルト(実行モード Remote)では、Terraform Cloud上でterraform apply
やterraform plan
といったTerraformのRunが行われます。
RUNの流れは以下になります。
- ユーザーやVCSがRUNをトリガー
- Terraform Cloud上で使い捨てのLinux VM起動
- VariablesがVMにセットされる
- 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の変数をざっくり図で説明してみました。
さらに詳細を知りたい方には以下がおすすめです。
- Workspace Variables - Terraform Cloud | Terraform | HashiCorp Developer
- Terraform CloudのWorkspaceに設定できる変数(Variables)の種別terraformとenvの違いを調べてみる | DevelopersIO