Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

Terraform作業ディレクトリの容量を節約するには?

問題

ディスク領域不足のアラートが出た。

terraformerのimportを何度も繰り返したせいで、作業ディレクトリ全部にTerrafromのプロバイダープラグインがダウンロードされていたのが原因。

サマリ―

Terraform作業ディレクトリの容量を節約するには、プラグインをキャッシュするとよい。

作業ログ

作業ログを残しておきます。

ホームディレクトリに.terraformrcを作成し、キャッシュディレクトリを設定する。

$ cd    # ホームディレクトリに移動
$ cat << EOF > .terraformrc

plugin_cache_dir   = "$HOME/.terraform.d/plugin-cache"
EOF

作業ディレクトリの使用容量を確認しておく。

$ du -hs
235M    .

プラグインを削除。

$ rm -rf .terraform/

terraform initでエラーが発生。

$ terraform init
There are some problems with the CLI configuration:
╷
│ Error: The specified plugin cache dir /home/jhashimoto/.terraform.d/plugin-cache cannot be opened: stat /home/jhashimoto/.terraform.d/plugin-cache: no such file or directory
│
╵

公式ドキュメントに情報があった。

CLI Configuration - Terraform by HashiCorp

This directory must already exist before Terraform will cache plugins; Terraform will not create the directory itself.

キャッシュディレクトリはTeraformが作成してくれると思ってたが、事前に作らないといけなかった。

ディレクトリを作成してリトライしたら、成功した。

$ mkdir -p "$HOME/.terraform.d/plugin-cache"
$ terraform init

Initializing the backend...

Initializing provider plugins...
- terraform.io/builtin/terraform is built in to Terraform
- Reusing previous version of hashicorp/aws from the dependency lock file
- Using hashicorp/aws v3.68.0 from the shared cache directory

...

Terraform has been successfully initialized!
...

Using hashicorp/aws v3.68.0 from the shared cache directoryからキャッシュを利用しているのがわかる。

プラグインをキャッシュした分使用量が減っている。

$ du -hs
465K    .

念のためplanできるか確認。

$ terraform plan

...

You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.

実行環境

$ terraform --version
Terraform v1.0.9
on linux_amd64

ubuntu-20.04 on Windows 10 (WSL2)

参考