mcpField
T
terraform

terraform

github.com/iulianditaクラウド・DevOps1047 回インストール今日更新
リポジトリ

terraform について

Terraform と OpenTofu のインフラ構成を作成・レビューするためのスキルです。インフラ開発者やレビュー担当者向けに、状態と認証情報の保護、バージョン固定、計画の確認、人による適用承認を扱います。

主な機能

  1. 01Terraform と OpenTofu の構成指針
  2. 02状態境界とバックエンドの保護
  3. 03認証情報とシークレットの確認
  4. 04計画レビューと検証の手順
  5. 05コンプライアンスとドリフト検出の指針

活用シーン

  1. 01生成された HCL の安全性と状態への影響のレビュー
  2. 02バックエンド、ロック、状態境界の設計
  3. 03適用せずにインフラ計画を準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/iuliandita/skills --skill terraform

インストール後、Claude Code で/terraformを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
agent-hygiene.md
compliance.md
implementation-patterns.md
module-patterns.md
output-contract.md
production-checklist.md
state-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 - コンテナイメージの設計

ルール

  1. プロバイダー、モジュール、CI アクションのバージョンを固定してください。 依存関係ロックファイルをコミットしてください。
  2. ステートとシークレットを保護してください。 ステートを暗号化し、ロックし、アクセスを制限して監査してください。認証情報をコミットしないでください。
  3. 最小権限と明示的なライフサイクル制御を使用してください。 破壊的な置換を隠さないでください。
  4. プロビジョナーを使用しないでください。 宣言的なインフラ、ユーザーデータ、または ansible を使用してください。
  5. リスクの高いステート/CDE ステートを分離してください。 独立したバックエンド、ID、承認境界を設定してください。
  6. CI でサポートされている場合は、OIDC を使用してください。 plan と apply の ID を分け、権限の範囲を最小限にしてください。
  7. AI に terraform apply を実行させないでください。 人間が具体的な plan をレビューし、plan をアーカイブしたうえで、変更を承認してください。

コメント