【Terraform】Terraform ~ terraform initコマンド ~

◾️はじめに

https://dk521123.hatenablog.com/entry/2025/09/25/213557

の続き。

環境の切り替えで、terraform initコマンドに関して
使い分ける機会があったので、まとめてみた

目次

【0】用語整理
 1)Backend
 2)Provider
 3)Module
【1】terraform initコマンド
 1)terraform init コマンドでの生成物
【2】terraform initの初期化内容
 1)Backendの初期化
 2)Providerのインストール
 3)モジュールのダウンロード
【3】terraform initを行うタイミング
 1)新規プロジェクト開始時
 2)プロジェクト構成の変更時
【4】オプション
 1)terraform init -migrate-state
 2)terraform init -reconfigure
 3)terraform init -backend-cnfig

【0】用語整理

1)Backend

* Terraformの状態情報(.tfstate)を管理するストレージを
 「Backend(バックエンド)」と呼ぶ
 => e.g. local, s3 and so on

Terraform ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939

2)Provider

* Terraformが様々な外部サービス(AWS, Azureなど)の
 インフラを管理するためのプラグイン

Terraform ~ Provider ~
https://dk521123.hatenablog.com/entry/2024/06/03/001929

3)Module

* 単一のディレクトリにあるTerraform構成ファイルのセット
 => Terraformのソースコードをテンプレート化し
  再利用可能にする仕組み(関数的な)

Terraform ~ Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544

【1】terraform initコマンド

* Terraformプロジェクトの初期化
 => 初期化内容については、「【2】terraform initの初期化内容」を参照

https://developer.hashicorp.com/terraform/cli/commands/init

1)terraform init コマンドでの生成物

https://dk521123.hatenablog.com/entry/2023/05/05/004939

より抜粋

* tfstateファイルを含む terraform init コマンドでの生成物について説明する

[1] .terraformディレクト

* terraformがキャッシュされたプラグインとモジュールを管理するディレクトリ

[2] .tfstateファイル

* Terraformによって作成された現在の構成状態を記録してあるファイル

[3] .terraform.lock.hclファイル

* プロバイダーとモジュールの依存関係や互換性が記録

https://rurukblog.com/post/terraform-lock-hcl/

【2】terraform initの初期化内

* 主には以下の通り

1)Backendの初期化

* Terraformの状態情報(.tfstate)の保存場所を設定

2)Providerのインストール

* Providerをインストール
* バージョンの整合性を確認

3)モジュールのダウンロード

* 定義されたすべてのモジュールをダウンロード
* .terraform/modulesディレクトリに保存
* モジュール間の依存関係を解決

【3】terraform initを行うタイミング

1)新規プロジェクト開始時

* Terraformプロジェクトを最初にセットアップ(初期化)する際に実行

2)プロジェクト構成の変更時

* Backend設定の変更(e.g. ローカルからリモートに変更する場合)
* Providerバージョンの更新(e.g. AWS Providerのバージョンアップをする場合)
* 新しいModuleの追加や既存Moduleのバージョン変更

【4】オプション

https://developer.hashicorp.com/terraform/cli/commands/init

Commands Explanations
terraform init -migrate-state 前回実行時の backend設定を引き継ぎたい場合
terraform init -reconfigure Backend設定を強制的に上書きする場合
terraform init -backend-cnfig Backend設定ファイルを指定する場合
terraform init -upgrade プロバイダーのバージョンを更新する場合

1)terraform init -migrate-state

* 前回実行時の backend設定を引き継ぎたい場合

https://techblog.nhn-techorus.com/archives/29512

2)terraform init -reconfigure

* Backend設定を強制的に上書きする場合

https://techblog.nhn-techorus.com/archives/29535

3)terraform init -backend-cnfig

* Backend設定ファイルを指定する場合

* 以下の関連記事より抜粋

https://dk521123.hatenablog.com/entry/2023/05/05/004939

terraform init -backend-config="./dev.tfbackend"

** dev.tfbackend

bucket  = "your-s3-dev-bucket"
key     = "tf/dev/terraform.tfstate"
region  = "us-west-2"
encrypt = true

参考文献

https://qiita.com/miu-P/items/998bae75b3aff88f0c61
https://zenn.dev/ishii1648/articles/e3464a668978cb

関連記事

Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ terraformコマンド ~
https://dk521123.hatenablog.com/entry/2025/09/25/213557
Terraform ~ Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544
Terraform ~ provider ~
https://dk521123.hatenablog.com/entry/2024/06/03/001929
Terraform ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939
Terraform ~ 複数環境へデプロイすることを考える ~
https://dk521123.hatenablog.com/entry/2023/05/06/003645