#State

9 件の記事

tfstate にシークレットが平文で保存されたとき — キーのローテーションと再発防止
読了 5分

tfstate にシークレットが平文で保存されたとき — キーのローテーションと再発防止

tfstate が sensitive の指定と無関係に値を平文で持つ構造から整理します。露出範囲を判断する順序、state の整理よりキーのローテーションが先である理由、git に state がコミットされていた場合の履歴整理、そして再発防止としての ephemeral リソースと write-only 引数、S3 バックエンドの暗号化とアクセス統制、シークレットをそもそも state に残さない設計まで扱います。

terraform plan が遅いとき — refresh の負荷、並列度、スタック分割の合図
読了 4分

terraform plan が遅いとき — refresh の負荷、並列度、スタック分割の合図

plan の所要時間の本体が差分計算ではなく、リソースごとに API を読む refresh だという事実から整理します。リソース数と API 往復が時間を決める構造、-refresh=false を使ってよい局面といけない局面、parallelism の調整を rate limit を見ながら実測で決めるべき理由、-target が性能の道具ではない理由、そして根本対策であるスタック分割に移るべき合図まで扱います。

terraform plan は成功したのに apply が失敗するとき — 原因と部分適用の復旧
読了 5分

terraform plan は成功したのに apply が失敗するとき — 原因と部分適用の復旧

plan が通ったのに apply が失敗する理由を構造から整理します。plan はスキーマと参照だけを検証し、実際の API 検証は apply で初めて起きるという非対称、権限不足と IAM 伝播遅延、サービスクォータ、グローバルな名前衝突といった典型原因 5 つ、apply がトランザクションではないために生まれる部分適用状態を安全に復旧する手順、already exists エラーが出たときの import 判断まで扱います。

terraform.tfstate を消してしまったときの復旧 — バックアップファイル、S3 バージョニング、再 import の順で
読了 5分

terraform.tfstate を消してしまったときの復旧 — バックアップファイル、S3 バージョニング、再 import の順で

state ファイルが消えたときに現れる症状と、そのまま apply してはいけない理由から整理します。ローカルの terraform.tfstate.backup の確認、S3 バージョニングから以前のバージョンを復元するコマンド、バックアップが何もないときに import で state を再構築する最後のルートまで優先順位どおりに扱い、同じ事故を構造的に防ぐバックエンド設定をまとめます。

terraform import のやり方 — import ブロックで既存リソースをコードに取り込む
読了 5分

terraform import のやり方 — import ブロックで既存リソースをコードに取り込む

コンソールで作ったリソースを Terraform 管理下に取り込む手順を、import ブロック基準で整理します。リソースごとの import ID を探す場所、-generate-config-out でコードの下書きを生成する方法、plan が変更なしになるまでコードを実際に合わせるコツ、旧 CLI コマンド方式との違いと、複数リソースを一度に取り込むときの順序まで扱います。

terraform state lock エラーの解決 — 原因の確認と force-unlock の判断基準
読了 4分

terraform state lock エラーの解決 — 原因の確認と force-unlock の判断基準

Error acquiring the state lock エラーの Lock Info の読み方から整理します。同僚や CI が実行中という正常な状況と、異常終了でロックだけが残った状況を見分ける確認手順、force-unlock を使ってよい条件と誤って使うと state が壊れる理由、DynamoDB ロック方式の場合の確認場所と再発防止の設定まで扱います。

Terraform 運用 #2 drift と state の手術 — 定期検知、import ブロック、removed ブロック
読了 5分

Terraform 運用 #2 drift と state の手術 — 定期検知、import ブロック、removed ブロック

コードの外で起きた変更を定期 plan ワークフローと -detailed-exitcode で検知する仕組みを作り、drift への 3 つの対応(コードに吸収、apply で戻す、ignore_changes)の選択基準を整理します。コンソールで生まれたリソースを import ブロックで編入し、-generate-config-out でコードのドラフトを生成する手順から、state からだけ取り除く removed ブロックまで扱います。

Terraform 基礎 #9 リモート state とチーム協業 — S3 バックエンド、ネイティブロック、機密情報の保護
読了 5分

Terraform 基礎 #9 リモート state とチーム協業 — S3 バックエンド、ネイティブロック、機密情報の保護

ローカル state がチーム協業でぶつかる 3 つの問題を確認し、S3 バックエンドへ state を移す設定と init のマイグレーション手順を整理します。use_lockfile によるネイティブロックが同時実行を防ぐ仕組みと DynamoDB 方式がレガシーになった背景、state バケットのバージョニングと暗号化、アクセス制御まで扱い、基礎シリーズを締めくくります。

Terraform 基礎 #5 state の正体 — tfstate ファイルの構造と plan が変更を計算する仕組み
読了 5分

Terraform 基礎 #5 state の正体 — tfstate ファイルの構造と plan が変更を計算する仕組み

terraform.tfstate ファイルを実際に開いて構造を確認し、plan がコード、state、実際のインフラの 3 つを比較して変更を計算する仕組みを整理します。state に機密情報が平文で残る問題とコミット禁止のルール、state list と show、mv、rm といった操作コマンド、state を失ったときに起きることまで扱います。