Loading...
Loading...
全プロパティに詳細な解説が付いたTerraform AWSテンプレートを作成する。ユーザーが「/terraform-annotated-aws-blueprint」コマンドで構築したいインフラの概要を入力すると、Terraform Providerスキーマに基づいた正確な属性一覧と、AWS公式ドキュメントに基づく解説を含むテンプレートを生成する。
npx skill4agent add donngi/agent-skills terraform-aws-annotated-blueprintawslabs.terraform-mcp-serveraws-knowledge-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"
}
}
}awslabs.terraform-mcp-serveraws-knowledge-mcp-serverterraform providers schema -json/terraform-aws-annotated-blueprint {概要}{プロジェクトルート}/.local/terraform-aws-annotated-blueprint/${provider_version}/[🤔Question][✅Answer][🤔Question] ここに質問を記載
[✅Answer]${プロジェクトルート}/.local/terraform-aws-annotated-blueprint/${provider_version}/schema.jsonSCHEMA_FILE="${PROJECT_ROOT}/.local/terraform-aws-annotated-blueprint/${provider_version}/schema.json"
if [[ -f "$SCHEMA_FILE" ]]; then
echo "スキーマファイルが存在します。スキップします。"
else
echo "スキーマを取得します..."
# 以下の手順を実行
fi# ${プロジェクトルート}/.local/terraform-aws-annotated-blueprint/${provider_version}/providers.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "{provider_version}"
}
}
}cd ${プロジェクトルート}/.local/terraform-aws-annotated-blueprint/${provider_version}
terraform init
terraform providers schema -json > schema.jsonjq '.provider_schemas["registry.terraform.io/hashicorp/aws"].resource_schemas["{リソース名}"]' schema.json#---------------------------------------------------------------
# {リソース表示名}
#---------------------------------------------------------------
#
# {どのようなAWSリソースをプロビジョニングするかの説明}
#
# AWS公式ドキュメント:
# - {ドキュメント名}: {URL}
#
# Terraform Registry:
# - {URL}
#
# Provider Version: {version}
# Generated: {YYYY-MM-DD}
# NOTE: 本テンプレートは生成時点の情報に基づきAIが生成しています。
# 情報が古くなっている可能性、誤りを含む可能性があるため、
# 正確な最新仕様は公式ドキュメントを参照してください。
#
#---------------------------------------------------------------optional: truerequired: truecomputed: trueoptionalarnidtags_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"# ✅ OK
# 設定内容: ロググループの名前を指定します。
# ❌ NG
# Description: The name of the log group.#-------====# ✅ OK
#---------------------------------------------------------------
# 基本設定
#---------------------------------------------------------------
# ❌ NG
# ============================================================
# Basic Configuration
# ============================================================設定内容:設定可能な値:省略時:# ✅ OK
# name (Optional, Forces new resource)
# 設定内容: ロググループの名前を指定します。
# 設定可能な値: 1-512文字の文字列
# 省略時: Terraformがランダムな一意の名前を生成します。
# ❌ NG
# name (Optional, Forces new resource)
# Description: The name of the log group.
# Valid values: 1-512 character string
# Default: Terraform generates a random unique name.# ✅ OK: 機能別
#-------------------------------------------------------------
# 暗号化設定
#-------------------------------------------------------------
# ❌ NG: Required/Optionalグルーピング
# ============================================================
# REQUIRED ARGUMENTS
# ============================================================#-----#-----# ✅ OK
#---------------------------------------------------------------
# Attributes Reference (読み取り専用属性)
#---------------------------------------------------------------
# このリソースは以下の属性をエクスポートします:
#
# - arn: ロググループのARN
# - tags_all: 継承タグを含む全タグマップ
#---------------------------------------------------------------
# ❌ NG: コード例を含む
# output "log_group_arn" {
# value = aws_cloudwatch_log_group.example.arn
# }bash "${PROJECT_ROOT}/.claude/skills/terraform-aws-annotated-blueprint/lib/validate_template.sh" \
"${OUTPUT_FILE}" \
"${RESOURCE_NAME}" \
"${SCHEMA_FILE}"awslambda.tflambda_parser.tflambda_archiver.tfdepends_ondepends_oncurl -s "https://registry.terraform.io/v1/providers/hashicorp/aws" | jq -r '.version'