コンフィグの読み込み

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. 実行プランの出力