19
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エニプラAdvent Calendar 2024

Day 25

terraform init時にダウンロードされるプラグインをキャッシュする設定備忘録

Last updated at Posted at 2024-12-24

はじめに

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時に初回はキャッシュディレクトリにプラグインがダウンロードされ、
以降はキャッシュディレクトリ内にプラグインが存在すれば新規にダウンロードはせずそれを利用する挙動となる。

以上。

19
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?