Terraform AWS Annotated Reference
単一AWSリソースの全プロパティに詳細解説付きのリファレンステンプレートを生成する。
前提条件
以下のMCP serverが必須。利用不可の場合は警告・設定方法を表示し作業を終了する。
必須MCP server:
- •
awslabs.terraform-mcp-server- AWSプロバイダードキュメント・実装例の検索 - •
aws-knowledge-mcp-server- AWS公式ドキュメント参照用
MCP server設定例:
{
"aws-knowledge-mcp-server": {
"command": "uvx",
"args": ["fastmcp", "run", "https://knowledge-mcp.global.api.aws"]
},
"awslabs.terraform-mcp-server": {
"command": "uvx",
"args": ["awslabs.terraform-mcp-server@latest"],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
重要な原則
スキーマが信頼の源泉(Source of Truth)
terraform providers schema -json から取得したスキーマを正とする。MCPサーバーのドキュメントはスキーマに含まれない補足情報(説明文、設定可能な値の詳細等)の取得に使用する。
Web検索の禁止
インターネット検索は使用しない。情報取得はMCPサーバーのみを使用する。
ワークフロー
1. 入力の確認
ユーザーから以下を取得:
- •リソース名 (必須):
aws_cloudwatch_log_groupなど - •AWS Providerバージョン (任意): 指定がなければ最新バージョンを使用
- •出力先ディレクトリ (任意): 指定がなければ
${プロジェクトルート}/.local/terraform-aws-annotated-referenceを使用
入力例:
自然言語での指定:
aws_s3_bucketのテンプレートを作成して aws_lambda_functionのテンプレートを ./terraform/refs に出力して aws_iam_role(v5.80.0)のリファレンスを ./docs/terraform に作成して
引数形式での指定:
/terraform-aws-annotated-reference aws_s3_bucket /terraform-aws-annotated-reference aws_lambda_function --output ./terraform/refs /terraform-aws-annotated-reference aws_iam_role --version 5.80.0 --output ./docs/terraform
バージョン未指定時はTerraform Registry APIから最新バージョンを取得:
curl -s "https://registry.terraform.io/v1/providers/hashicorp/aws" | jq -r '.version'
2. スキーマの存在確認と取得
${出力先ディレクトリ}/${provider_version}/schema.json が既に存在するか確認:
OUTPUT_DIR="${OUTPUT_DIR:-${PROJECT_ROOT}/.local/terraform-aws-annotated-reference}"
SCHEMA_FILE="${OUTPUT_DIR}/${provider_version}/schema.json"
if [[ -f "$SCHEMA_FILE" ]]; then
echo "スキーマファイルが存在します。スキップします。"
else
echo "スキーマを取得します..."
# 以下のステップ2a, 2bを実行
fi
2a. スキーマ取得用Terraform設定の作成(スキーマが存在しない場合のみ)
${出力先ディレクトリ}/${provider_version}/ ディレクトリにプロバイダー設定を作成:
# ${出力先ディレクトリ}/${provider_version}/providers.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "{provider_version}"
}
}
}
2b. プロバイダースキーマの取得(スキーマが存在しない場合のみ)
cd ${OUTPUT_DIR}/${provider_version}
terraform init
terraform providers schema -json > schema.json
3. スキーマからリソース情報を抽出
スキーマJSONから対象リソースの情報を抽出:
jq '.provider_schemas["registry.terraform.io/hashicorp/aws"].resource_schemas["{リソース名}"]' schema.json
抽出対象:
- •
.block.attributes- 通常の属性 - •
.block.block_types- ネストブロック(vpc_config等)
4. 属性の分類
スキーマの各属性を以下のルールで分類:
テンプレートに含める属性(入力可能):
- •
optional: trueを持つ属性 - •
required: trueを持つ属性
テンプレートから除外する属性(computed only):
- •
computed: trueかつoptionalがない属性 - •例:
arn,id,tags_all
分類確認コマンド:
# 入力可能な属性一覧 jq -r '.block.attributes | to_entries[] | select(.value.optional == true) | .key' <<< "$SCHEMA" # computed only属性一覧 jq -r '.block.attributes | to_entries[] | select(.value.computed == true and .value.optional != true) | .key' <<< "$SCHEMA"
5. ドキュメント情報の取得
aws-knowledge-mcp-serverを使用して補足情報を取得:
- •
aws___search_documentationでAWS公式ドキュメントを検索 - •
aws___read_documentationで詳細情報を取得
6. テンプレート生成
references/template_example.md のフォーマットに従いテンプレートを生成。
必須要件:
- •スキーマから取得した入力可能な全属性を記載
- •ネストブロック(block_types)も漏れなく記載
- •各プロパティにコメントで解説を記載
- •AWS公式ドキュメントのURLは実在するもののみ記載
- •推測や誤った情報は絶対に記載しない
- •ファイルヘッダーやプロパティのコメントは必ずreferences/template_example.md のフォーマットと同一とする
- •言語は日本語とする
ファイルヘッダー:
#---------------------------------------------------------------
# {リソース表示名}
#---------------------------------------------------------------
#
# {どのようなAWSリソースをプロビジョニングするかの説明}
#
# AWS公式ドキュメント:
# - {ドキュメント名}: {URL}
#
# Terraform Registry:
# - {URL}
#
# Provider Version: {version}
# Generated: {YYYY-MM-DD}
# NOTE: 本テンプレートは生成時点の情報に基づきAIが生成しています。
# 情報が古くなっている可能性、誤りを含む可能性があるため、
# 正確な最新仕様は公式ドキュメントを参照してください。
#
#---------------------------------------------------------------
7. 抜け漏れ検証
スキーマの属性一覧と生成したテンプレートを照合:
# スキーマの入力可能属性一覧
jq -r '.provider_schemas["registry.terraform.io/hashicorp/aws"].resource_schemas["{リソース名}"].block.attributes | to_entries[] | select(.value.optional == true) | .key' schema.json | sort
# テンプレートに含まれる属性一覧
grep -E "^\s{2}[a-z_]+ =" {リソース名}.tf | sed 's/=.*//' | tr -d ' ' | sort
両者を比較し、差分がないことを確認。
8. フォーマット検証
生成したテンプレートが 6. テンプレート生成 に記載された必須要件を満たしていることを確認する。 満たしていない場合は、再度6. テンプレート生成から処理を再実行する。
9. ファイル出力
出力先: ${出力先ディレクトリ}/${provider_version}/${リソース名}.tf
例(デフォルト): ./.local/terraform-aws-annotated-reference/6.28.0/aws_cloudwatch_log_group.tf
例(カスタム): ./terraform/references/6.28.0/aws_cloudwatch_log_group.tf
品質要件
- •正確性: スキーマを信頼の源泉とし、MCPサーバーは補足情報として使用
- •網羅性: スキーマの全入力可能属性(attributes + block_types)を記載
- •検証可能性: 記載するURLは全て実在するものであること
- •除外の明確性: computed only属性はAttributes Referenceセクションに記載