Terraform: -chdir= でディレクトリを移動せずに plan / apply する
terraform -chdir=foo/bar plan のように書くと、cd せずに別ディレクトリのルートモジュールを操作できる。環境ごとにディレクトリを分けた構成で便利。
どんなときに使う?
envs/dev、envs/prodのように環境別ディレクトリを持つリポジトリで、ルートから操作したいとき- Makefile・CI・エージェントからコマンドを流すとき(
cdの失敗や戻り忘れがなくなる)
やり方
terraform -chdir=envs/dev init
terraform -chdir=envs/dev plan
terraform -chdir=envs/prod apply-chdirは サブコマンドより前 に書くグローバルオプション(terraform plan -chdir=...は不可)- 指定したディレクトリに移動したのと同じように動く。
.terraform/やロックファイルもそのディレクトリのものが使われる
注意点
- 例外が 2 つある。CLI 設定ファイル(
.terraformrcなど)は-chdirより先に読まれる。また設定内のpath.cwdは 元の ディレクトリを返すので、ルートモジュールの場所が欲しいときはpath.rootを使う - 公式ドキュメントでも、スクリプトや自動化から Terraform を呼ぶ用途を想定したオプションとして紹介されている