terraformで管理しているリソースが増えてきて、tfstateが肥大化してくると、
terraform planがどんどん遅くなり、待ってる間にtwitterを見てしまい、、、あれ?結局何をしていたのか忘れる。あるあるです。
そんな場合の根本的な対策は、適度な粒度にtfstateを分割していくんですけど、tfstateをいじるのはできなくはないけど、ちょっとめんどくさいです。
が、もっと手軽に高速化できる(かもしれない)小手先のテクニックがあります。
その魔法の言葉とは --parallelism
です。デフォルトは10並列で動いてますが、変更可能です。
呼び出すAPIやネットワーク構成などに依存するので、最適な値はケースバイケースですが、
一般的に扱うリソースが多い場合は、並列度を上げると高速化が期待できそうです。
まずは比較のために、素の状態の実行時間を計測しておきます。
$ time terraform plan
terraform plan 14.48s user 4.79s system 27% cpu 1:09.17 total
1分ぐらいかかってますね。並列度を30にあげてみると、
$ time terraform plan --parallelism=30
terraform plan --parallelism=30 13.82s user 4.10s system 57% cpu 30.962 total
なんと、30秒ぐらいで終わりました。たったこれだけで2倍高速化できました。わーい。
毎回指定するのはめんどくさいので、環境変数 TF_CLI_ARGS_plan
に設定できます。
$ export TF_CLI_ARGS_plan="--parallelism=30"
$ time terraform plan
terraform plan 13.88s user 3.98s system 56% cpu 31.868 total
環境変数でも効いてますね。
applyの場合は、環境変数 TF_CLI_ARGS_apply
です。
どれぐらいの並列度が最適なのかは場合によりけりなのだけど、めっちゃ簡単なので試してみて損はないですね。
たまたまTerraform のissueを眺めてたら見つけたんだけど、
別に魔法の言葉でもなんでもなくて、普通に公式ドキュメントに書いてありましたね。
普通にコマンドのヘルプにも出てるし、なんで今までこれ気づかなかったのか。
参考: