◾️はじめに
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