Terraform Cloudで「Custom parallelism values are currently not supported」というエラーが出た場合の対処法

2023.03.27

レアケースだとは思いますが、今後同じ事象に遭遇された方のためにブログ化しておきます。

エラーが発生した状況

Terraformのversionは1.4.0です。
Terraform CloudをCLI-driven workflowで使おうとして、ローカルからterraform applyterraform 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_ARGSTF_CLI_ARGS_planTF_CLI_ARGS_applyという環境変数を設定していませんか?設定している場合、値として--parallelism=30みたいなものが入っていないでしょうか?これが原因です。

これらの環境変数は、各種TerraformのCLIコマンド実行時にオプションを追加するのと同じ効果を与えます。TF_CLI_ARGSはTerraformコマンド全般に、TF_CLI_ARGS_planterraform planだけ、TF_CLI_ARGS_applyterraform 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 planterraform 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する処理を書いておきます。

~/project/terraform-cloud/.envrc

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されており、エラーにならない

参考情報