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

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(状態)」。インフラの現在状態を追跡することでコードとの差分管理を実現するんだよ。
← 用語集にもどる