はじめに
Terraformのキャッシュ設定方法について毎回ググっている気がするので、
設定方法を自分の備忘録がてらまとめておく。
Terraformを使用する際、terraform init時にrequired_providers定義に従って
必要なプラグインをインターネットからダウンロードすることになる。
ダウンロードしたプラグインはmain.tfやbackend.tfが置かれたtfstate単位のディレクトリ内の.terraform
配下に配置される。
以下のようなリソース単位でtfstateが管理されている場合、都度同じプラグインがダウンロードされ、各ディレクトリに格納されることになる。
.
├─00_modules
│ └─<モジュールファイル>
│
└─01_env
└─01_dev
└─eventbridge_stopec2
│ └─ .terraform
└─network
│ └─ .terraform
└─ec2
│ └─ .terraform
└─<その他のリソース>
└─ .terraform
AWSプラグインの場合、このファイルは1個数百MBだが、塵も積もればで次第にディスク容量を逼迫する。
ちょっとした検証環境用だからとAL2023でEBS 8GiBの小さなEC2インスタンス上でやっていたり、
CloudShell上からTerraformを実行していると、気が付いたら各ディレクトリ配下にあるプラグインによってディスクがいっぱいになる。
これに対する対策として、Terraformではキャッシュを使用することができる。
設定
設定パターンについては2通りあり、キャッシュ用ディレクトリを作成したうえで、
環境変数を設定する方法と、$HOME/.terraformrc
に設定を記載する方法がある。
1. キャッシュ用ディレクトリの作成(共通)
予めプラグインがダウンロードされるディレクトリを作成する。
mkdir $HOME/.terraform.d/plugin-cache
2-1. 環境変数の設定
以下のコマンドで環境変数を定義してexportする。
export TF_PLUGIN_CACHE_DIR=$HOME/.terraform.d/plugin-cache
2-2. terraformrcに記載
ホームディレクトリ配下にterraformrcファイルを作成してディレクトリを指定する。
vi $HOME/.terraformrc
# 以下の内容を記載
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
まとめ
このどちらかのパターンでキャッシュ用ディレクトリを指定すれば、
terraform init時に初回はキャッシュディレクトリにプラグインがダウンロードされ、
以降はキャッシュディレクトリ内にプラグインが存在すれば新規にダウンロードはせずそれを利用する挙動となる。
以上。