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

Terraformステート とは?

最終更新:
💡 コードの名前と、実物のIDを結ぶ記録簿

Terraformの設定に書いたリソースと、実際のインフラのID・属性などを対応付ける状態の記録。変更計画や管理に使われ、ローカルのterraform.tfstateやリモートバックエンドに保存される。常に最新の実環境を写した記録とは限らない。

📌 このページのポイント
コードの名前と、実物を結ぶ記録設定の名前web実物のIDi-exampleステート設定・ステート・実環境で変更を計画大切な記録。権限とロックも整える
名前とIDは架空の例。ステートは対応関係を記録し、実環境の読み直しと合わせて変更計画に使います。
ひよこ ひよこ
コードがあるのに、記録も必要なの?
ペンギン先生 ペンギン先生
コードの中のwebという名前だけでは、実際のどのサーバーを指すか分からないよ。ステートは、設定のリソースとクラウド上のIDを結ぶ記録なんだ。属性や管理に必要な情報も保持する。
ひよこ ひよこ
今のインフラを、そのまま写している?
ペンギン先生 ペンギン先生
前に記録した状態と、今の実環境がずれる場合もあるよ。通常のplanでは実環境を読み直し、設定やステートを使って変更を計画する。読み直しを無効にするなど、実行するコマンドやオプションでも挙動は変わるんだ。
ひよこ ひよこ
チームなら、どこに保存する?
ペンギン先生 ペンギン先生
HCP TerraformやS3などのリモートバックエンドで共有する方法があるよ。読み書きできる人、暗号化、復旧方法を整える。複数の人が同時に変更して壊さないよう、保存先が対応するロックも設定しよう。
ひよこ ひよこ
S3では、DynamoDBが必要?
ペンギン先生 ペンギン先生
現在のS3バックエンドはuse_lockfileをtrueにすると、S3のロックファイルを使えるよ。既定では無効で、必要な権限も要る。DynamoDBによるロックは非推奨なので、利用中のTerraformのバージョンと移行手順を確認しよう。
ひよこ ひよこ
Gitに保存して、手で直してもよい?
ペンギン先生 ペンギン先生
ステートには秘密情報が入ることもあるので、Gitへの登録を避け、保存先のアクセスを制限しよう。対応関係の変更はterraform stateなどの専用手段を使い、JSONを直接書き換えない。バックアップも安全に扱う必要があるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Terraformステート」って出てきたら「コードと実際のインフラを対応付ける記録簿」と思えばだいたいOK!
📖 おまけ:英語の意味
「Terraform State」 = Terraformの状態の記録
💬 Stateは状態。Terraformが管理するリソースの対応関係や属性などを保持するために使うよ。

参考資料

← 用語集にもどる