mirror of
https://github.com/github/awesome-copilot.git
synced 2026-02-20 02:15:12 +00:00
This change adds a skill that can analyze the resources within an Azure resource group, determine the relationships between them, and then generate a Markdown file containing the relevant details. The Markdown file includes a Mermaid diagram showing the relationships.
234 lines
9.5 KiB
Markdown
234 lines
9.5 KiB
Markdown
---
|
|
name: azure-resource-visualizer
|
|
description: Analyze Azure resource groups and generate detailed Mermaid architecture diagrams showing the relationships between individual resources. Use this skill when the user asks for a diagram of their Azure resources or help in understanding how the resources relate to each other.
|
|
license: Complete terms in LICENSE.txt
|
|
metadata:
|
|
author: Tom Meschter (tom.meschter@microsoft.com)
|
|
---
|
|
|
|
# Azure Resource Visualizer - Architecture Diagram Generator
|
|
|
|
A user may ask for help understanding how individual resources fit together, or to create a diagram showing their relationships. Your mission is to examine Azure resource groups, understand their structure and relationships, and generate comprehensive Mermaid diagrams that clearly illustrate the architecture.
|
|
|
|
## Core Responsibilities
|
|
|
|
1. **Resource Group Discovery**: List available resource groups when not specified
|
|
2. **Deep Resource Analysis**: Examine all resources, their configurations, and interdependencies
|
|
3. **Relationship Mapping**: Identify and document all connections between resources
|
|
4. **Diagram Generation**: Create detailed, accurate Mermaid diagrams
|
|
5. **Documentation Creation**: Produce clear markdown files with embedded diagrams
|
|
|
|
## Workflow Process
|
|
|
|
### Step 1: Resource Group Selection
|
|
|
|
If the user hasn't specified a resource group:
|
|
|
|
1. Use your tools to query available resource groups. If you do not have a tool for this, use `az`.
|
|
2. Present a numbered list of resource groups with their locations
|
|
3. Ask the user to select one by number or name
|
|
4. Wait for user response before proceeding
|
|
|
|
If a resource group is specified, validate it exists and proceed.
|
|
|
|
### Step 2: Resource Discovery & Analysis
|
|
|
|
Once you have the resource group:
|
|
|
|
1. **Query all resources** in the resource group using Azure MCP tools or `az`.
|
|
2. **Analyze each resource** type and capture:
|
|
- Resource name and type
|
|
- SKU/tier information
|
|
- Location/region
|
|
- Key configuration properties
|
|
- Network settings (VNets, subnets, private endpoints)
|
|
- Identity and access (Managed Identity, RBAC)
|
|
- Dependencies and connections
|
|
|
|
3. **Map relationships** by identifying:
|
|
- **Network connections**: VNet peering, subnet assignments, NSG rules, private endpoints
|
|
- **Data flow**: Apps → Databases, Functions → Storage, API Management → Backends
|
|
- **Identity**: Managed identities connecting to resources
|
|
- **Configuration**: App Settings pointing to Key Vaults, connection strings
|
|
- **Dependencies**: Parent-child relationships, required resources
|
|
|
|
### Step 3: Diagram Construction
|
|
|
|
Create a **detailed Mermaid diagram** using the `graph TB` (top-to-bottom) or `graph LR` (left-to-right) format:
|
|
|
|
**Diagram Structure Guidelines:**
|
|
|
|
```mermaid
|
|
graph TB
|
|
%% Use subgraphs to group related resources
|
|
subgraph "Resource Group: [name]"
|
|
subgraph "Network Layer"
|
|
VNET[Virtual Network<br/>10.0.0.0/16]
|
|
SUBNET1[Subnet: web<br/>10.0.1.0/24]
|
|
SUBNET2[Subnet: data<br/>10.0.2.0/24]
|
|
NSG[Network Security Group]
|
|
end
|
|
|
|
subgraph "Compute Layer"
|
|
APP[App Service<br/>Plan: P1v2]
|
|
FUNC[Function App<br/>Runtime: .NET 8]
|
|
end
|
|
|
|
subgraph "Data Layer"
|
|
SQL[Azure SQL Database<br/>DTU: S1]
|
|
STORAGE[Storage Account<br/>Type: Standard LRS]
|
|
end
|
|
|
|
subgraph "Security & Identity"
|
|
KV[Key Vault]
|
|
MI[Managed Identity]
|
|
end
|
|
end
|
|
|
|
%% Define relationships with descriptive labels
|
|
APP -->|"HTTPS requests"| FUNC
|
|
FUNC -->|"SQL connection"| SQL
|
|
FUNC -->|"Blob/Queue access"| STORAGE
|
|
APP -->|"Uses identity"| MI
|
|
MI -->|"Access secrets"| KV
|
|
VNET --> SUBNET1
|
|
VNET --> SUBNET2
|
|
SUBNET1 --> APP
|
|
SUBNET2 --> SQL
|
|
NSG -->|"Rules applied to"| SUBNET1
|
|
```
|
|
|
|
**Key Diagram Requirements:**
|
|
|
|
- **Group by layer or purpose**: Network, Compute, Data, Security, Monitoring
|
|
- **Include details**: SKUs, tiers, important settings in node labels (use `<br/>` for line breaks)
|
|
- **Label all connections**: Describe what flows between resources (data, identity, network)
|
|
- **Use meaningful node IDs**: Abbreviations that make sense (APP, FUNC, SQL, KV)
|
|
- **Visual hierarchy**: Subgraphs for logical grouping
|
|
- **Connection types**:
|
|
- `-->` for data flow or dependencies
|
|
- `-.->` for optional/conditional connections
|
|
- `==>` for critical/primary paths
|
|
|
|
**Resource Type Examples:**
|
|
- App Service: Include plan tier (B1, S1, P1v2)
|
|
- Functions: Include runtime (.NET, Python, Node)
|
|
- Databases: Include tier (Basic, Standard, Premium)
|
|
- Storage: Include redundancy (LRS, GRS, ZRS)
|
|
- VNets: Include address space
|
|
- Subnets: Include address range
|
|
|
|
### Step 4: File Creation
|
|
|
|
Use [template-architecture.md](./assets/template-architecture.md) as a template and create a markdown file named `[resource-group-name]-architecture.md` with:
|
|
|
|
1. **Header**: Resource group name, subscription, region
|
|
2. **Summary**: Brief overview of the architecture (2-3 paragraphs)
|
|
3. **Resource Inventory**: Table listing all resources with types and key properties
|
|
4. **Architecture Diagram**: The complete Mermaid diagram
|
|
5. **Relationship Details**: Explanation of key connections and data flows
|
|
6. **Notes**: Any important observations, potential issues, or recommendations
|
|
|
|
## Operating Guidelines
|
|
|
|
### Quality Standards
|
|
|
|
- **Accuracy**: Verify all resource details before including in diagram
|
|
- **Completeness**: Don't omit resources; include everything in the resource group
|
|
- **Clarity**: Use clear, descriptive labels and logical grouping
|
|
- **Detail Level**: Include configuration details that matter for architecture understanding
|
|
- **Relationships**: Show ALL significant connections, not just obvious ones
|
|
|
|
### Tool Usage Patterns
|
|
|
|
1. **Azure MCP Search**:
|
|
- Use `intent="list resource groups"` to discover resource groups
|
|
- Use `intent="list resources in group"` with group name to get all resources
|
|
- Use `intent="get resource details"` for individual resource analysis
|
|
- Use `command` parameter when you need specific Azure operations
|
|
|
|
2. **File Creation**:
|
|
- Always create in workspace root or a `docs/` folder if it exists
|
|
- Use clear, descriptive filenames: `[rg-name]-architecture.md`
|
|
- Ensure Mermaid syntax is valid (test syntax mentally before output)
|
|
|
|
3. **Terminal (when needed)**:
|
|
- Use Azure CLI for complex queries not available via MCP
|
|
- Example: `az resource list --resource-group <name> --output json`
|
|
- Example: `az network vnet show --resource-group <name> --name <vnet-name>`
|
|
|
|
### Constraints & Boundaries
|
|
|
|
**Always Do:**
|
|
- ✅ List resource groups if not specified
|
|
- ✅ Wait for user selection before proceeding
|
|
- ✅ Analyze ALL resources in the group
|
|
- ✅ Create detailed, accurate diagrams
|
|
- ✅ Include configuration details in node labels
|
|
- ✅ Group resources logically with subgraphs
|
|
- ✅ Label all connections descriptively
|
|
- ✅ Create a complete markdown file with diagram
|
|
|
|
**Never Do:**
|
|
- ❌ Skip resources because they seem unimportant
|
|
- ❌ Make assumptions about resource relationships without verification
|
|
- ❌ Create incomplete or placeholder diagrams
|
|
- ❌ Omit configuration details that affect architecture
|
|
- ❌ Proceed without confirming resource group selection
|
|
- ❌ Generate invalid Mermaid syntax
|
|
- ❌ Modify or delete Azure resources (read-only analysis)
|
|
|
|
### Edge Cases & Error Handling
|
|
|
|
- **No resources found**: Inform user and verify resource group name
|
|
- **Permission issues**: Explain what's missing and suggest checking RBAC
|
|
- **Complex architectures (50+ resources)**: Consider creating multiple diagrams by layer
|
|
- **Cross-resource-group dependencies**: Note external dependencies in diagram notes
|
|
- **Resources without clear relationships**: Group in "Other Resources" section
|
|
|
|
## Output Format Specifications
|
|
|
|
### Mermaid Diagram Syntax
|
|
- Use `graph TB` (top-to-bottom) for vertical layouts
|
|
- Use `graph LR` (left-to-right) for horizontal layouts (better for wide architectures)
|
|
- Subgraph syntax: `subgraph "Descriptive Name"`
|
|
- Node syntax: `ID["Display Name<br/>Details"]`
|
|
- Connection syntax: `SOURCE -->|"Label"| TARGET`
|
|
|
|
### Markdown Structure
|
|
- Use H1 for main title
|
|
- Use H2 for major sections
|
|
- Use H3 for subsections
|
|
- Use tables for resource inventories
|
|
- Use bullet lists for notes and recommendations
|
|
- Use code blocks with `mermaid` language tag for diagrams
|
|
|
|
## Example Interaction
|
|
|
|
**User**: "Analyze my production resource group"
|
|
|
|
**Agent**:
|
|
1. Lists all resource groups in subscription
|
|
2. Asks user to select: "Which resource group? 1) rg-prod-app, 2) rg-dev-app, 3) rg-shared"
|
|
3. User selects: "1"
|
|
4. Queries all resources in rg-prod-app
|
|
5. Analyzes: App Service, Function App, SQL Database, Storage Account, Key Vault, VNet, NSG
|
|
6. Identifies relationships: App → Function, Function → SQL, Function → Storage, All → Key Vault
|
|
7. Creates detailed Mermaid diagram with subgraphs
|
|
8. Generates `rg-prod-app-architecture.md` with complete documentation
|
|
9. Displays: "Created architecture diagram in rg-prod-app-architecture.md. Found 7 resources with 8 key relationships."
|
|
|
|
## Success Criteria
|
|
|
|
A successful analysis includes:
|
|
- ✅ Valid resource group identified
|
|
- ✅ All resources discovered and analyzed
|
|
- ✅ All significant relationships mapped
|
|
- ✅ Detailed Mermaid diagram with proper grouping
|
|
- ✅ Complete markdown file created
|
|
- ✅ Clear, actionable documentation
|
|
- ✅ Valid Mermaid syntax that renders correctly
|
|
- ✅ Professional, architect-level output
|
|
|
|
Your goal is to provide clarity and insight into Azure architectures, making complex resource relationships easy to understand through excellent visualization.
|