コンフィグの読み込み
Terraform は現在のディレクトリの .tf ファイル(設定ファイル)を読み取る。
-
すべての .tf ファイルをロード
-
変数(variable)、プロバイダ、リソース定義、モジュールなどをパース
-
無効な構文があればここでエラー
プロバイダの初期化チェック
provider(例: AWS)を確認して、必要なバージョンのプラグインがインストール済みかチェック。
※ 未インストールなら terraform init が必要
現在の「state」の読み込み
Terraform は現在の管理状態ファイル terraform.tfstate(ローカル or リモートバックエンド)を読み込む。
これにより、
-
どのリソースが既に作成済みか
-
それぞれの id、設定値
-
Terraformが管理対象として認識している実リソース
がわかる
実際のクラウド状態を取得(差分確認のため)
tfstate 上の情報と、実際の AWS や GCP のリソースが一致しているか確認するために、Terraformは API を使ってクラウドから**最新の状態(現物)**を取得する。
例:
-
S3バケットの現在のバージョン設定
-
IAMポリシーのアタッチ状態
-
ECSサービスの desired count
-
RDSのスペックなど
差分の計算
Terraformは以下を比較して「何を変更すべきか」を計算する:
比較対象 | 内容 |
---|---|
.tfファイル | ユーザーが書いた「理想の状態」 |
.tfstate | Terraformが知っている「前回の状態」 |
実際のクラウドの状態 | 今まさに存在する「実物の状態」 |
これにより次の3つに分類される:
-
- → 新規に作成されるリソース
-
~ → 既存リソースを変更する
-
- → 削除されるリソース
実行プランの出力
すべての差分を人間が読める形で整形し、画面に表示する。
例:
Terraform will perform the following actions:
# aws_s3_bucket.example
~ update in-place
versioning.0.enabled: "false" => "true"
流れ
1. tfファイル読み込み
↓
2. providerとstateの確認
↓
3. tfstate(管理状態)の取得
↓
4. 実際のクラウドの状態を取得(APIで取得する)
↓
5. 差分の計算
↓
6. 実行プランの出力