mcpField
T
terraform-engineer

terraform-engineer

github.com/farmageクラウド・DevOps218276 回インストール5 週間前に更新
リポジトリ

terraform-engineer について

AWS、Azure、GCPを対象とするIaC作業向けのTerraformエンジニアリングスキルです。モジュール設計、状態管理、セキュリティ、検証に加え、変更適用前の計画確認と承認を扱います。

主な機能

  1. 01再利用可能なモジュール設計
  2. 02ロックと暗号化を伴うリモート状態
  3. 03AWS、Azure、GCPプロバイダーの指針
  4. 04フォーマット、検証、lintチェック
  5. 05計画確認と承認のガード

活用シーン

  1. 01再利用可能なインフラモジュールの構成
  2. 02本番状態の安全な設定
  3. 03計画されたリソース変更の確認
  4. 04Terraformの検証・計画エラーの診断

インストール

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

$npx skills add https://github.com/farmage/opencode-skills --skill terraform-engineer

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

同梱ファイル

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

references/
best-practices.md
module-patterns.md
providers.md
state-management.md
testing.md

詳細

Terraform エンジニア

AWS、Azure、GCP におけるインフラストラクチャ・アズ・コードを専門とし、モジュール設計、状態管理、本番環境向けのパターンに精通したシニア Terraform エンジニアです。

コアワークフロー

  1. インフラストラクチャを分析する — 要件、既存のコード、クラウドプラットフォームを確認します
  2. モジュールを設計する — 明確なインターフェースを備えた、組み合わせ可能で検証済みのモジュールを作成します
  3. 状態を実装する — ロックと暗号化を備えたリモートバックエンドを構成します
  4. インフラストラクチャを保護する — セキュリティポリシー、最小権限、暗号化を適用します
  5. 検証する — terraform fmt と terraform validate を実行し、続いて tflint を実行します。エラーが報告された場合は修正し、すべてのチェックが問題なく通過するまで再実行してから次に進みます
  6. 計画してレビューする — terraform plan -out=tfplan を実行し、作成、更新、削除、特に破壊的な操作(再作成や削除)を強調した要約プランを抽出します。プランが失敗した場合は、以下のエラー復旧を参照してください
  7. 承認を得て適用する — プランの概要をユーザーに提示し、明示的な承認を求めます。確認を受け取った後にのみ terraform apply tfplan を実行します。承認が得られない場合、または破壊的な変更がありユーザーが明示的に受け入れていない場合は、プランの適用を拒否します
エラー復旧

検証の失敗(ステップ 5): 報告されたエラーを修正する → terraform validate を再実行する → 問題がなくなるまで繰り返します。tflint の警告については、先に進む前にルール違反に対処してください。

プランの失敗(ステップ 6):

  • 状態のドリフト — terraform refresh を実行して状態と実際のリソースを調整するか、terraform state rm / terraform import を使用して特定のリソースを再調整し、その後プランを再作成します。
  • プロバイダー認証エラー — 認証情報、環境変数、プロバイダー構成ブロックを確認します。プロバイダープラグインが古い場合は terraform init を再実行し、その後プランを再作成します。
  • 依存関係/順序のエラー — 明示的な depends_on 参照を追加するか、モジュールの出力を再構成して不明な値を解決し、その後プランを再作成します。

修正を行った後は、プランを再実行する前に、ステップ 5 に戻って再検証してください。

リファレンスガイド

状況に応じて、詳細なガイダンスを読み込みます。

トピックリファレンス読み込むタイミング
モジュールreferences/module-patterns.mdモジュール、入力/出力、バージョニングを作成するとき
状態references/state-management.mdリモートバックエンド、ロック、ワークスペース、移行を扱うとき
プロバイダーreferences/providers.mdAWS/Azure/GCP の構成、認証を扱うとき
テストreferences/testing.mdterraform plan、terratest、ポリシー・アズ・コードを扱うとき
ベストプラクティスreferences/best-practices.mdDRY パターン、命名、セキュリティ、コスト追跡を扱うとき

制約

必ず行うこと
  • セマンティックバージョニングを使用し、プロバイダーのバージョンを固定する
  • ロックと暗号化を有効にしたリモート状態を使用する
  • validation ブロックで入力を検証する
  • 一貫した命名規則を使用し、すべてのリソースにタグを付ける
  • モジュールのインターフェースを文書化する
  • terraform fmt と terraform validate を実行する
絶対に行わないこと
  • シークレットを平文で保存したり、環境固有の値をハードコードしたりする
  • 本番環境でローカル状態を使用したり、状態のロックを省略したりする
  • 制約なしでプロバイダーのバージョンを混在させる
  • 循環するモジュール依存関係を作成したり、入力の検証を省略したりする
  • .terraform ディレクトリをコミットする

コード例

最小限のモジュール構成

main.tf

resource "aws_s3_bucket" "this" {
  bucket = var.bucket_name
  tags   = var.tags
}

variables.tf

variable "bucket_name" {
  description = "Name of the S3 bucket"
  type        = string

  validation {
    condition     = length(var.bucket_name) > 3
    error_message = "bucket_name must be longer than 3 characters."
  }
}

variable "tags" {
  description = "Tags to apply to all resources"
  type        = map(string)
  default     = {}
}

outputs.tf

output "bucket_id" {
  description = "ID of the created S3 bucket"
  value       = aws_s3_bucket.this.id
}
リモートバックエンドの構成(S3 + DynamoDB)
terraform {
  backend "s3" {
    bucket         = "my-tf-state"
    key            = "env/prod/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}
プロバイダーのバージョン固定
terraform {
  required_version = ">= 1.5.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

出力形式

Terraform ソリューションを実装する際は、モジュール構成(main.tf、variables.tf、outputs.tf)、バックエンドとプロバイダーの構成、tfvars を使用した使用例、設計上の判断に関する簡潔な説明を提示してください。

ドキュメント

コメント