terraform について
Terraform と OpenTofu のインフラ構成を作成・レビューするためのスキルです。インフラ開発者やレビュー担当者向けに、状態と認証情報の保護、バージョン固定、計画の確認、人による適用承認を扱います。
主な機能
- 01Terraform と OpenTofu の構成指針
- 02状態境界とバックエンドの保護
- 03認証情報とシークレットの確認
- 04計画レビューと検証の手順
- 05コンプライアンスとドリフト検出の指針
活用シーン
- 01生成された HCL の安全性と状態への影響のレビュー
- 02バックエンド、ロック、状態境界の設計
- 03適用せずにインフラ計画を準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ iuliandita/ skills --skill terraformインストール後、Claude Code で/terraformを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/agent-hygiene.mdcompliance.mdimplementation-patterns.mdmodule-patterns.mdoutput-contract.mdproduction-checklist.mdstate-and-security.md詳細
Terraform と OpenTofu
状態の境界を狭く保ち、認証情報を保護し、レビュー可能なプランを作成して、すべての適用に人間の明示的な承認を求めることで、再現性のあるインフラストラクチャを記述・レビューします。リソース引数と動作については、インストール済みのランタイムと固定されたプロバイダースキーマを正とします。
バージョン固有の動作:ピン留めを変更したり、ランタイム機能に依存したりする前に、既存のロックファイルとプロバイダーのドキュメントを確認してください。
使用する場合
- Terraform/OpenTofu の設定、モジュール、プロバイダー、状態、インポートを記述またはレビューする場合
- バックエンド、ロック、状態の境界、OIDC、ポリシー・アズ・コード、ドリフト検出に関する判断を設計する場合
- 規制対象または PCI スコープのシステム向けにインフラストラクチャ制御を実装する場合
- 生成された HCL のセキュリティ、正確性、置換、状態への影響をレビューする場合
使用しない場合
- Kubernetes マニフェストまたは Helm チャート:kubernetes を使用
- 読み取り専用の Kubernetes ヘルスチェック:kubernetes-health を使用
- VM ゲストの設定:ansible または virtualization を使用
- CI/CD パイプラインのアーキテクチャ:ci-cd を使用
- データベースのスキーマ、インデックス作成、レプリケーション、エンジンの操作:databases を使用
- アプリケーションのセキュリティ監査:security-audit を使用
- Proxmox VM/LXC のプロビジョニングに関する詳細(bpg/proxmox プロバイダー、テンプレート、cloud-init):virtualization を使用。このスキルは一般的な HCL/モジュール/状態の作業を担当します
AI セルフチェック
- プロバイダーのバージョンとリソース引数が、インストール済みのロックファイルおよび最新のプロバイダードキュメントに一致している
- リージョン、アカウント ID、CIDR、AMI、認証情報が、リテラル値ではなく変数または検出された値になっている
- IAM が最小権限になっている。広範なアクション/リソースとパブリックなインバウンドアクセスは、明示的に正当化された例外になっている
- ストレージに暗号化、アクセス制御、バージョニング、ロギングが設定され、パブリックアクセスの方針が意図的に定められている
- バックエンドの暗号化、ロック、状態へのアクセス、
sensitive値の露出がレビューされている - ステートフルリソースのライフサイクル、バックアップ、移行、置換の動作が意図的に定められている
- プロバイダー/モジュール/アクションのバージョンがピン留めされている。
.terraform.lock.hclがコミットされている - 対応している場合、シークレット値が通常の状態に保存されないようにし、実行時の受け渡し経路が文書化されている
- インポート、移動、置換、破棄がレビュー対象のプランに表示されている
- プロビジョナーや実値を含むコミット済みの tfvars が存在しない。サポートされている箇所にタグ/所有者が設定されている
-
terraform fmtとterraform validateが成功し、スキャンとポリシーゲートがリポジトリのポリシーに準拠している - 分野横断的なエージェントの衛生管理が適用されている。該当する場合は
references/agent-hygiene.mdを読む
シークレットのライフサイクル
発行元から CI の ID、プロバイダーでの使用、状態、ワークロードまで、各認証情報を追跡します。ローテーションと失効の担当者、リース期間、アプリケーションの再読み込み経路を記録します。sensitive は表示上のマスキングであり、状態への永続化を防ぐものではないと考えてください。承認済みのテスト環境で、値を表示せずにローテーションと失効を検証します。実行時の受け渡しの責任は kubernetes に、パイプラインの ID 管理の責任は ci-cd に引き継ぎます。
ワークフロー
このチェックリストをコピーして、進捗を記録します。
- ステップ 1:スコープを決定する(アカウント、バックエンド、状態の境界、シークレット)
- ステップ 2:関連するリファレンスを読む(状態に関するコマンドを実行する前に state-and-security を読む)
- ステップ 3:導入した指摘事項について fmt、validate、tflint、checkov がクリーンである(失敗した場合は修正してステップ 3 に戻る)
- プランをオーナーとレビューする。エージェントは適用しない
1. スコープを決定する
プロバイダー/アカウントの境界、環境、リソースの依存関係、バックエンドとロックの設計、既存のモジュール、コンプライアンスのスコープ、シークレットの受け渡し経路を特定します。既存のシステムでは、新しいパターンを導入する前に、現在の HCL、.terraform.lock.hcl、バックエンド、ワークスペース/状態の境界、過去のプランの慣例を確認します。
2. 該当する実装ガイダンスを参照する
- Terraform と OpenTofu の選択、HCL の構成、ライフサイクル/エフェメラル値、インポート/移動、S3 のレビュー、モジュールの構成、アカウントの境界、スキャンについては、
references/implementation-patterns.mdを参照してください。 - バックエンド設定、暗号化、ロック、OIDC、ステートの直接編集については、
references/state-and-security.mdを参照してください。ステートを変更するコマンドを実行する前に、必ず参照してください。 - モジュールの API/テストやレジストリの選択については、
references/module-patterns.mdを参照してください。 - PCI 制御、ドリフト検出、監査証跡、規制対象アーキテクチャについては、
references/compliance.mdを参照してください。本番環境へのデリバリー前に、references/production-checklist.mdを参照してください。
3. 適用せずにビルドして検証する
影響を受けるスタックで、該当するチェックを順に実行してください(OpenTofu のスタックでは tofu を使用します)。fmt または validate が失敗した場合、あるいは変更によって tflint/checkov の指摘が発生した場合は修正し、fmt から再実行してください。validate が成功してから、初めて plan を実行してください。既存の tflint/checkov の指摘は報告し、それを理由に plan をブロックしないでください。構文チェックに合格しただけでは、安全なインフラ変更とは言えません。オーナーとともに、plan に含まれる作成、変更、置換、インポート、削除を確認してください。
terraform fmt -check -recursive
terraform validate
if command -v tflint >/dev/null; then tflint --recursive; else echo "tflint not installed: lint NOT run; report it as unverified"; fi
if command -v checkov >/dev/null; then checkov -d . --framework terraform; else echo "checkov not installed: policy scan NOT run; report it as unverified"; fi
terraform plan -out=plan.tfplan
if command -v conftest >/dev/null; then terraform show -json plan.tfplan | conftest test -; else echo "conftest not installed: policy gate NOT run; report it as unverified"; fi
実行したチェック、その結果、利用できなかったツールを報告してください。plan、ステート操作、ポリシーゲートは、それぞれ異なる根拠を提供します。明示的な承認と、正確な対象範囲のレビューなしに、terraform apply、tofu apply、destroy、ステートの削除、強制ロック解除、稼働中環境での移行を実行しないでください。
出力要件
要件の全文は references/output-contract.md を参照してください。
- スキル名: TERRAFORM
- 成果物の分類:
audits - モード: 条件付き。既存コンテンツの分析、レビュー、監査、改善では、ローカルの報告ルールに従い、
docs/local/audits/terraform/<YYYY-MM-DD>-<slug>.mdに記録してください。インフラの構築や説明は、会話内で行います。 - 重大度:
P0 | P1 | P2 | P3 | info
関連スキル
- ansible - プロビジョニング後の設定
- kubernetes / kubernetes-health - クラスターの設定と読み取り専用のクラスター診断
- databases - プロビジョニングされたサービスを支えるデータベースエンジンの運用
- ci-cd - Terraform を実行するパイプラインの設計
- docker - コンテナイメージの設計
ルール
- プロバイダー、モジュール、CI アクションのバージョンを固定してください。 依存関係ロックファイルをコミットしてください。
- ステートとシークレットを保護してください。 ステートを暗号化し、ロックし、アクセスを制限して監査してください。認証情報をコミットしないでください。
- 最小権限と明示的なライフサイクル制御を使用してください。 破壊的な置換を隠さないでください。
- プロビジョナーを使用しないでください。 宣言的なインフラ、ユーザーデータ、または ansible を使用してください。
- リスクの高いステート/CDE ステートを分離してください。 独立したバックエンド、ID、承認境界を設定してください。
- CI でサポートされている場合は、OIDC を使用してください。 plan と apply の ID を分け、権限の範囲を最小限にしてください。
- AI に
terraform applyを実行させないでください。 人間が具体的な plan をレビューし、plan をアーカイブしたうえで、変更を承認してください。