terraform-aws-annotated-reference
npx skills add https://github.com/donngi/agent-skills --skill terraform-aws-annotated-reference
Agent 安装分布
Skill 文档
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ãµã¼ãã¼ã®ããã¥ã¡ã³ãã¯ã¹ãã¼ãã«å«ã¾ããªãè£è¶³æ
å ±ï¼èª¬ææãè¨å®å¯è½ãªå¤ã®è©³ç´°çï¼ã®åå¾ã«ä½¿ç¨ããã
AWSå ¬å¼ã®æ å ±ã®ã¿ãå©ç¨
ã¤ã³ã¿ã¼ãããæ¤ç´¢ã¯ä½¿ç¨ããªããæ å ±åå¾ã¯MCPãµã¼ãã¼ã®ã¿ã使ç¨ããAWSã®å ¬å¼æ å ±ã®ã¿ãå©ç¨ããã
åä½ä¸ã®ç¦æ¢äºé
- å¿ é mcpãµã¼ãã¼ä»¥å¤ãå©ç¨ããã¤ã³ã¿ã¼ãããæ¤ç´¢
- ã¯ã¼ã¯ããã¼ã«è¨è¼ããã¦ããªãä¸éãã¡ã¤ã«ã®çæ
ã¯ã¼ã¯ããã¼
1. å ¥åã®ç¢ºèª
ã¦ã¼ã¶ã¼ãã以ä¸ãåå¾:
- ãªã½ã¼ã¹å (å¿
é ):
aws_cloudwatch_log_groupãªã© - AWS Providerãã¼ã¸ã§ã³ (ä»»æ): æå®ããªããã°ææ°ãã¼ã¸ã§ã³ã使ç¨
- åºåå
ãã£ã¬ã¯ã㪠(ä»»æ): æå®ããªããã°
${PROJECT_ROOT}/.local/terraform-aws-annotated-reference/${PROVIDER_VERSION}ã使ç¨
å ¥åä¾:
èªç¶è¨èªã§ã®æå®:
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. ã¹ãã¼ãã®åå¨ç¢ºèªã¨åå¾
.local/terraform-aws-annotated-reference/${provider_version}/schema.json ãæ¢ã«åå¨ããã確èª:
WORK_DIR="${PROJECT_ROOT}/.local/terraform-aws-annotated-reference"
SCHEMA_FILE="${WORK_DIR}/${provider_version}/schema.json"
if [[ -f "$SCHEMA_FILE" ]]; then
echo "ã¹ãã¼ããã¡ã¤ã«ãåå¨ãã¾ããã¹ããããã¾ãã"
else
echo "ã¹ãã¼ããåå¾ãã¾ã..."
# 以ä¸ã®ã¹ããã2a, 2bãå®è¡
fi
2a. ã¹ãã¼ãåå¾ç¨Terraformè¨å®ã®ä½æï¼ã¹ãã¼ããåå¨ããªãå ´åã®ã¿ï¼
.local/terraform-aws-annotated-reference/${provider_version}/ ãã£ã¬ã¯ããªã«ãããã¤ãã¼è¨å®ã使:
# .local/terraform-aws-annotated-reference/${provider_version}/providers.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "{provider_version}"
}
}
}
2b. ãããã¤ãã¼ã¹ãã¼ãã®åå¾ï¼ã¹ãã¼ããåå¨ããªãå ´åã®ã¿ï¼
cd .local/terraform-aws-annotated-reference/${provider_version}
terraform init
terraform providers schema -json > schema.json
3. ã¹ãã¼ããããªã½ã¼ã¹æ å ±ãæ½åº
ã¹ãã¼ãJSONãã対象ãªã½ã¼ã¹ã®æ å ±ãæ½åº:
jq '.provider_schemas["registry.terraform.io/hashicorp/aws"].resource_schemas["${RESOURCE_NAME}"]' schema.json > "schema_${RESOURCE_NAME}.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_${RESOURCE_NAME}.json"
# computed only屿§ä¸è¦§
jq -r '.block.attributes | to_entries[] | select(.value.computed == true and .value.optional != true) | .key' "schema_${RESOURCE_NAME}.json"
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["${RESOURCE_NAME}"].block.attributes | to_entries[] | select(.value.optional == true) | .key' schema.json | sort
# ãã³ãã¬ã¼ãã«å«ã¾ãã屿§ä¸è¦§
grep -E "^ [a-z_]+ =" "${RESOURCE_NAME}.tf" | sed 's/=.*//' | tr -d ' ' | sort
# ãã¹ããããã¯ä¸è¦§ï¼ã¹ãã¼ãï¼
jq -r '.provider_schemas["registry.terraform.io/hashicorp/aws"].resource_schemas["${RESOURCE_NAME}"].block.block_types | keys[]' schema.json | sort
# ãã¹ããããã¯ä¸è¦§ï¼ãã³ãã¬ã¼ãï¼
grep -E "^ [a-z_]+ \{" "${RESOURCE_NAME}.tf" | sed 's/ {.*//' | tr -d ' ' | sort
両è ãæ¯è¼ããå·®åããªããã¨ã確èªã
8. ãã©ã¼ãããæ¤è¨¼
çæãããã³ãã¬ã¼ãã 6. ãã³ãã¬ã¼ãçæ ã«è¨è¼ãããå¿ é è¦ä»¶ãæºããã¦ãããã¨ã確èªããã æºããã¦ããªãå ´åã¯ãå度6. ãã³ãã¬ã¼ãçæããå¦çãåå®è¡ããã
9. ãã¡ã¤ã«åºå
åºåå
: ${åºåå
ãã£ã¬ã¯ããª}/${ãªã½ã¼ã¹å}.tf
ä¾ï¼ããã©ã«ãï¼:
åºåå
ãã£ã¬ã¯ã㪠= æå®ãªã
${PROJECT_ROOT}/.local/terraform-aws-annotated-reference/${PROVIDER_VERSION}/aws_cloudwatch_log_group.tf
ä¾ï¼ã«ã¹ã¿ã ï¼:
åºåå
ãã£ã¬ã¯ã㪠= ${PROJECT_ROOT}/terraform/references
${PROJECT_ROOT}/terraform/references/aws_cloudwatch_log_group.tf
å質è¦ä»¶
- æ£ç¢ºæ§: ã¹ãã¼ããä¿¡é ¼ã®æºæ³ã¨ããMCPãµã¼ãã¼ã¯è£è¶³æ å ±ã¨ãã¦ä½¿ç¨
- ç¶²ç¾ æ§: ã¹ãã¼ãã®å ¨å ¥åå¯è½å±æ§ï¼attributes + block_typesï¼ãè¨è¼
- æ¤è¨¼å¯è½æ§: è¨è¼ããURLã¯å ¨ã¦å®å¨ãããã®ã§ãããã¨
- é¤å¤ã®æç¢ºæ§: computed only屿§ã¯Attributes Referenceã»ã¯ã·ã§ã³ã«è¨è¼
- çµ±ä¸ãã©ã¼ããã: references/template_example.md ã®ãã©ã¼ããããå³å®