git:20260223.c6d4db1 to git:20260324.a02e282
95 added, 135 removed. Audit A to A.
---
name: aws-drawio-architecture-diagrams
- description: Provides professional AWS architecture diagram creation in draw.io XML format (.drawio files) using official AWS Architecture Icons (aws4 library). Use when creating AWS cloud architecture diagrams, infrastructure diagrams, network topology diagrams, serverless architectures, multi-tier application diagrams, VPC layouts, or any AWS visual diagram in draw.io format.
+ description: Creates professional AWS architecture diagrams in draw.io XML format (.drawio files) using official AWS Architecture Icons (aws4 library). Use when the user asks for AWS diagrams, VPC layouts, multi-tier architectures, serverless designs, network topology, or draw.io exports involving Lambda, EC2, RDS, or other AWS services.
allowed-tools: Read, Write, Bash
---
# AWS Architecture Diagram Creation with Draw.io
## Overview
- Create professional, pixel-perfect AWS architecture diagrams in draw.io's native XML format using the official AWS Architecture Icons (aws4 shape library). This skill enables generation of production-ready `.drawio` files that can be opened directly in [diagrams.net](https://app.diagrams.net/?libs=aws4).
+ Creates pixel-perfect AWS architecture diagrams in draw.io XML format using official AWS4 shape library. Generates production-ready `.drawio` files for [diagrams.net](https://app.diagrams.net/?libs=aws4).
## When to Use
- Use this skill when:
- - Creating AWS cloud architecture diagrams (VPC, subnets, services)
- - Designing multi-tier application architectures on AWS
- - Drawing serverless architecture diagrams (Lambda, API Gateway, DynamoDB)
- - Visualizing network topologies with VPCs, subnets, and security groups
- - Creating infrastructure diagrams for AWS Well-Architected reviews
- - Documenting existing AWS infrastructure as visual diagrams
- - Building deployment architecture diagrams with ECS, EKS, or EC2
- - Designing data pipeline architectures (Kinesis, S3, Glue, Redshift)
- - Creating disaster recovery and multi-region architecture diagrams
+ - AWS cloud architecture diagrams (VPC, subnets, services)
+ - Multi-tier application architectures on AWS
+ - Serverless designs (Lambda, API Gateway, DynamoDB)
+ - Network topology diagrams with security groups
+ - Infrastructure documentation for Well-Architected reviews
## Instructions
- ### Draw.io File Structure
+ ### File Structure
Every `.drawio` file follows this XML structure:
```xml
<mxfile host="app.diagrams.net" agent="Claude" version="24.7.17">
<diagram id="aws-arch-1" name="AWS Architecture">
<mxGraphModel dx="1434" dy="759" grid="1" gridSize="10" guides="1"
tooltips="1" connect="1" arrows="1" fold="1" page="1"
pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
- <!-- AWS shapes and connectors here -->
+ <!-- AWS shapes and connectors -->
</root>
</mxGraphModel>
</diagram>
</mxfile>
```
**Key rules:**
- IDs "0" and "1" are reserved for root cells
- Use sequential integer IDs starting from "2"
- - Use landscape orientation (`pageWidth="1169" pageHeight="827"`) for architecture diagrams
- - All coordinates must be positive and aligned to grid (multiples of 10)
+ - Landscape orientation (`pageWidth="1169" pageHeight="827"`)
+ - All coordinates positive and aligned to grid (multiples of 10)
### AWS4 Group Containers
- Groups are containers that visually organize AWS resources. They use `container=1` and child shapes reference the group via `parent="groupId"`.
+ Groups use `container=1` with child shapes referencing via `parent="groupId"`.
**AWS Cloud (top-level boundary):**
```xml
<mxCell id="2" value="AWS Cloud" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;strokeColor=#232F3E;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#232F3E;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="1">
<mxGeometry x="100" y="40" width="1000" height="700" as="geometry" />
</mxCell>
```
**Region:**
```xml
- <mxCell id="3" value="us-east-1" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#147EBA;dashed=1;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="2">
+ <mxCell id="3" value="us-east-1" style="...grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fontColor=#147EBA;dashed=1;..." vertex="1" parent="2">
<mxGeometry x="20" y="40" width="960" height="640" as="geometry" />
</mxCell>
```
**VPC:**
```xml
- <mxCell id="4" value="VPC (10.0.0.0/16)" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_vpc;strokeColor=#8C4FFF;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#AAB7B8;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="3">
+ <mxCell id="4" value="VPC (10.0.0.0/16)" style="...grIcon=mxgraph.aws4.group_vpc;strokeColor=#8C4FFF;fontColor=#AAB7B8;..." vertex="1" parent="3">
<mxGeometry x="20" y="40" width="920" height="580" as="geometry" />
</mxCell>
```
- **Public Subnet:**
- ```xml
- style="points=[[...same points...]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;strokeColor=#7AA116;fillColor=#E9F3D2;verticalAlign=top;align=left;spacingLeft=30;fontColor=#248814;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;"
- ```
-
- **Private Subnet:**
- ```xml
- style="points=[[...same points...]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;strokeColor=#00A4A6;fillColor=#E6F6F7;verticalAlign=top;align=left;spacingLeft=30;fontColor=#147EBA;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;"
- ```
+ **Subnet styles:**
+ - Public: `strokeColor=#7AA116;fillColor=#E9F3D2;fontColor=#248814`
+ - Private: `strokeColor=#00A4A6;fillColor=#E6F6F7;fontColor=#147EBA`
### AWS4 Service Icons
- Service icons use the `shape=mxgraph.aws4.resourceIcon` pattern with `resIcon` for the specific service, or dedicated shape names.
+ Service icons use `shape=mxgraph.aws4.resourceIcon` with `resIcon` property.
- **CRITICAL: `strokeColor=#ffffff` is required** for all `resourceIcon` shapes. This makes the icon glyph render as **white** on the colored background. Using `strokeColor=none` causes the icon to render as black.
+ **CRITICAL: `strokeColor=#ffffff` is required** for `resourceIcon` shapes to render white icon glyphs on colored backgrounds.
- **Standard service icon pattern:**
+ **Standard service icon:**
```xml
- <mxCell id="10" value="Amazon S3" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;gradientColor=#60A337;gradientDirection=north;fillColor=#277116;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;" vertex="1" parent="1">
+ <mxCell id="10" value="Amazon S3" style="...gradientColor=#60A337;gradientDirection=north;fillColor=#277116;strokeColor=#ffffff;...shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;" vertex="1" parent="1">
<mxGeometry x="100" y="100" width="60" height="60" as="geometry" />
</mxCell>
```
- **Note:** Dedicated shapes like `lambda_function`, `applicationLoadBalancer`, `users` do NOT use `resourceIcon` and should keep `strokeColor=none`.
+ **Dedicated shapes (Lambda, ALB, Users) use `strokeColor=none`.** See `references/aws-shape-reference.md` for complete shape catalog.
- ### AWS Service Color Codes
+ ### Service Color Codes
- Each AWS service category uses official colors with gradients for `resourceIcon` shapes. All `resourceIcon` shapes **must** use `strokeColor=#ffffff` and `gradientDirection=north`.
+ Each AWS service category uses official colors. All `resourceIcon` shapes must use `strokeColor=#ffffff` and `gradientDirection=north`. See `references/aws-shape-reference.md` for full color table.
- | Category | fillColor | gradientColor | strokeColor | Services |
- |----------|-----------|---------------|-------------|----------|
- | **Compute** | `#D05C17` | `#F78E04` | `#ffffff` | EC2, ECS, EKS, Fargate |
- | **Compute (dedicated shapes)** | `#ED7100` | none | none | Lambda (`lambda_function`), ALB (`applicationLoadBalancer`) |
- | **Storage** | `#277116` | `#60A337` | `#ffffff` | S3, EBS, EFS, Glacier |
- | **Database** | `#3334B9` | `#4D72F3` | `#ffffff` | RDS, DynamoDB, ElastiCache, Aurora, Redshift |
- | **Networking** | `#5A30B5` | `#945DF2` | `#ffffff` | CloudFront, Route 53, ELB, API Gateway, NAT GW, IGW |
- | **Security** | `#C7131F` | `#F54749` | `#ffffff` | IAM, Cognito, KMS, WAF, Shield, Pinpoint |
- | **Analytics** | `#5A30B5` | `#945DF2` | `#ffffff` | Kinesis, Athena, Glue, EMR, Lake Formation |
- | **Application Integration** | `#BC1356` | `#F54749` | `#ffffff` | SQS, SNS, EventBridge, Step Functions |
- | **Management** | `#BC1356` | `#F54749` | `#ffffff` | CloudWatch, CloudFormation, Systems Manager |
- | **Machine Learning** | `#116D5B` | `#4AB29A` | `#ffffff` | SageMaker, Bedrock, Comprehend, Lex, Rekognition |
- | **Developer Tools** | `#5A30B5` | `#945DF2` | `#ffffff` | CodePipeline, CodeBuild, CodeDeploy |
- | **General / External** | `#232F3E` | none | none | Users, Mobile Client, Corporate DC (dedicated shapes) |
+ Quick reference:
+ | Category | fillColor | gradientColor | Services |
+ |----------|-----------|---------------|----------|
+ | Compute | `#D05C17` | `#F78E04` | EC2, ECS, EKS, Fargate |
+ | Storage | `#277116` | `#60A337` | S3, EBS, EFS, Glacier |
+ | Database | `#3334B9` | `#4D72F3` | RDS, DynamoDB, Aurora, Redshift |
+ | Networking | `#5A30B5` | `#945DF2` | CloudFront, Route 53, API GW |
+ | Security | `#C7131F` | `#F54749` | IAM, Cognito, KMS, WAF |
+ | App Integration | `#BC1356` | `#F54749` | SQS, SNS, EventBridge |
- ### Connector Styles for AWS Diagrams
+ ### Connector Styles
**Standard data flow:**
```
edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;strokeColor=#545B64;strokeWidth=2;
```
- **Secure/encrypted connection:**
+ **Encrypted connection:**
```
edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=classic;endFill=1;strokeColor=#DD344C;strokeWidth=2;dashed=1;dashPattern=5 5;
```
- **Async/event-driven flow:**
+ **Async/event flow:**
```
edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;strokeColor=#E7157B;strokeWidth=2;dashed=1;
```
- ### Layout Best Practices for AWS Diagrams
-
- 1. **Hierarchy**: External users → Internet → AWS Cloud → Region → VPC → Subnets → Services
- 2. **Left-to-right flow**: User traffic enters from the left, data flows right
- 3. **Top-to-bottom tiers**: Public tier on top, private tier in middle, data tier at bottom
- 4. **Standard sizes**: Service icons 60x60, group containers follow nesting
- 5. **Spacing**: 30-40px between service icons, 20px padding inside containers
- 6. **Grid alignment**: All coordinates in multiples of 10
- 7. **Labels**: Place below icons (`verticalLabelPosition=bottom;verticalAlign=top;`)
-
- ### Opening Diagrams with AWS Libraries
-
- Always include this instruction when generating a `.drawio` file:
+ ### Layout Best Practices
- ```
- Open in draw.io with AWS libraries enabled:
- https://app.diagrams.net/?libs=aws4
- ```
+ 1. **Hierarchy**: External → Internet → AWS Cloud → Region → VPC → Subnets → Services
+ 2. **Flow**: Left-to-right for user traffic, top-to-bottom for tiers
+ 3. **Sizes**: Service icons 60x60, grid-aligned coordinates
+ 4. **Spacing**: 30-40px between icons, 20px padding inside containers
+ 5. **Labels**: Place below icons (`verticalLabelPosition=bottom`)
## Examples
- ### Example 1: Generate a Three-Tier Architecture Diagram
-
- **User Request:**
- "Create an AWS architecture diagram for a three-tier web application with VPC, public subnets for ALB, private subnets for EC2, and RDS in data subnets across two AZs."
+ ### Three-Tier Architecture
- **Generated Output (three-tier-architecture.drawio):**
+ **User Request:** "Create AWS three-tier architecture with VPC, public ALB, private EC2, RDS across 2 AZs."
+ **Generated Output:**
```xml
<mxfile host="app.diagrams.net" agent="Claude" version="24.7.17">
<diagram id="three-tier-1" name="Three-Tier Web App">
<mxGraphModel dx="1434" dy="759" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
- <mxCell id="2" value="Users" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#232F3E;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.users;" vertex="1" parent="1">
+ <mxCell id="2" value="Users" style="...shape=mxgraph.aws4.users;fillColor=#232F3E;..." vertex="1" parent="1">
<mxGeometry x="40" y="340" width="60" height="60" as="geometry" />
</mxCell>
- <mxCell id="3" value="AWS Cloud" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;strokeColor=#232F3E;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#232F3E;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="1">
+ <mxCell id="3" value="AWS Cloud" style="...shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;..." vertex="1" parent="1">
<mxGeometry x="160" y="40" width="960" height="720" as="geometry" />
</mxCell>
- <mxCell id="4" value="us-east-1" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#147EBA;dashed=1;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="3">
+ <mxCell id="4" value="us-east-1" style="...grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;dashed=1;..." vertex="1" parent="3">
<mxGeometry x="20" y="40" width="920" height="660" as="geometry" />
</mxCell>
- <mxCell id="5" value="VPC (10.0.0.0/16)" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_vpc;strokeColor=#8C4FFF;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#AAB7B8;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="4">
+ <mxCell id="5" value="VPC (10.0.0.0/16)" style="...grIcon=mxgraph.aws4.group_vpc;strokeColor=#8C4FFF;..." vertex="1" parent="4">
<mxGeometry x="20" y="40" width="880" height="600" as="geometry" />
</mxCell>
- <mxCell id="6" value="Public Subnet (10.0.1.0/24)" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=11;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;strokeColor=#7AA116;fillColor=#E9F3D2;verticalAlign=top;align=left;spacingLeft=30;fontColor=#248814;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="5">
+ <mxCell id="6" value="Public Subnet" style="...grIcon=mxgraph.aws4.group_security_group;strokeColor=#7AA116;fillColor=#E9F3D2;..." vertex="1" parent="5">
<mxGeometry x="20" y="40" width="400" height="160" as="geometry" />
</mxCell>
- <mxCell id="7" value="Private Subnet (10.0.3.0/24)" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=11;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;strokeColor=#00A4A6;fillColor=#E6F6F7;verticalAlign=top;align=left;spacingLeft=30;fontColor=#147EBA;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="5">
+ <mxCell id="7" value="Private Subnet" style="...grIcon=mxgraph.aws4.group_security_group;strokeColor=#00A4A6;fillColor=#E6F6F7;..." vertex="1" parent="5">
<mxGeometry x="20" y="230" width="400" height="160" as="geometry" />
</mxCell>
- <mxCell id="8" value="Data Subnet (10.0.5.0/24)" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=11;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;strokeColor=#00A4A6;fillColor=#E6F6F7;verticalAlign=top;align=left;spacingLeft=30;fontColor=#147EBA;dashed=0;labelBackgroundColor=none;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;" vertex="1" parent="5">
+ <mxCell id="8" value="Data Subnet" style="...grIcon=mxgraph.aws4.group_security_group;strokeColor=#00A4A6;fillColor=#E6F6F7;..." vertex="1" parent="5">
<mxGeometry x="20" y="420" width="400" height="160" as="geometry" />
</mxCell>
- <mxCell id="12" value="Application<br>Load Balancer" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.applicationLoadBalancer;" vertex="1" parent="6">
+ <mxCell id="12" value="Application<br>Load Balancer" style="...fillColor=#8C4FFF;shape=mxgraph.aws4.applicationLoadBalancer;" vertex="1" parent="6">
<mxGeometry x="170" y="50" width="60" height="60" as="geometry" />
</mxCell>
- <mxCell id="13" value="EC2 Instance" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;gradientColor=#F78E04;gradientDirection=north;fillColor=#D05C17;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ec2;" vertex="1" parent="7">
+ <mxCell id="13" value="EC2 Instance" style="...gradientColor=#F78E04;fillColor=#D05C17;strokeColor=#ffffff;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ec2;" vertex="1" parent="7">
<mxGeometry x="170" y="50" width="60" height="60" as="geometry" />
</mxCell>
- <mxCell id="15" value="RDS Primary" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;gradientColor=#4D72F3;gradientDirection=north;fillColor=#3334B9;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rds;" vertex="1" parent="8">
+ <mxCell id="15" value="RDS Primary" style="...gradientColor=#4D72F3;fillColor=#3334B9;strokeColor=#ffffff;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rds;" vertex="1" parent="8">
<mxGeometry x="170" y="50" width="60" height="60" as="geometry" />
</mxCell>
- <mxCell id="20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;strokeColor=#545B64;strokeWidth=2;" edge="1" parent="1" source="2" target="12">
+ <mxCell id="20" style="...endArrow=open;strokeColor=#545B64;strokeWidth=2;" edge="1" parent="1" source="2" target="12">
<mxGeometry relative="1" as="geometry" />
</mxCell>
- <mxCell id="21" value="HTTPS" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;strokeColor=#545B64;strokeWidth=2;fontSize=11;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="12" target="13">
+ <mxCell id="21" value="HTTPS" style="...endArrow=open;strokeColor=#545B64;strokeWidth=2;fontSize=11;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="12" target="13">
<mxGeometry relative="1" as="geometry" />
</mxCell>
- <mxCell id="23" value="TCP 5432" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;strokeColor=#545B64;strokeWidth=2;fontSize=11;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="13" target="15">
+ <mxCell id="23" value="TCP 5432" style="...endArrow=open;strokeColor=#545B64;strokeWidth=2;fontSize=11;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="13" target="15">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
```
**Opening Instructions:**
```
Open in draw.io with AWS libraries enabled:
https://app.diagrams.net/?libs=aws4
```
- ---
-
- ### Example 2: Serverless API Architecture
-
- **User Request:**
- "Create a serverless architecture diagram with API Gateway, Lambda functions, DynamoDB, and S3 for a REST API."
+ ### Serverless API Architecture
- **Generated Output:** XML file con API Gateway (violet #E7157B), Lambda functions (orange #ED7100), DynamoDB (pink #C925D1), S3 (green #3F8624). See `references/aws-architecture-templates.md` for the complete template.
+ **User Request:** "Create serverless architecture with API Gateway, Lambda, DynamoDB, S3 for REST API."
- ---
+ **Generated Output:** XML with API Gateway (violet), Lambda (orange), DynamoDB (blue), S3 (green). See `references/aws-architecture-templates.md` for complete template.
### Reference Files
- See the `references/` directory for:
- - `aws-shape-reference.md` - Complete AWS4 shape catalog with styles for 50+ AWS services
- - `aws-architecture-templates.md` - Ready-to-use architecture templates (3-tier, serverless, data pipeline)
+ See `references/` directory:
+ - `aws-shape-reference.md` - Complete AWS4 shape catalog with styles for 50+ services
+ - `aws-architecture-templates.md` - Ready-to-use templates (3-tier, serverless, data pipeline)
## Constraints and Warnings
+ ### Validation Workflow
+
+ Always follow this validation checklist before saving:
+
+ 1. **Generate XML** - Create complete `.drawio` file structure
+ 2. **Validate ID uniqueness** - Ensure all IDs are unique integers (0, 1 reserved)
+ 3. **Check parent references** - Verify all `parent` attributes reference existing cells
+ 4. **Verify XML well-formedness** - Close all tags, escape special chars (`&`→`&`, `<`→`<`)
+ 5. **Test in draw.io** - Open at `https://app.diagrams.net/?libs=aws4`
+ 6. **Fix rendering issues** - Adjust positions if elements overlap or render incorrectly
+
### Critical Constraints
- 1. **XML must be well-formed**: Invalid XML will fail to open in draw.io. Always:
- - Close all tags properly (`<mxCell ... />` or `<mxCell>...</mxCell>`)
- - Escape special characters in attributes: `&` → `&`, `<` → `<`, `>` → `>`, `"` → `"`
- - Use proper XML entities for labels (e.g., `<br>` for line breaks)
+ 1. **XML well-formed**: Invalid XML fails to open. Close all tags, escape special characters, use `<br>` for line breaks.
- 2. **ID uniqueness is mandatory**:
- - IDs "0" and "1" are reserved for root cells
- - All other IDs must be unique integers starting from "2"
- - Duplicate IDs will cause the diagram to fail loading
+ 2. **ID uniqueness mandatory**: IDs "0" and "1" reserved. All others must be unique integers from "2". Duplicates cause loading failures.
- 3. **Coordinate system constraints**:
- - All coordinates must be positive integers (x ≥ 0, y ≥ 0)
- - Use multiples of 10 for grid alignment (e.g., x="100" not x="105")
- - Negative coordinates will place elements outside the visible canvas
+ 3. **Coordinate system**: All coordinates positive integers, multiples of 10 for grid alignment.
- 4. **AWS4 library only**:
- - This skill only supports official AWS4 shapes (`mxgraph.aws4.*`)
- - Legacy AWS shapes (`mxgraph.aws3.*`) are not supported
- - Generic shapes should use `fillColor=#232F3E` (AWS gray)
+ 4. **AWS4 library only**: Use official `mxgraph.aws4.*` shapes. Legacy `mxgraph.aws3.*` not supported.
- 5. **Parent references must be valid**:
- - The `parent` attribute must reference an existing cell ID
- - Groups with `container=1` must be referenced correctly by child elements
- - Invalid parent references will cause elements to disappear or render incorrectly
+ 5. **Valid parent references**: Parent must reference existing cell ID. Invalid refs cause elements to disappear.
### Limitations
- - **No dynamic layouts**: Generated XML has fixed positions; manual adjustment in draw.io may be needed for complex diagrams
- - **Single page only**: Multi-page diagrams require multiple `<diagram>` elements (advanced feature)
- - **No custom styling beyond AWS colors**: Deviating from official AWS colors reduces diagram professionalism
- - **No auto-routing**: Connection paths are fixed; rearranging elements requires manual edge adjustment
+ - No dynamic layouts - Manual adjustment may be needed for complex diagrams
+ - Single page only - Multi-page requires multiple `<diagram>` elements
+ - No auto-routing - Rearranging elements requires manual edge adjustment
### Security Considerations
- - **No sensitive data in diagrams**: Avoid including real IP addresses, ARNs, or resource IDs in labels
- - **Review before sharing**: XML files contain plain text that may expose internal architecture details
- - **Validate downloaded templates**: When using `references/aws-architecture-templates.md`, review the XML before deploying to production documentation
+ - No sensitive data - Avoid real IPs, ARNs, or resource IDs in labels
+ - Review before sharing - XML exposes architecture details
+ - Validate templates - Review XML before production documentation
## Best Practices
- 1. **Always use official AWS4 shapes** - Use `mxgraph.aws4.*` shapes for professional look
- 2. **Follow AWS color codes** - Use official AWS service category colors
- 3. **Use proper nesting** - AWS Cloud → Region → VPC → Subnet → Services
- 4. **Label everything** - Service names, CIDR blocks, ports, protocols
- 5. **Show data flow direction** - Use labeled arrows with protocols (HTTPS, gRPC)
- 6. **Include external actors** - Users, corporate data centers, third-party services
- 7. **Keep diagrams focused** - Max 15-20 service icons per diagram
- 8. **Use multi-page** - Separate overview, network, and detail diagrams into pages
- 9. **Add annotations** - Use text labels for important notes (e.g., "Multi-AZ", "Auto Scaling")
- 10. **Validate XML** - Ensure all IDs are unique, all source/target references exist
+ 1. Use official AWS4 shapes (`mxgraph.aws4.*`)
+ 2. Follow AWS service category colors
+ 3. Nest properly: AWS Cloud → Region → VPC → Subnet → Services
+ 4. Label services, CIDR blocks, ports, protocols
+ 5. Show data flow direction with labeled arrows
+ 6. Include external actors (users, corporate DC)
+ 7. Keep diagrams focused (15-20 icons max)
+ 8. Add annotations for important notes ("Multi-AZ", "Auto Scaling")
+ 9. Validate all IDs unique and parent references exist