Terraform Cloudで「Custom parallelism values are currently not supported」というエラーが出た場合の対処法
レアケースだとは思いますが、今後同じ事象に遭遇された方のためにブログ化しておきます。
エラーが発生した状況
Terraformのversionは1.4.0です。
Terraform CloudをCLI-driven workflowで使おうとして、ローカルからterraform apply
やterraform plan
コマンドを叩いたところ、以下のエラーになりました。planもapplyもできません。
% terraform apply ╷ │ Error: Custom parallelism values are currently not supported │ │ Terraform Cloud does not support setting a custom parallelism value at this time. │
原因
TF_CLI_ARGS
やTF_CLI_ARGS_plan
、TF_CLI_ARGS_apply
という環境変数を設定していませんか?設定している場合、値として--parallelism=30
みたいなものが入っていないでしょうか?これが原因です。
これらの環境変数は、各種TerraformのCLIコマンド実行時にオプションを追加するのと同じ効果を与えます。TF_CLI_ARGS
はTerraformコマンド全般に、TF_CLI_ARGS_plan
はterraform plan
だけ、TF_CLI_ARGS_apply
はterraform apply
コマンドだけに影響を与えます。
例えばexport TF_CLI_ARGS="-input=false"
とすると以後のTerraformコマンドで-input=false
オプションを常時指定しているのと同義になり、export TF_CLI_ARGS_plan="-input=false"
とすると以後のterraform plan
コマンド全てで-input=false
オプションを指定しているのと同義になります。
parallelism
オプションは、並列処理数を指定するオプションです。デフォルトは10です。つまりデフォルトでは状態確認、プロビジョニングなどの各リソースに対する処理が最大で10リソース並列で行われます。
なのですが、Terraform Cloudではこのparallelism
オプションは(現在のところ)サポートされていません。そのため前述のエラーが出ました。
そもそも、私はこのTF_CLI_ARGS
系の環境変数をセットした覚えがなかったのですが…しばらくして思い出しました。確かにセットしていました。私はzshを使っているのですが、~/.zshrc
に以下コードを書いていました。
export TF_CLI_ARGS_plan="--parallelism=30" export TF_CLI_ARGS_apply="--parallelism=30"
こうすることで、zshのターミナルを新しく開くたびにterraform plan
とterraform apply
の並列実行数が上がった状態になり、planとapplyの処理が早くなります。そういえばずっと昔にこのコードを書いていましたわ。
対処法
TF_CLI_ARGS
系の環境変数をunsetします。
unset TF_CLI_ARGS_plan unset TF_CLI_ARGS_apply
もしくは、TF_CLI_ARGS
系の値からparallelismについての記述を削除しましょう。
export TF_CLI_ARGS_plan="-input=false" export TF_CLI_ARGS_apply="-input=false"
ただ、私はOSS版Terraformを使う時は高速化のためにこのparallelism
の設定を入れておきたいです。Terraform Cloudを使うときだけunsetしたいです。これを実現するためにdirenvを活用してみました。direnv、便利なのでご存じない方は一度以下のエントリを読んでみてください。
具体的にやったことは以下です。
1. 以後Terraform Cloudを使うディレクトリを決める
私は~/project/terraform-cloud
にしました。Terraformコードはこのディレクトリの直下ではなく、その下に子ディレクトリ、孫ディレクトリを作ってそこに書いてOKです。
2. 1で決めたディレクトリに.envrc
ファイルを作成する
.envrc
ファイルはdirenvで使うファイルで、direnvはこのファイルがカレントディレクトリもしくは親ディレクトリにないかチェックします。あった場合.envrc
に書かれているシェルスクリプトを実行します。
ですので、ここで先ほどのTF_CLI_ARGS
系の環境変数をunsetする処理を書いておきます。
unset TF_CLI_ARGS_plan unset TF_CLI_ARGS_apply
3. direnv allowする
状況ファイルを作成すると、direnvがエラーメッセージを出します。
direnv: error /Users/kazue.masaki/project/terraform-cloud/.envrc is blocked. Run `direnv allow` to approve its content
これに従い一度direnv allow
を実行してください。
ここまでやると以後以下が実現できます。
- 基本的に
parallelism=30
の設定が効いているのでterraformの実行を高速化できる - Terraform Cloudを実行する際は(↑で設定したディレクトリ以下で実行するので)
TF_CLI_ARGS
系の環境変数はunsetされており、エラーにならない