【テラフォームステート】

Terraformステート とは?

💡 インフラの現在地を把握する、Terraformの記憶装置
📌 このページのポイント
Terraformステート: コードと実インフラの橋渡し Terraformコード resource "aws_instance" "web" { ... } ステートファイル terraform.tfstate ID / ARN / 属性を記録 実インフラ AWS EC2 i-0abc1234567 比較 対応 リモートバックエンド(チーム共有) S3 + DynamoDB(ロック) Terraform Cloud ⚠ Gitに入れてはいけない Terraformワークフロー plan → ステートと差分を確認 apply → 実インフラを変更 ステートを自動更新 ステートが壊れると実インフラとの不整合が起きる
ステートファイルがコードと実インフラの対応関係を管理する
ひよこ ひよこ

Terraformステートって何?なぜ必要なの?

ペンギン先生 ペンギン先生

Terraformでインフラを作ると、「どのリソースをどんなIDで作ったか」を記録するファイルがステートだよ。これがないと次にterraform planしたとき、既存リソースとコードの差分がわからなくなるんだ。

ひよこ ひよこ

ファイルの中身ってどんなものが入ってるの?

ペンギン先生 ペンギン先生

リソースの種類・名前・クラウド上のID・属性値(ARN、IPアドレスなど)がJSON形式で記録されてるよ。たとえばAWSのEC2を作ったならインスタンスIDがステートに書き込まれて、次回からそのIDで差分管理するんだ。

ひよこ ひよこ

チームで開発するときは誰かのパソコンにファイルがあるの?

ペンギン先生 ペンギン先生

それだと危ないよ!チーム開発ではS3やTerraform Cloudなどのリモートバックエンドにステートを置くのがベストプラクティスだよ。さらにDynamoDBでロックをかけると、同時にapplyして競合するのを防げるんだ。

ひよこ ひよこ

ステートが古くなったり壊れたりしたらどうなるの?

ペンギン先生 ペンギン先生

実インフラとステートがずれると、「存在しないリソースを削除しようとする」「既存リソースを新規作成しようとする」など深刻なトラブルが起きるよ。だからステートファイルは手動で直接編集せず、terraform state mvなどの専用コマンドを使うのが鉄則なんだ。

ひよこ ひよこ

Gitでステートファイルを管理してはダメなの?

ペンギン先生 ペンギン先生

絶対にダメだよ!ステートにはシークレットキーやパスワード平文で含まれることがあるから、Gitリポジトリに入れると情報漏えいになる。.gitignoreに必ず追加して、リモートバックエンドを使うのが正しい方法だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
Terraformステート」って出てきたら「TerraformがインフラをどんなIDで管理しているかの記録簿」と思えればだいたいOK!
📖 おまけ:英語の意味
「Terraform State」 = テラフォームの状態
💬 「Terra(大地)」+「form(形成)」= Terraform(インフラを形成するツール)の「State(状態)」。インフラの現在状態を追跡することでコードとの差分管理を実現するんだよ。
← 用語集にもどる