terraform-infra について
インフラ運用担当者や DevOps エージェント向けの Terraform スキルです。計画や状態操作、変更適用の手順と安全策をまとめています。
主な機能
- 01設定の plan・検証・フォーマット
- 02Terraform の状態の確認と管理
- 03ワークスペースの管理
- 04apply 前の確認を必須化
- 05destroy と state 削除のブロック
活用シーン
- 01適用前のインフラ変更レビュー
- 02リソースやワークスペース状態の調査
- 03Terraform モジュール開発のガイド
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill terraform-infraインストール後、Claude Code で/terraform-infraを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
commands/terraform-infra.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/terraform-infra.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md詳細
Terraform インフラストラクチャスキル
インストール
このスキルは Terraform CLI を呼び出します。次の手順でインストールしてください。
- macOS:
brew tap hashicorp/tap && brew install hashicorp/tap/terraform - Windows:
choco install terraformを実行するか、HashiCorp からダウンロードします - Linux (apt):HashiCorp リポジトリを追加してから、
sudo apt update && sudo apt install terraformを実行します(HashiCorp のインストール手順を参照)
確認:terraform --version
チートシートとベストプラクティス
ワークフロー: terraform init → terraform fmt → terraform validate → terraform plan -out=tfplan → レビュー → terraform apply tfplan。内容を確認するには terraform show tfplan を使用します。
ヒント: apply の前に必ず plan を実行し、内容を確認せずに apply しないでください。チームで作業する場合は、リモートステート(例:S3 +ロック)を使用します。-auto-approve は、レビュー済みのプランを使う CI でのみ使用してください。デバッグには terraform state list と terraform state show <resource> を使用します。パイプラインではサービスアカウント/ワークロード ID を使用し、静的キーは避けてください。
認定資格とトレーニング
HashiCorp Terraform Associate (004): IaC の概念、Terraform の基礎、ステート、モジュール、Terraform Cloud。学習パス。スキルデータ: init → fmt → validate → plan -out → apply、リモートステート、内容を確認しない apply の禁止。
フックとワークフロー
推奨フック: apply 前に terraform plan -out=tfplan を実行し、レビューを必須にします。CI:プランの承認後にのみ apply します。devops(メイン)と併用します。
ワークフロー: devops(メイン)と併用します。フロー:init → plan → review → apply。デバッグには state コマンドを使用します。パイプラインとの統合については ci-cd-implementation-rule を参照してください。
概要
生の Terraform MCP サーバーと比較して、コンテキストを 90%以上節約できます。インフラストラクチャ操作に必要な重要な安全制御が含まれています。
要件
- Terraform CLI(v1.0+)
- クラウドプロバイダーの認証情報が設定されていること
- .tf ファイルを含む作業ディレクトリ
ツール(段階的開示)
プランニングと検証
| ツール | 説明 | 確認 |
|---|---|---|
| plan | terraform プランを生成します | 不要 |
| validate | 構成を検証します | 不要 |
| fmt | terraform ファイルをフォーマットします | 不要 |
ステート操作
| ツール | 説明 | 確認 |
|---|---|---|
| show | 現在のステートを表示します | 不要 |
| list | ステート内のリソースを一覧表示します | 不要 |
| state-mv | ステート内のリソースを移動します | 必要 |
ワークスペース操作
| ツール | 説明 | 確認 |
|---|---|---|
| workspace-list | ワークスペースを一覧表示します | 不要 |
| workspace-select | ワークスペースを選択します | 不要 |
| workspace-new | ワークスペースを作成します | 必要 |
実行(⚠️ 危険)
| ツール | 説明 | 確認 |
|---|---|---|
| apply | 変更を適用します | 必須 |
ブロックされている操作
| ツール | 状態 |
|---|---|
| destroy | ブロック |
| state-rm | ブロック |
クイックリファレンス
# Initialize
terraform init
# Plan changes
terraform plan -out=tfplan
# Validate
terraform validate
# Apply (requires -auto-approve for automation)
terraform apply tfplan
設定
- 作業ディレクトリ:terraform ファイルを含んでいる必要があります
- TFVAR*:環境変数を介した変数値
- TF_WORKSPACE:アクティブなワークスペース
安全制御
⚠️ terraform apply には常に確認が必要です ⚠️ terraform destroy はデフォルトでブロックされています ⚠️ ステートの変更には確認が必要です ⚠️ apply の前にプランの出力を確認してください
エージェントとの連携
- devops(メイン):インフラストラクチャ管理
- architect(サブ):インフラストラクチャ設計
- cloud-integrator(サブ):クラウドのプロビジョニング
トラブルシューティング
| 問題 | 解決策 |
|---|---|
| Init に失敗する | プロバイダーの認証情報を確認します |
| ステートがロックされている | 他の操作が実行中でないか確認します |
| Plan に失敗する | エラー出力を注意深く確認します |
モジュール開発
再利用可能なモジュールの作成
HashiCorp の規約に従ってモジュールを構成します。
modules/
vpc/
main.tf # Resource definitions
variables.tf # Input variables
outputs.tf # Output values
versions.tf # Required provider versions
README.md # Module documentation
モジュールのベストプラクティス
| プラクティス | 説明 |
|---|---|
| 単一責任 | 各モジュールは 1 つの論理的なリソースグループを管理します |
| 型指定された変数 | すべての変数に type 制約を使用します |
| 検証ブロック | 入力制約には validation {} を追加します |
| 機密性の高い出力 | シークレットには sensitive = true を指定します |
| バージョン制約 | モジュールのソースバージョンを固定します |
モジュールソースのパターン
# Local module
module "vpc" {
source = "./modules/vpc"
}
# Terraform Registry
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 5.0"
}
# Git source (pinned tag)
module "vpc" {
source = "git::https://github.com/org/modules.git//vpc?ref=v1.2.0"
}
プロバイダー開発パターン
カスタムプロバイダーのスケルトン
package provider
import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func Provider() *schema.Provider {
return &schema.Provider{
Schema: map[string]*schema.Schema{
"api_key": {
Type: schema.TypeString,
Required: true,
Sensitive: true,
DefaultFunc: schema.EnvDefaultFunc("API_KEY", nil),
},
},
ResourcesMap: map[string]*schema.Resource{
"myservice_resource": resourceMyServiceResource(),
},
}
}
モジュールのテスト
# Validate module syntax
cd modules/vpc && terraform validate
# Run module tests (Terraform 1.6+)
terraform test
# Plan with module
terraform plan -var-file=examples/basic.tfvars
絶対遵守事項
terraform applyを実行する前に、必ずterraform planを実行し、出力を確認します.tfファイルに認証情報やシークレットを決してハードコードしません。シークレットマネージャー(AWS Secrets Manager、Azure Key Vault、HashiCorp Vault)を使用します- 同時変更を防ぐため、暗号化とステートロックを備えたリモートステートを必ず使用します
- ステートファイルを決して直接編集しません。
terraform stateコマンドのみを使用します - 再現性の高いインフラストラクチャデプロイを実現するため、プロバイダーとモジュールのバージョンを必ず固定します
アンチパターン
| アンチパターン | 問題点 | 正しい方法 |
|---|---|---|
| .tf ファイル内の認証情報のハードコード | VCS でのシークレット漏えい、コンプライアンス違反 | シークレットマネージャーのバックエンドを使用する変数を使います |
| ステートロックなし | 同時に実行した apply によりステートが破損します | バックエンドのロックを有効にします(S3+DynamoDB、Azure Blob、GCS) |
terraform plan の確認なしで terraform apply | リソースが予期せず削除または再作成されます | 常に先に plan を実行し、差分を確認してから apply を実行します |
| バージョンが固定されていないプロバイダーとモジュール | ビルドの再現性がなくなり、破壊的変更が発生します | バージョンを固定します:version = "~> 4.0" |
| リソースにタグがない | コストを追跡できず、コンプライアンス違反になります | すべてのリソースに env、owner、cost-center のタグを付けます |
メモリープロトコル(必須)
開始前:
.claude/context/memory/learnings.md を読みます
完了後:
- 新しいパターン ->
.claude/context/memory/learnings.md - 見つかった問題 ->
.claude/context/memory/issues.md - 行った判断 ->
.claude/context/memory/decisions.md
中断されることを前提にします。メモリに記録されていなければ、実行されていないものとします。