
Aws Architecture Diagram
- 174 installs
- 850 repo stars
- Updated August 3, 2026
- awslabs/agent-plugins
aws-architecture-diagram is a Claude skill that generates AWS architecture diagrams as draw.io XML from infrastructure code or interactive brainstorming, using official AWS4 icons.
About
This skill generates AWS architecture diagrams as draw.io XML files using official AWS4 icons, matching the style of AWS Reference Architecture diagrams. A developer uses it to visualize existing infrastructure from CloudFormation, CDK, or Terraform code, or to brainstorm an architecture from scratch. It validates the XML and can export to PNG, SVG, or PDF via the draw.io CLI.
- Generates validated AWS architecture diagrams as draw.io XML using official AWS4 icon libraries
- Supports codebase-analysis mode (scan CloudFormation, CDK, Terraform) and interactive brainstorming mode
- Exports .drawio with optional PNG/SVG/PDF and matches official AWS Reference Architecture styling
Aws Architecture Diagram by the numbers
- 174 all-time installs (skills.sh)
- Ranked #539 of 1,879 Documentation skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
aws-architecture-diagram capabilities & compatibility
- Capabilities
- documentation · devops
- Works with
- aws · terraform
- Use cases
- documentation · devops
- Runs
- Runs locally
What aws-architecture-diagram says it does
Generate validated AWS architecture diagrams as draw.io XML using official AWS4 icon libraries.
Exports .drawio files with optional PNG/SVG/PDF export via draw.io desktop CLI.
npx skills add https://github.com/awslabs/agent-plugins --skill aws-architecture-diagramAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 174 |
|---|---|
| repo stars | ★ 850 |
| Last updated | August 3, 2026 |
| Repository | awslabs/agent-plugins ↗ |
What it does
Generate AWS architecture diagrams as draw.io files from infrastructure code or interactive brainstorming.
Who is it for?
Producing AWS architecture diagrams from infrastructure code or a described design
When should I use this skill?
You want to create, generate, or design an AWS architecture or cloud infrastructure diagram
What you get
A validated .drawio architecture diagram with official AWS icons, optionally exported to PNG, SVG, or PDF.
- .drawio architecture diagram file
- Optional PNG/SVG/PDF export
By the numbers
- 2 modes: codebase analysis and brainstorming
- 48x48 service icons inside 120x120 containers
- Legend panel auto-enabled for 7+ services
Files
You are an AWS architecture diagram generator that produces draw.io XML files with official AWS4 icons. The diagrams you produce MUST match the style of official AWS Reference Architecture diagrams — professional title and subtitle, teal numbered step badges with a right sidebar legend, 48x48 service icons inside colored category containers, clean Helvetica typography, and clear data flow.
Workflow
Step 1: Determine Mode
Mode A — Codebase Analysis: If the user says "analyze", "scan", "from code", or references their existing project:
1. Scan for infrastructure files: CloudFormation (AWSTemplateFormatVersion, AWS::*), CDK (cdk.json, construct definitions), Terraform (resource "aws_*") 2. Extract services, relationships, VPC structure, and data flow direction 3. If NO AWS infrastructure files found, scan for non-AWS technologies: Dockerfiles, database configs, API integrations, ML frameworks (pytorch, tensorflow, coreml), message brokers (kafka, rabbitmq). Map discovered technologies using references/general-icons.md 4. For MIXED architectures (AWS + non-AWS): use AWS icons for AWS services, general icons for non-AWS. Same layout rules apply. 5. Confirm discovered architecture with user before generating 6. Ask which diagram type best represents the architecture
Mode B — Brainstorming: If the user describes an architecture or says "brainstorm"/"design"/"from scratch":
1. Ask 3-5 focused questions (purpose, services, scale, security, traffic pattern) 2. Propose the architecture with service recommendations and data flow 3. Iterate if needed, then generate
Step 2: Styling Selections
These are independent of Mode and apply after mode selection:
- Sketch mode: Activated ONLY if user says "sketch", "hand-drawn", or "sketchy". Default: OFF (Helvetica, no sketch attributes). See Sketch Mode in Style Rules below.
- Legend panel: Activated by default for 7+ services or multiple branching paths. Disabled ONLY if user says "no legend", "without legend", "skip steps", or "no sidebar".
- Export format: Check for format keywords (png, svg, pdf). Default:
.drawioonly.
Step 3: Generate Diagram XML
Load references now (not before this step):
1. Read references/xml-rules.md for shape styles, label placement, and structural rules 2. Read references/style-guide.md for colors, fonts, and dark mode 3. Read references/xml-templates-structure.md for XML code blocks 4. Read references/layout-guidelines.md for spacing and edge routing 5. Use the example entries in the table below only as conceptual guidance for edge routing and layout patterns; do not open or read any .drawio files as reference.
Example selection — pick the most relevant example for the user's architecture:
| Diagram Type | Primary Example | Secondary |
|---|---|---|
| Serverless / API | example-saas-backend.drawio | example-event-driven.drawio |
| Event-driven / async | example-event-driven.drawio | example-microservices.drawio |
| Microservices / ECS | example-microservices.drawio | example-complex-platform.drawio |
| Multi-region | example-multi-region-active-active.drawio | — |
| Complex (13+ services) | example-complex-platform.drawio | example-saas-backend.drawio |
| AI / AgentCore | example-agentcore.drawio | example-event-driven.drawio |
| Sketch mode | example-sketch.drawio | + one from above |
1. If the architecture includes non-AWS services, also read references/general-icons.md 2. Generate the XML following all loaded rules and the selected example's patterns 3. Apply styling selections from Step 2
Step 4: Validate and Export
1. Write the .drawio file to ./docs/ 2. PostToolUse hook validates XML automatically (see references/post-processing.md for the fixer pipeline) 3. If validation fails, fix errors and rewrite 4. Run badge overlap fixer: python3 ${PLUGIN_ROOT}/scripts/lib/fix_step_badges.py ./docs/<filename>.drawio 5. After validation passes, generate preview URL:
python3 ${PLUGIN_ROOT}/scripts/lib/drawio_url.py ./docs/<filename>.drawio --open6. If export format requested, run draw.io CLI (see references/cli-export.md)
Defaults
- Mode: Brainstorm (if no codebase context)
- Font:
fontFamily=Helvetica(Comic Sans MS only in sketch mode) - Icon size: 48x48 inside 120x120 containers
- Spacing: 180px horizontal, 120px vertical between service group containers
- Legend: ALWAYS for 7+ services (unless user opts out)
- Sketch mode: OFF (unless user explicitly requests)
- Dark mode:
light-dark()on all structural elements (always enabled) - Export format:
.drawio(unless user requests png/svg/pdf) - Grid: OFF (
grid=0) - File location:
./docs/directory - XML format: Uncompressed, wrapped in
<mxfile><diagram><mxGraphModel>
Error Handling
- XML validation failure: Fix reported errors (malformed tags, missing IDs, invalid shapes), rewrite the file, re-validate
- Shape not found: Check
references/aws4-shapes-services.mdfor validmxgraph.aws4.*names - draw.io CLI not found: Write
.drawiofile only, skip export, inform user to install draw.io desktop - Invalid edge source/target: Verify all
source=andtarget=IDs reference existingmxCellelements - Double hyphens in XML comments:
--is illegal inside<!-- -->per XML spec; use single hyphens or rephrase - Special characters: Escape
&,<,>,"in attribute values
Style Rules
Full style details in references/style-guide.md. Critical rules that MUST be followed:
- Font: ALL text MUST use
fontFamily=Helvetica;(Comic Sans MS only in sketch mode) - Dark mode: ALL structural elements MUST use
light-dark()fills withfillStyle=auto;. See style-guide.md for the full color table. - Region groups: MUST use
container=0(decoration-only). Services useparent="aws-cloud"with absolute coords. - Group fontColor: MUST match the group's
strokeColor(VPC:#8C4FFF, Public subnet:#248814, Private subnet:#147EBA, Region:#00A4A6). NEVER usefontColor=#AAB7B8. - Font hierarchy: Title 30px bold > Subtitle 16px > Group 14px bold > Container 12px bold > Service 10px > Edge 11px
- Category containers: Every 48x48 icon MUST sit inside a 120x120 container with its category tint color. See style-guide.md for the tint color table.
- AgentCore: Use
resIcon=mxgraph.aws4.bedrock_agentcore(NOTmxgraph.aws4.bedrock) - Sketch mode: Only when user requests it. Add
sketch=1;curveFitting=1;jiggle=2to non-icon elements. Keepsketch=0on service icons. - Non-AWS services: Map to the closest general icon using
references/general-icons.md. Same 120x120 container + 48x48 icon pattern. Apply category tint colors by functional role (database, compute, etc.). Labels are critical since icons are generic.
Diagram Types
- VPC/Network: VPC, subnets, security groups, NAT gateways, load balancers with group shapes
- Serverless: API Gateway, Lambda, DynamoDB, S3, Step Functions, EventBridge
- Multi-Region: Multiple regions with replication, Route 53, Global Accelerator
- CI/CD Pipeline: CodeCommit/GitHub -> CodeBuild -> CodeDeploy -> targets
- Data Flow/Analytics: Kinesis, S3, Glue, Athena, Redshift, QuickSight pipelines
- Container: ECS/EKS clusters, ECR, Fargate, load balancing
- Hybrid: On-premises + AWS with Direct Connect, VPN, Transit Gateway
See references/diagram-templates-basic.md and references/diagram-templates-advanced.md for layout patterns.
XML Generation Rules
For detailed XML templates, style strings, and code examples, see references/xml-rules.md. Key structural rules:
Required Structure
Always use the full mxfile wrapper:
<mxfile host="Electron" version="29.6.1">
<diagram name="Page-1" id="diagram-1">
<mxGraphModel dx="1200" dy="800" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<!-- All shapes and edges here -->
</root>
</mxGraphModel>
</diagram>
</mxfile>- Cell
id="0"is the root layer; cellid="1"is the default parent (both always required) - All diagram elements use
parent="1"unless nested inside a container - Use descriptive cell IDs:
vpc-1,lambda-orders,s3-assets,edge-lambda-to-dynamo
Key Principles
- ALWAYS use
mxgraph.aws4.*namespace. UseresourceIcon;resIcon=for main service icons, sub-resource style for components. - Container
value= category label (e.g., "DNS", "Compute"). Iconvalue= service name + optional italic sub-label. NEVER put the service name on the container. - Edges connect to service icons, not containers. Use
exitX/exitYandentryX/entryY(0-1) to control connection sides. - Edge labels are separate child cells with
connectable="0"andrelative="1"geometry. - Region groups use
container=0(decoration-only). VPC/subnets usecontainer=1. - Prefer flat layouts. Only use nested containers for real infrastructure boundaries (VPC, subnets, AZs).
- External actors use visible containers (
fillColor=#f5f5f5), placed BELOW title block at y >= 140.
Layout Guidelines
For detailed spacing rules, edge routing patterns, and placement tables, see references/layout-guidelines.md. Key rules:
- Spacing: 180px horizontal / 120px vertical gaps. For 13+ services, increase to 220px/160px.
- Edge routing: Use
orthogonalEdgeStyle. Add explicit waypoints for non-adjacent routing. Edges leave perpendicular to container face. - Multiple edges: Each outgoing edge MUST exit from a different point. Spread entry points when multiple edges enter the same target.
- Step badges/legend: Teal
#007CBD28x28 badges near arrow sources. Right sidebar legend for 7+ services. Legend height MUST match diagram height. - Auxiliary services: Only CloudWatch, CloudTrail, X-Ray, IAM. No step numbers, no edges. Place in dashed "Auxiliary Services" group inside AWS Cloud boundary.
- All other services are primary — MUST have edges and step numbers.
File Naming
Each diagram gets a descriptive filename in kebab-case, placed in ./docs/ (e.g., docs/healthcare-appointment-agent.drawio, docs/3-tier-vpc-webapp.drawio). Always create a new file unless the user explicitly asks to update an existing diagram.
Output
1. Create the docs/ directory if it does not exist 2. Derive the filename from the user's prompt (see File Naming above) 3. Always create new files unless the user explicitly asks to update an existing diagram 4. Save the diagram to ./docs/<descriptive-name>.drawio 5. After writing, the PostToolUse hook will automatically: a. Validate the XML (structure, AWS shapes, edges, geometry) b. If validation passes, generate a draw.io preview URL 6. If validation fails, fix the errors and rewrite the file 7. Only after validation passes, generate the browser preview link by running:
python3 ${PLUGIN_ROOT}/scripts/lib/drawio_url.py ./docs/<filename>.drawio --openThis compresses the XML and opens app.diagrams.net with the diagram loaded instantly. Do NOT run this if validation failed. 8. If the user requested an export format (png, svg, pdf): a. Check if draw.io desktop CLI is available b. Export with --embed-diagram to ./docs/<filename>.drawio.<format> c. Delete the intermediate .drawio file on success 9. Always present to the user:
- File path
- Diagram type and services included
- Validation status
- The draw.io preview URL (clickable link to open in browser)
- A recommended alt text (concise, under 100 characters, describing the diagram's purpose — not "diagram of...")
CRITICAL: XML Well-Formedness
- NEVER use double hyphens (`--`) inside XML comments.
--is illegal inside<!-- -->per the XML spec and causes parse errors. Use single hyphens or rephrase. - Escape special characters in attribute values:
&,<,>," - Always use unique
idvalues for eachmxCell
Important Rules
- NEVER use compressed/base64 diagram content
- NEVER invent shape names — only use shapes from
references/aws4-shapes-services.md - ALWAYS wrap XML in
<mxfile><diagram><mxGraphModel>— not bare<mxGraphModel> - ALWAYS include cells id="0" and id="1" as root and default layer
- ALWAYS use
resourceIcon;resIcon=style for main service icons - ALWAYS set
container=1;pointerEvents=0;on group shapes - ALWAYS validate edge source/target IDs reference existing cells
- ALWAYS include a title block at the top of every diagram
- ALWAYS place 48x48 service icons inside colored category containers
- ALWAYS use
fontFamily=Helvetica;in every style attribute - For complex diagrams (7+ services), ALWAYS add step badges and legend
- Use descriptive cell IDs, not random strings (e.g.,
vpc-1,lambda-orders, notcell-47) - Add italic sub-labels to service icons to clarify their role in the architecture
- Only include services the user explicitly mentions or that are core to the data flow. Do NOT add cross-cutting concerns (IAM, CloudWatch, CloudTrail, KMS, S3 for logs, etc.) unless the user asks for them
- Include a title/label on the diagram describing the architecture
- NEVER set a
backgroundattribute on mxGraphModel — any hardcoded background breaks dark mode adaptive contrast
Reference Priority
When generating diagrams, follow this priority order:
1. This skill's XML generation rules and style guide (ALWAYS authoritative) 2. This skill's example .drawio files in references/ (Step 3 selection table) 3. The user's existing .drawio files ONLY when explicitly requested ("match my style", "update my diagram")
Do NOT proactively read .drawio files from the user's project unless they specifically ask you to reference or modify them. The skill's own examples and rules always take precedence for style and structure.
AWS4 Sub-Resource and Misc Shapes
These are service sub-components and utility shapes, not main service icons. Use shape=mxgraph.aws4.{name} style (not resourceIcon) at 48x48.
Sub-Resource Icons
Alexa: alexa_enabled_device, alexa_skill, alexa_smart_home_skill, alexa_voice_service
Application: application_discovery_service_aws_agentless_collector, application_discovery_service_aws_discovery_agent, application_discovery_service_migration_evaluator_collector, application_load_balancer
Aws: aws_backup_for_aws_cloudformation, aws_backup_legal_hold, aws_backup_support_for_amazon_fsx_for_netapp_ontap, aws_backup_vault_lock, aws_backup_virtual_machine_monitor, aws_cloud, aws_glue_data_quality, aws_glue_for_ray, aws_user_notifications
Backup: backup_audit_manager, backup_aws_backup_support_for_amazon_s3, backup_aws_backup_support_for_vmware_workloads, backup_backup_plan, backup_backup_restore, backup_compliance_reporting, backup_compute, backup_database, backup_gateway, backup_plan, backup_recovery_point_objective, backup_recovery_time_objective, backup_restore, backup_storage, backup_vault, backup_virtual_machine, backup_virtual_machine_monitor
Braket: braket_chandelier, braket_chip, braket_embedded_simulator, braket_managed_simulator, braket_noise_simulator, braket_qpu, braket_simulator, braket_simulator_1, braket_simulator_2, braket_simulator_3, braket_simulator_4, braket_state_vector, braket_tensor_network
Checklist: checklist_cost, checklist_fault_tolerant, checklist_performance, checklist_security
Cloud: cloud_digital_interface, cloud_extension_ros, cloud_map_resource, cloud_wan_segment_network, cloud_wan_transit_gateway_route_table_attachment, cloud_wan_virtual_pop
Cloudwatch: cloudwatch_cross_account_observability, cloudwatch_data_protection, cloudwatch_evidently, cloudwatch_logs, cloudwatch_metrics_insights, cloudwatch_rum, cloudwatch_synthetics
Container: container_1, container_2, container_3, container_registry_image
Data: data_encryption_key, data_exchange_for_apis, data_lake_resource_icon, data_set, data_stream, data_table
Datazone: datazone_business_data_catalog, datazone_data_portal, datazone_data_projects
Db: db_instance, db_instance_read_replica, db_instance_standby, db_on_instance, db_on_instance2
Dynamodb: dynamodb_dax, dynamodb_standard_access_table_class, dynamodb_standard_infrequent_access_table_class, dynamodb_stream
Ec2: ec2_aws_microservice_extractor_for_net, ec2_c6a_instance, ec2_c6gn_instance, ec2_c6i_instance, ec2_c6in_instance, ec2_c7g_instance, ec2_c7gn_instance, ec2_dl1_instance, ec2_g5_instance, ec2_g5g_instance, ec2_hpc6a_instance, ec2_hpc6id_instance, ec2_i4i_instance, ec2_im4gn_instance, ec2_inf2_instance, ec2_instance_contents, ec2_is4gen_instance, ec2_m1_mac_instance, ec2_m6a_instance, ec2_m6i_instance, ec2_m6idn_instance, ec2_m6in_instance, ec2_p4de_instance, ec2_r6a_instance, ec2_r6i_instance, ec2_r6idn_instance, ec2_r6in_instance, ec2_r7iz_instance, ec2_trn1_instance, ec2_vt1_instance, ec2_x2gd_instance, ec2_x2idn_instance, ec2_x2iedn_instance, ec2_x2iezn_instance
Ecs: ecs_copilot_cli, ecs_service, ecs_service_connect, ecs_task
Elastic: elastic_block_store_amazon_data_lifecycle_manager, elastic_block_store_volume_gp3, elastic_file_system_elastic_throughput, elastic_file_system_infrequent_access, elastic_file_system_intelligent_tiering, elastic_file_system_one_zone, elastic_file_system_one_zone_infrequent_access, elastic_file_system_one_zone_standard, elastic_file_system_standard, elastic_file_system_standard_infrequent_access, elastic_inference, elastic_ip_address, elastic_network_adapter, elastic_network_interface
Elasticache: elasticache_for_memcached, elasticache_for_redis, elasticache_for_valkey
Emr: emr_engine, emr_engine_mapr_m3, emr_engine_mapr_m5, emr_engine_mapr_m7
Event: event_event_based, event_resource, event_time_based
Eventbridge: eventbridge_custom_event_bus_resource, eventbridge_default_event_bus_resource, eventbridge_pipes, eventbridge_saas_partner_event_bus_resource, eventbridge_scheduler, eventbridge_schema, eventbridge_schema_registry
File: file_cache_hybrid_nfs_linked_datasets, file_cache_on_premises_nfs_linked_datasets, file_cache_s3_linked_datasets, file_gateway, file_system
Generic: generic_application, generic_database, generic_firewall
Group: group_availability_zone, group_elastic_load_balancing, group_subnet, group_vpc
Illustration: illustration_desktop, illustration_devices, illustration_notification, illustration_office_building, illustration_users
Internet: internet_alt1, internet_alt2, internet_alt22, internet_gateway
Iot: iot_analytics_channel, iot_analytics_data_store, iot_analytics_dataset, iot_analytics_pipeline, iot_core_device_advisor, iot_core_device_location, iot_device_defender_iot_device_jobs, iot_device_gateway, iot_device_jobs_resource, iot_device_management_fleet, iot_device_tester, iot_greengrass_artifact, iot_greengrass_component, iot_greengrass_component_machine_learning, iot_greengrass_component_nucleus, iot_greengrass_component_private, iot_greengrass_component_public, iot_greengrass_interprocess_communication, iot_greengrass_protocol, iot_greengrass_recipe, iot_greengrass_stream_manager, iot_lorawan_protocol, iot_over_the_air_update, iot_sailboat, iot_sitewise_asset, iot_sitewise_asset_hierarchy, iot_sitewise_asset_model, iot_sitewise_asset_properties, iot_sitewise_data_streams, iot_thing_freertos_device, iot_thing_humidity_sensor, iot_thing_industrial_pc, iot_thing_plc, iot_thing_relay, iot_thing_stacklight, iot_thing_temperature_humidity_sensor, iot_thing_temperature_sensor, iot_thing_temperature_vibration_sensor, iot_thing_vibration_sensor
Location: location_service_geofence, location_service_map, location_service_place, location_service_routes, location_service_track
Mainframe: mainframe_modernization_analyzer, mainframe_modernization_compiler, mainframe_modernization_converter, mainframe_modernization_developer, mainframe_modernization_runtime
Migration: migration_hub_refactor_spaces_applications, migration_hub_refactor_spaces_environments, migration_hub_refactor_spaces_services
Network: network_access_control_list, network_firewall_endpoints, network_load_balancer
Opensearch: opensearch_dashboards, opensearch_ingestion, opensearch_observability, opensearch_service_cluster_administrator_node, opensearch_service_data_node, opensearch_service_index, opensearch_service_traces, opensearch_service_ultrawarm_node
Organizations: organizations_account, organizations_account2, organizations_management_account, organizations_management_account2, organizations_organizational_unit, organizations_organizational_unit2
Rds: rds_blue_green_deployments, rds_instance, rds_instance_alt, rds_mariadb_instance, rds_mariadb_instance_alt, rds_multi_az, rds_multi_az_db_cluster, rds_mysql_instance, rds_mysql_instance_alt, rds_optimized_writes, rds_oracle_instance, rds_oracle_instance_alt, rds_piop, rds_piops, rds_postgresql_instance, rds_postgresql_instance_alt, rds_proxy, rds_proxy_alt, rds_sql_server_instance, rds_sql_server_instance_alt, rds_trusted_language_extensions_for_postgresql
Redshift: redshift_auto_copy, redshift_data_sharing_governance, redshift_ml, redshift_query_editor_v20_light, redshift_ra3, redshift_streaming_ingestion
Route: route_53_application_recovery_controller, route_53_readiness_checks, route_53_resolver, route_53_resolver_dns_firewall, route_53_resolver_query_logging, route_53_routing_controls, route_table
S3: s3_batch_operations, s3_express_one_zone, s3_file_gateway, s3_multi_region_access_points, s3_object_lambda, s3_object_lambda_access_points, s3_object_lock, s3_on_outposts, s3_replication_time_control, s3_select, s3_storage_lens, s3_tables, s3_vectors
Sagemaker: sagemaker_canvas, sagemaker_geospatial_ml, sagemaker_model, sagemaker_notebook, sagemaker_shadow_testing, sagemaker_train
Simple: simple_ad, simple_storage_service_directory_bucket, simple_storage_service_s3_glacier_instant_retrieval
Systems: systems_manager_application_manager, systems_manager_change_calendar, systems_manager_change_manager, systems_manager_compliance, systems_manager_distributor, systems_manager_opscenter, systems_manager_session_manager
Transfer: transfer_family_aws_as2, transfer_for_ftp_resource, transfer_for_ftps_resource, transfer_for_sftp_resource
Virtual: virtual_gateway, virtual_node, virtual_private_cloud, virtual_router, virtual_service, virtual_tape_library
Vpc: vpc_access_points, vpc_carrier_gateway, vpc_network_access_analyzer, vpc_reachability_analyzer, vpc_traffic_mirroring, vpc_virtual_private_cloud_vpc
Waf: waf_bad_bot, waf_bot, waf_bot_control, waf_labels, waf_managed_rule, waf_rule
Workspaces: workspaces_family_amazon_workspaces, workspaces_family_amazon_workspaces_core, workspaces_workspaces_web
Misc Shapes
action, actuator, addon, agent, agent2, alarm, alert, ami, application, apps, archive, attribute, attributes, automation, bank, bucket, budgets, bycicle, c5a, c5ad, c5d, c6gd, camera, camera2, car, cart, chat, checklist, client, cloudsearch, cloudwatch, cluster, connector, credentials, deployment, deployments, disk, document, documents, documents2, documents3, echo, email, endpoint, endpoints, event, factory, finding, firetv, folder, folders, forums, g4dn, gamelift, gateway, gear, generic, globe, house, i2, i3en, inf1, inferentia, instance, instance2, instances, internet, inventory, item, items, layers, lightbulb, logs, m5n, mesh, message, metrics, monitoring, multimedia, mxgraph.aws4, namespace, notebook, nova, object, peering, permissions, policy, privatelink, question, queue, r5n, recover, registry, rekognition, replication, rescue, resource, resources, role, router, rule, sensor, servers, service, servo, shadow, shield2, simulation, simulator, snapshot, stack, stack2, sts, table, template, thermostat, topic, travel, user, users, utility, vault, volume, windfarm
Other Sub-Resource Icons
a1_instance, access_analyzer, ad_connector, amplify_aws_amplify_studio, athena_data_source_connectors, aurora_instance, aurora_instance_alt, authenticated_user, auto_scaling, blockchain_resource, bucket_with_objects, c4_instance, c5_instance, c5n_instance, c6g_instance, cache_node, cached_volume, certificate_manager, certificate_manager_2, change_set, classic_load_balancer, cloudfront_functions, cloudtrail_cloudtrail_lake, coffee_pot, cold_storage, corporate_data_center, corporate_data_center2, custom_event_bus_resource, customer_gateway, d2_instance, d3_instance, d3en_instance, database_migration_workflow_job, datasync_discovery, default_event_bus_resource, dense_compute_node, dense_storage_node, desired_state, development_environment, devops_guru_insights, documentdb_elastic_clusters, door_lock, download_distribution, edge_location, eks_on_outposts, email_2, email_notification, encrypted_data, external_sdk, external_toolkit, f1_instance, filtering_rule, firetv_stick, fleet_management, flow_logs, fsx_file_gateway, g3_instance, g4ad_instance, game_tech, game_tech2, gateway_load_balancer, general_access_points, git_repository, glacier_deep_archive, global_secondary_index, glue_crawlers, glue_data_catalog, h1_instance, habana_gaudi, hardware_board, hdfs_cluster, high_memory_instance, hosted_zone, http2_protocol, http_notification, http_protocol, i3_instance, identity_access_management_iam_roles_anywhere, import_export, instance_with_cloudwatch, instance_with_cloudwatch2, instances_2, intelligent_tiering, json_script, key_management_service_external_key_store, lambda_function, license_manager_application_discovery, license_manager_license_blending, long_term_security_credential, m4_instance, m5_instance, m5a_instance, m5d_instance, m5dn_instance, m5n_instance, m5zn_instance, m6g_instance, m6gd_instance, mac_instance, magnifying_glass, magnifying_glass_2, maintenance_windows, managed_ms_ad, management_console2, mediaconnect_gateway, medical_emergency, mfa_token, mobile_client, mobile_hub, mq_broker, mqtt_protocol, ms_sql_instance, ms_sql_instance_alternate, msk_amazon_msk_connect, multiple_volumes_resource, mysql_db_instance, mysql_db_instance_alternate, nat_gateway, non_cached_volume, office_building, one_zone_ia, open_3d_engine, opsworks_apps, opsworks_permissions, optimized_instance, oracle_db_instance, oracle_db_instance_alternate, p2_instance, p3_instance, p3dn_instance, p4_instance, p4d_instance, parameter_store, patch_manager, permissions_2, pinpoint_journey, police_emergency, postgresql_instance, programming_language, quicksight_paginated_reports, r4_instance, r5_instance, r5a_instance, r5ad_instance, r5b_instance, r5d_instance, r5gd_instance, r5n_instance, r6g_instance, rdn_instance, rekognition_image, rekognition_video, replication_time_control, reported_state, rule_2, rule_3, run_command, saas_event_bus_resource, saml_token, search_documents, security_group, security_hub_finding, shield_shield_advanced, source_code, spot_instance, sql_primary, sql_replica, ssl_padlock, standard_ia, state_manager, streaming_distribution, sts_alternate, t2_instance, t3_instance, t3a_instance, t4g_instance, tape_gateway, tape_storage, temporary_security_credential, textract_analyze_lending, topic_2, traditional_server, trainium_instance, transit_gateway_attachment, volume_gateway, vpn_connection, vpn_gateway, well_architected_tool, work_package, x1_instance, x1_instance2, x1e_instance, z1d_instance
AWS4 Service Icon Shapes
All service icons use resourceIcon;resIcon=mxgraph.aws4.{name} style at 78x78. Category colors are in style-guide.md.
Customer Enablement: activate, customer_enablement, iq, managed_services, professional_services, repost, repost_private, support, training_certification
Business Applications: alexa_for_business, appfabric, business_application, chime, chime_sdk, connect, end_user_messaging, honeycode, pinpoint, quick_suite, simple_email_service, supply_chain, wickr, workdocs, workmail
General: all_products, general, marketplace, productIcon, resourceIcon
Front End Web Mobile: amplify, device_farm, location_service, mobile
Analytics: analytics, athena, clean_rooms, cloudsearch2, data_exchange, data_pipeline, datazone, elasticsearch_service, emr, entity_resolution, finspace, glue, glue_databrew, glue_elastic_views, kinesis, kinesis_data_analytics, kinesis_data_firehose, kinesis_data_streams, kinesis_video_streams, lake_formation, managed_service_for_apache_flink, managed_streaming_for_kafka, quicksight, redshift, sagemaker_2, sql_workbench
AI/ML: apache_mxnet_on_aws, app_studio, augmented_ai, bedrock, bedrock_agentcore, codeguru_2, codewhisperer, comprehend, comprehend_medical, deep_learning_amis, deep_learning_containers, deepcomposer, deeplens, deepracer, devops_guru, elastic_inference_2, forecast, fraud_detector, healthimaging, healthlake, healthscribe, kendra, lex, lookout_for_equipment, lookout_for_metrics, lookout_for_vision, machine_learning, monitron, neuron_ml_sdk, nova2, omics, panorama, personalize, polly, q, rekognition_2, sagemaker, sagemaker_ground_truth, sagemaker_studio_lab, tensorflow_on_aws, textract, torchserve, transcribe, translate
Application Integration: api_gateway, appflow, application_integration, appsync, b2b_data_interchange, eventbridge, express_workflow, managed_workflows_for_apache_airflow, mobile_application, mq, sns, sqs, step_functions
Management Governance: app_config, app_wizard, application_auto_scaling, autoscaling, backint_agent, chatbot, cloudformation, cloudtrail, cloudwatch_2, codeguru, config, control_tower, devops_agent, distro_for_opentelemetry, license_manager, managed_service_for_grafana, managed_service_for_prometheus, management_and_governance, management_console, opsworks, organizations, partner_central, personal_health_dashboard, proton, resilience_hub, resource_explorer, service_catalog, service_management_connector, systems_manager, systems_manager_incident_manager, telco_network_builder, trusted_advisor, user_notifications, well_architect_tool
Networking: app_mesh, application_recovery_controller, client_vpn, cloud_directory, cloud_map, cloud_wan, cloudfront, direct_connect, global_accelerator, networking_and_content_delivery, private_5g, route_53, rtb_fabric, site_to_site_vpn, transit_gateway, verified_access, vpc, vpc_lattice, vpc_privatelink
Compute: app_runner _(maintenance mode — use ecs/fargate instead)_, auto_scaling2, auto_scaling3, batch, bottlerocket, compute, compute_optimizer, ec2, ec2_image_builder, elastic_beanstalk, elastic_fabric_adapter, elastic_load_balancing, elastic_vmware_service, fargate, genomics_cli, lambda, lightsail, lightsail_for_research, local_zones, nice_dcv, nice_enginframe, nitro_enclaves, outposts, outposts_1u_and_2u_servers, outposts_family, parallel_cluster, parallel_computing_service, serverless_application_repository, simspace_weaver, vmware_cloud_on_aws, wavelength
IoT (Thing shapes): iot, iot_core, iot_greengrass, iot_analytics, iot_events, iot_sitewise, iot_device_defender, iot_device_management, iot_things_graph, iot_1click, iot_button, iot_certificate, iot_action, iot_actuator, iot_alexa_enabled_device, iot_alexa_skill, iot_alexa_voice_service, iot_bank, iot_bicycle, iot_camera, iot_car, iot_cart, iot_coffee_pot, iot_desired_state, iot_device_gateway, iot_dog, iot_door_lock, iot_factory, iot_fire_tv, iot_fire_tv_stick, iot_generic, iot_house, iot_http, iot_http2, iot_lambda, iot_lightbulb, iot_medical_emergency, iot_mqtt, iot_over_the_air_update, iot_police_emergency, iot_policy, iot_reported_state, iot_rule, iot_sensor, iot_servo, iot_shadow, iot_simulator, iot_thermostat, iot_topic, iot_travel, iot_utility, iot_windfarm, freertos, iot_device_defender2, iot_fleet_hub, iot_expresslink, iot_fleetwise, iot_roborunner, iot_twinmaker
Developer Tools: application_composer, cloud9, cloud_control_api, cloud_development_kit, cloudshell, codeartifact, codebuild, codecatalyst, codecommit, codedeploy, codepipeline, codestar, command_line_interface, corretto, developer_tools, fault_injection_simulator, tools_and_sdks, xray
Cloud Financial Management: application_cost_profiler, budgets_2, cost_and_usage_report, cost_explorer, cost_management, custom_billing_manager, reserved_instance_reporting, savings_plans
Migration Modernization: application_discovery_service, cloudendure_migration, data_transfer_terminal, datasync, mainframe_modernization, migration_and_transfer, migration_evaluator, migration_hub, server_migration_service, snowball, snowball_edge, snowmobile, transfer_family, transfer_for_sftp, transform
End User Computing: appstream_20, desktop_and_app_streaming, worklink, workspaces, workspaces_family, workspaces_thin_client
AR/VR: ar_vr, sumerian
Security: artifact, audit_manager, certificate_manager_3, cloudhsm, cognito, detective, directory_service, firewall_manager, guardduty, identity_and_access_management, inspector, key_management_service, macie, network_firewall, payment_cryptography, private_certificate_authority, resource_access_manager, secrets_manager, security_agent, security_hub, security_identity_and_compliance, security_incident_response, security_lake, shield, signer, single_sign_on, verified_permissions, waf
Database: aurora, database, database_migration_service, documentdb_with_mongodb_compatibility, dynamodb, elasticache, keyspaces, managed_apache_cassandra_service, memorydb_for_redis, neptune, oracle_database_at_aws, rds, rds_on_vmware, timestream
Storage: backup, cloudendure_disaster_recovery, efs_infrequentaccess, efs_standard, elastic_block_store, elastic_file_system, file_cache, fsx, fsx_for_lustre, fsx_for_netapp_ontap, fsx_for_openzfs, fsx_for_windows_file_server, glacier, infrequent_access_storage_class, s3, s3_on_outposts_storage, snowcone, storage, storage_gateway
Blockchain: blockchain, managed_blockchain, quantum_ledger_database
Quantum Technologies: braket, quantum_technologies
Contact Center: contact_center
Containers: containers, ecr, ecs, ecs_anywhere, eks, eks_anywhere, eks_cloud, eks_distro, red_hat_openshift
Customer Engagement: customer_engagement
Media Services: deadline_cloud, elastic_transcoder, elemental, elemental_link, elemental_mediaconnect, elemental_mediaconvert, elemental_medialive, elemental_mediapackage, elemental_mediastore, elemental_mediatailor, interactive_video, media_services, nimble_studio, thinkbox_deadline, thinkbox_draft, thinkbox_frost, thinkbox_krakatoa, thinkbox_sequoia, thinkbox_stoke, thinkbox_xmesh
IoT (Service Icons): freertos, greengrass, internet_of_things, iot_1click, iot_analytics, iot_button, iot_core, iot_device_defender, iot_device_management, iot_edukit, iot_events, iot_expresslink, iot_fleetwise, iot_roborunner, iot_sitewise, iot_things_graph, iot_twinmaker
Games: gamekit, gamelift_2, gamelift_streams, games, gamesparks, lumberyard, open_3d_engine_2
Satellite: ground_station, satellite
Robotics: robomaker, robotics
Serverless: serverless
Group Shapes (for boundaries)
group_account, group_auto_scaling_group, group_aws_cloud, group_aws_cloud_alt, group_aws_step_functions_workflow, group_corporate_data_center, group_ec2_instance_contents, group_elastic_beanstalk, group_iot_greengrass, group_iot_greengrass_deployment, group_on_premise, group_region, group_security_group, group_spot_fleet, group_vpc2
AgentCore: Use resIcon=mxgraph.aws4.bedrock_agentcore (NOT mxgraph.aws4.bedrock) for Amazon Bedrock AgentCore services (Gateway, Runtime, Memory). See references/example-agentcore.drawio.
draw.io CLI Export Reference
The draw.io desktop app includes a CLI for exporting diagrams to PNG, SVG, or PDF.
Locating the CLI
Try drawio first (works if on PATH), then fall back to platform-specific path:
- macOS:
/Applications/draw.io.app/Contents/MacOS/draw.io - Linux:
drawio(typically on PATH via snap/apt/flatpak) - Windows:
"C:\Program Files\draw.io\draw.io.exe"
Use which drawio (or where drawio on Windows) to check PATH first.
Export Command
drawio -x -f <format> -e -b 10 -o <output> <input.drawio>Key flags:
-x/--export: export mode (required)-f/--format: output format (png, svg, pdf)-e/--embed-diagram: embed diagram XML in the output (remains editable in draw.io)-o/--output: output file path-b/--border: border width (default: 0, use 10)-t/--transparent: transparent background (PNG only)-s/--scale: scale the diagram size--width/--height: fit into specified dimensions (preserves aspect ratio)-a/--all-pages: export all pages (PDF only)-p/--page-index: select a specific page (0-based)
Supported Formats
| Format | Embed XML | Notes |
|---|---|---|
png | Yes (-e) | Viewable everywhere, editable in draw.io |
svg | Yes (-e) | Scalable, editable in draw.io |
pdf | Yes (-e) | Printable, editable in draw.io |
File Naming
Use double extensions: architecture.drawio.png, architecture.drawio.svg, architecture.drawio.pdf. This signals the file contains embedded diagram XML. Opening in draw.io recovers the editable diagram. After a successful export, delete the intermediate .drawio file since the exported file contains the full diagram.
Opening the Result
- macOS:
open <file> - Linux:
xdg-open <file> - Windows:
start <file>
Diagram Templates — Advanced
Multi-region, hybrid, and sizing guidelines. See diagram-templates-basic.md for basic patterns.
Multi-Region Active-Active
Layout (two regions side by side):
[Route 53 (latency-based routing)] at top
[Region 1: us-east-1] [Region 2: eu-west-1]
[CloudFront] [CloudFront]
[ALB] [ALB]
[ECS/Lambda] [ECS/Lambda]
[Aurora (primary)] ←──replication──→ [Aurora (replica)]
[DynamoDB Global Table] ←──sync──→ [DynamoDB Global Table]
[S3] ←──replication──→ [S3]
[Global Accelerator] optionally at topHybrid Architecture (On-Premises + AWS)
Layout:
[Corporate Data Center]
[Traditional Server]
[Database]
[Active Directory]
←── [Direct Connect] / [Site-to-Site VPN] ──→
[AWS Cloud]
[Transit Gateway]
[VPC - Production]
[workloads]
[VPC - Shared Services]
[Directory Service]
[Systems Manager]
[VPC - Development]
[workloads]Sizing Guidelines for Templates
- Small diagram (3-5 services): pageWidth=800, pageHeight=600
- Medium diagram (6-12 services): pageWidth=1169, pageHeight=827 (default A3)
- Large diagram (13+ services): pageWidth=1600, pageHeight=1200
- Multi-region: pageWidth=2000, pageHeight=1000
- Complex VPC: pageWidth=1400, pageHeight=1000
Diagram Templates — Basic
Ready-to-use patterns for common AWS architectures. Use these as starting points.
Serverless Web Application
Services: CloudFront → API Gateway → Lambda → DynamoDB, with S3 for static assets and Cognito for auth.
Layout (left to right):
[Users] → [CloudFront] → [S3 Bucket (static)]
→ [API Gateway] → [Lambda] → [DynamoDB]
→ [S3 Bucket (data)]
[Cognito] connected to [API Gateway] (auth)Typical cell arrangement:
- Users icon at x=50
- CloudFront at x=250
- S3 static at x=450, y offset up
- API Gateway at x=450
- Lambda at x=650
- DynamoDB at x=850
- Cognito at x=450, y offset down
VPC with Public/Private Subnets
Layout (nested groups):
[AWS Cloud]
[Region]
[VPC 10.0.0.0/16]
[AZ-1]
[Public Subnet 10.0.1.0/24]
- NAT Gateway
- ALB
[Private Subnet 10.0.2.0/24]
- EC2 / ECS instances
- RDS (primary)
[AZ-2]
[Public Subnet 10.0.3.0/24]
- NAT Gateway
[Private Subnet 10.0.4.0/24]
- EC2 / ECS instances
- RDS (standby)
[Internet Gateway] at VPC boundary
[Users] → [Internet Gateway] → [ALB] → [EC2/ECS]Microservices on ECS/EKS
Layout:
[Route 53] → [CloudFront] → [ALB]
[VPC]
[ECS/EKS Cluster]
[Service A] ←→ [Service B] ←→ [Service C]
[ElastiCache] connected to services
[RDS Aurora] connected to services
[ECR] connected to [ECS/EKS Cluster]
[CloudWatch] monitoring all servicesData Pipeline / Analytics
Layout (left to right, pipeline flow):
[Data Sources]
- [Kinesis Data Streams] ← external data
- [S3 Bucket (raw)] ← batch uploads
[Processing]
- [Kinesis Data Firehose] → [S3 (processed)]
- [Glue ETL Jobs] → [S3 (curated)]
- [Lambda] for real-time transforms
[Storage]
- [S3 Data Lake] (multiple buckets)
- [Glue Data Catalog]
[Analytics]
- [Athena] → queries S3
- [Redshift] → warehouse
- [QuickSight] → dashboards
[Lake Formation] governing access across the pipelineCI/CD Pipeline
Layout (left to right, pipeline stages):
[Developer] → [CodeCommit] → [CodePipeline] → [CodeBuild] → [S3 (artifacts)]
[CodePipeline] → [CodeDeploy (staging)] → [Manual Approval] → [CodeDeploy (prod)]
[ECR] if deploying containers
[CloudWatch] monitoring, [SNS] for notifications<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.1 Chrome/142.0.7444.265 Electron/39.8.0 Safari/537.36" version="29.6.1">
<diagram name="Page-1" id="diagram-1">
<mxGraphModel dx="1005" dy="1177" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="h1VfG4kSXgm72098ykto-1" parent="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_aws_cloud;strokeColor=light-dark(#232F3E,#E0ECFB);fillColor=light-dark(#232F3E0D,#90C7FF0D);fillStyle=auto;verticalAlign=top;align=left;spacingLeft=30;fontColor=#232F3E;dashed=0;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;fontFamily=Helvetica;" value="<font style="color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">AWS Cloud</font>" vertex="1">
<mxGeometry height="645" width="1034" x="56" y="116" as="geometry" />
</mxCell>
<mxCell id="h1VfG4kSXgm72098ykto-2" parent="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=14;fontStyle=1;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fillColor=light-dark(#0C7B7D0D,#0C7B7D0D);fillStyle=auto;verticalAlign=top;align=left;spacingLeft=30;fontColor=#00A4A6;dashed=1;container=0;pointerEvents=0;collapsible=0;recursiveResize=0;fontFamily=Helvetica;" value="Region: us-east-1" vertex="1">
<mxGeometry height="606" width="1011" x="70" y="147" as="geometry" />
</mxCell>
<mxCell id="title-group" connectable="0" parent="1" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="83" width="1400" x="50" y="30" as="geometry" />
</mxCell>
<mxCell id="title-text" parent="title-group" style="text;html=1;resizable=1;points=[];autosize=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=30;fontStyle=1;fontFamily=Helvetica;" value="AI Agent System with Amazon Bedrock AgentCore" vertex="1">
<mxGeometry height="42" width="800" as="geometry" />
</mxCell>
<mxCell id="subtitle-text" parent="title-group" style="text;html=1;resizable=0;points=[];autosize=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=16;fontFamily=Helvetica;" value="Bedrock AgentCore Gateway, Runtime orchestration, Memory for context, Lambda tools, and DynamoDB storage" vertex="1">
<mxGeometry height="25" width="800" x="5" y="40" as="geometry" />
</mxCell>
<mxCell id="title-separator" parent="title-group" style="line;strokeWidth=2;html=1;fontSize=14;strokeColor=#FF9900;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="10" width="1390" x="5" y="70" as="geometry" />
</mxCell>
<mxCell id="users-container" parent="1" style="fillColor=#f5f5f5;strokeColor=light-dark(#666666,#D4D4D4);rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1;perimeterSpacing=0;" value="Users" vertex="1">
<mxGeometry height="98" width="107" x="80" y="366" as="geometry" />
</mxCell>
<mxCell id="users-icon" parent="users-container" 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=#232F3D;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.users;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="48" width="48" x="30" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-gateway" parent="1" style="fillColor=#E0F2F1;strokeColor=#01A88D;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#01A88D;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="AI Gateway" vertex="1">
<mxGeometry height="130" width="140" x="310" y="350" as="geometry" />
</mxCell>
<mxCell id="PeoHFyn3k8SIy_iLFbth-2" parent="svc-group-gateway" 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=#01A88D;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.bedrock_agentcore;" value="<span style="font-size: 10px;">Bedrock</span><div style="font-size: 10px;">AgentCore Gateway</div><div style="font-size: 10px;"><i>request routing</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="46" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-runtime" parent="1" style="fillColor=#E0F2F1;strokeColor=#01A88D;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#01A88D;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Orchestration" vertex="1">
<mxGeometry height="130" width="140" x="570" y="350" as="geometry" />
</mxCell>
<mxCell id="PeoHFyn3k8SIy_iLFbth-3" parent="svc-group-runtime" 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=#01A88D;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.bedrock_agentcore;" value="<span style="font-size: 10px;">Bedrock</span><div style="font-size: 10px;">AgentCore Runtime</div><div style="font-size: 10px;"><i>agent orchestration</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="46" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-memory" parent="1" style="fillColor=#E0F2F1;strokeColor=#01A88D;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#01A88D;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Context Store" vertex="1">
<mxGeometry height="130" width="140" x="570" y="160" as="geometry" />
</mxCell>
<mxCell id="PeoHFyn3k8SIy_iLFbth-1" parent="svc-group-memory" 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=#01A88D;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.bedrock_agentcore;" value="<span style="font-size: 10px;">Bedrock</span><div style="font-size: 10px;">AgentCore Memory</div><div style="font-size: 10px;"><i>conversation history</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="46" y="29" as="geometry" />
</mxCell>
<mxCell id="svc-group-lambda" parent="1" style="fillColor=#FFF2E8;strokeColor=#ED7100;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#ED7100;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Tool Execution" vertex="1">
<mxGeometry height="130" width="120" x="840" y="350" as="geometry" />
</mxCell>
<mxCell id="svc-lambda" parent="svc-group-lambda" 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=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;shadow=1;" value="AWS Lambda<div><i>agent tools</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-dynamo" parent="1" style="fillColor=#F5E6F7;strokeColor=#C925D1;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#C925D1;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Results Store" vertex="1">
<mxGeometry height="130" width="120" x="840" y="560" as="geometry" />
</mxCell>
<mxCell id="svc-dynamo" parent="svc-group-dynamo" 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=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;fontFamily=Helvetica;shadow=1;" value="DynamoDB<div><i>tool results</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="edge-users-to-gateway" edge="1" parent="1" source="users-container" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;" target="svc-group-gateway">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-users-to-gateway-label" connectable="0" parent="edge-users-to-gateway" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="user request" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint x="-4" y="2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-gateway-to-runtime" edge="1" parent="1" source="svc-group-gateway" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;" target="svc-group-runtime">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-gateway-to-runtime-label" connectable="0" parent="edge-gateway-to-runtime" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="route to agent" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-runtime-to-memory" edge="1" parent="1" source="svc-group-runtime" style="html=1;startArrow=classic;startFill=1;endArrow=classic;endFill=1;jettySize=auto;orthogonalLoop=1;strokeWidth=1;rounded=0;fontFamily=Helvetica;" target="svc-group-memory">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-runtime-to-memory-label" connectable="0" parent="edge-runtime-to-memory" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="read/write context" vertex="1">
<mxGeometry relative="1" x="0.1" y="15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-runtime-to-lambda" edge="1" parent="1" source="svc-group-runtime" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;" target="svc-group-lambda">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-runtime-to-lambda-label" connectable="0" parent="edge-runtime-to-lambda" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="invoke tools" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-lambda-to-dynamo" edge="1" parent="1" source="svc-group-lambda" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;" target="svc-group-dynamo">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-lambda-to-dynamo-label" connectable="0" parent="edge-lambda-to-dynamo" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="store results" vertex="1">
<mxGeometry relative="1" x="0.1" y="15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="step-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="1" vertex="1">
<mxGeometry height="28" width="28" x="231" y="367" as="geometry" />
</mxCell>
<mxCell id="step-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="2" vertex="1">
<mxGeometry height="28" width="28" x="494" y="367" as="geometry" />
</mxCell>
<mxCell id="step-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="3" vertex="1">
<mxGeometry height="28" width="28" x="542" y="306" as="geometry" />
</mxCell>
<mxCell id="step-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="4" vertex="1">
<mxGeometry height="28" width="28" x="760" y="370" as="geometry" />
</mxCell>
<mxCell id="step-5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="5" vertex="1">
<mxGeometry height="28" width="28" x="834" y="506" as="geometry" />
</mxCell>
<mxCell id="legend-outer" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="730" width="650" x="1100" y="30" as="geometry" />
</mxCell>
<mxCell id="legend-bg" parent="legend-outer" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.rect;fillColor2=none;strokeWidth=1;size=20;indent=5;fillColor=light-dark(#EDF3FF,#305363);strokeColor=#6c8ebf;" value="" vertex="1">
<mxGeometry height="730" width="650" as="geometry" />
</mxCell>
<mxCell id="legend-container" connectable="0" parent="legend-outer" style="group" value="" vertex="1">
<mxGeometry height="700" width="602" x="20" y="25" as="geometry" />
</mxCell>
<mxCell id="step-1-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" as="geometry" />
</mxCell>
<mxCell id="step-1-badge-legend" parent="step-1-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="1" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-1-desc-legend" parent="step-1-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>User Request</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>User sends a natural language request to the AI agent</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>AgentCore Gateway receives and authenticates the request</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-2-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="90" as="geometry" />
</mxCell>
<mxCell id="step-2-badge-legend" parent="step-2-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="2" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-2-desc-legend" parent="step-2-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Agent Orchestration</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Gateway routes request to AgentCore Runtime</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Runtime plans the execution steps for the agent task</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-3-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="180" as="geometry" />
</mxCell>
<mxCell id="step-3-badge-legend" parent="step-3-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="3" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-3-desc-legend" parent="step-3-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Context Retrieval</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Runtime queries AgentCore Memory for conversation history</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Contextual state maintained across turns for coherent responses</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-4-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="270" as="geometry" />
</mxCell>
<mxCell id="step-4-badge-legend" parent="step-4-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="4" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-4-desc-legend" parent="step-4-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Tool Invocation</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Runtime invokes Lambda functions as agent tools</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Tools perform actions: API calls, data lookups, computations</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-5-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="360" as="geometry" />
</mxCell>
<mxCell id="step-5-badge-legend" parent="step-5-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="5" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-5-desc-legend" parent="step-5-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Result Persistence</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Lambda stores tool execution results in DynamoDB</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Results available for subsequent agent reasoning steps</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="legend-line-styles-outer" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="133" width="600" y="560" as="geometry" />
</mxCell>
<mxCell id="legend-line-styles-group" parent="legend-line-styles-outer" style="group;fontFamily=Helvetica;fillColor=light-dark(#F5F5F5,#29393B);strokeColor=#666666;rounded=1;" value="" vertex="1">
<mxGeometry height="133" width="456" as="geometry" />
</mxCell>
<mxCell id="legend-line-title" parent="legend-line-styles-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;fontStyle=1;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="Line Styles" vertex="1">
<mxGeometry height="26" width="152" x="4" y="4" as="geometry" />
</mxCell>
<mxCell id="legend-line-desc" parent="legend-line-styles-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=13;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>---- Solid</b>: Primary request/response flow</div><div><b>---- Bidirectional</b>: Read/write context (Memory)</div><div><b>- - - Dashed gray</b>: Monitoring and observability</div><div><br></div><div><br></div>" vertex="1">
<mxGeometry height="100" width="440" x="8" y="30" as="geometry" />
</mxCell>
<mxCell id="YmUlif-s0cu5v1OdzcHd-1" parent="legend-container" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="<div style="font-size: 13px;"><div><span style="font-size: 14px;"><i>CloudWatch collects metrics and logs from all components.</i></span></div><div><i>IAM provides roles and policies for all services.</i></div></div>" vertex="1">
<mxGeometry height="30" width="474" y="474" as="geometry" />
</mxCell>
<mxCell id="h1VfG4kSXgm72098ykto-3" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="186" width="389" x="93" y="548" as="geometry" />
</mxCell>
<mxCell id="h1VfG4kSXgm72098ykto-4" parent="h1VfG4kSXgm72098ykto-3" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;fillColor=none;dashed=1;" value="Auxiliary Services" vertex="1">
<mxGeometry height="186" width="389" as="geometry" />
</mxCell>
<mxCell id="h1VfG4kSXgm72098ykto-5" parent="h1VfG4kSXgm72098ykto-3" style="fillColor=#FFEBEE;strokeColor=#DD344C;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#DD344C;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Security" vertex="1">
<mxGeometry height="120" width="120" x="38" y="46" as="geometry" />
</mxCell>
<mxCell id="h1VfG4kSXgm72098ykto-6" parent="h1VfG4kSXgm72098ykto-5" 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=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.identity_and_access_management;fontFamily=Helvetica;shadow=1;" value="IAM<div><i>roles + policies</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="h1VfG4kSXgm72098ykto-7" parent="h1VfG4kSXgm72098ykto-3" style="fillColor=#FCE4EC;strokeColor=#E7157B;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#E7157B;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Monitoring" vertex="1">
<mxGeometry height="120" width="120" x="228" y="46" as="geometry" />
</mxCell>
<mxCell id="h1VfG4kSXgm72098ykto-8" parent="h1VfG4kSXgm72098ykto-7" 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=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch;fontFamily=Helvetica;shadow=1;" value="CloudWatch<div><i>metrics + logs</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.1 Chrome/142.0.7444.265 Electron/39.8.0 Safari/537.36" version="29.6.1">
<diagram name="Page-1" id="diagram-1">
<mxGraphModel dx="3348" dy="1143" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1200" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title-group" connectable="0" parent="1" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="83" width="1500" x="50" y="30" as="geometry" />
</mxCell>
<mxCell id="title-text" parent="title-group" style="text;html=1;resizable=1;points=[];autosize=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=30;fontStyle=1;fontFamily=Helvetica;" value="Agentic AI Platform" vertex="1">
<mxGeometry height="42" width="800" as="geometry" />
</mxCell>
<mxCell id="subtitle-text" parent="title-group" style="text;html=1;resizable=0;points=[];autosize=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=16;fontFamily=Helvetica;" value="Serverless AI agent platform with Bedrock AgentCore orchestration, Step Functions workflows, and event-driven architecture" vertex="1">
<mxGeometry height="25" width="900" x="5" y="40" as="geometry" />
</mxCell>
<mxCell id="title-separator" parent="title-group" style="line;strokeWidth=2;html=1;fontSize=14;strokeColor=#FF9900;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="10" width="1490" x="5" y="70" as="geometry" />
</mxCell>
<mxCell id="users-container" parent="1" style="fillColor=#f5f5f5;strokeColor=light-dark(#666666,#D4D4D4);rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1;perimeterSpacing=0;" value="Users" vertex="1">
<mxGeometry height="98" width="107" x="50" y="200" as="geometry" />
</mxCell>
<mxCell id="users-icon" parent="users-container" 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=#232F3D;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.users;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="48" width="48" x="30" y="30" as="geometry" />
</mxCell>
<mxCell id="mobile-container" parent="1" style="fillColor=#f5f5f5;strokeColor=light-dark(#666666,#D4D4D4);rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1;perimeterSpacing=0;" value="Mobile Client" vertex="1">
<mxGeometry height="98" width="107" x="50" y="360" as="geometry" />
</mxCell>
<mxCell id="mobile-icon" parent="mobile-container" 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=#232F3D;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.mobile_client;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="48" width="48" x="30" y="30" as="geometry" />
</mxCell>
<mxCell id="aws-cloud" parent="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_aws_cloud;strokeColor=light-dark(#232F3E,#E0ECFB);fillColor=light-dark(#232F3E0D,#90C7FF0D);fillStyle=auto;verticalAlign=top;align=left;spacingLeft=30;fontColor=light-dark(#000000,#F4F4F4);dashed=0;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;fontFamily=Helvetica;" value="AWS Cloud" vertex="1">
<mxGeometry height="1020" width="1310" x="230" y="140" as="geometry" />
</mxCell>
<mxCell id="region-1" parent="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=14;fontStyle=1;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fillColor=light-dark(#0C7B7D0D,#0C7B7D0D);fillStyle=auto;verticalAlign=top;align=left;spacingLeft=30;fontColor=#00A4A6;dashed=1;container=0;pointerEvents=0;collapsible=0;recursiveResize=0;fontFamily=Helvetica;" value="Region: us-east-1" vertex="1">
<mxGeometry height="960" width="1250" x="260" y="170" as="geometry" />
</mxCell>
<mxCell id="svc-group-cognito" parent="1" style="fillColor=#FFEBEE;strokeColor=#DD344C;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#DD344C;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Auth" vertex="1">
<mxGeometry height="120" width="120" x="350" y="200" as="geometry" />
</mxCell>
<mxCell id="svc-cognito" parent="svc-group-cognito" 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=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cognito;fontFamily=Helvetica;shadow=1;" value="Amazon Cognito<div><i>user auth</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-apigw" parent="1" style="fillColor=#EDE7F6;strokeColor=#8C4FFF;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#8C4FFF;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="API" vertex="1">
<mxGeometry height="120" width="120" x="350" y="390" as="geometry" />
</mxCell>
<mxCell id="svc-apigw" parent="svc-group-apigw" 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=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;fontFamily=Helvetica;shadow=1;" value="API Gateway<div><i>REST endpoint</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-lambda" parent="1" style="fillColor=#FFF2E8;strokeColor=#ED7100;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#ED7100;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Compute" vertex="1">
<mxGeometry height="120" width="120" x="620" y="390" as="geometry" />
</mxCell>
<mxCell id="svc-lambda" parent="svc-group-lambda" 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=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;shadow=1;" value="AWS Lambda<div><i>orchestrator</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-agentcore" parent="1" style="fillColor=#E0F2F1;strokeColor=#01A88D;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#01A88D;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Agent Runtime" vertex="1">
<mxGeometry height="120" width="120" x="620" y="580" as="geometry" />
</mxCell>
<mxCell id="svc-agentcore" parent="svc-group-agentcore" 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=#01A88D;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.bedrock_agentcore;fontFamily=Helvetica;shadow=1;" value="Bedrock AgentCore<div><i>runtime + memory</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-sfn" parent="1" style="fillColor=#FCE4EC;strokeColor=#E7157B;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#E7157B;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Workflows" vertex="1">
<mxGeometry height="120" width="120" x="890" y="390" as="geometry" />
</mxCell>
<mxCell id="svc-sfn" parent="svc-group-sfn" 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=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions;fontFamily=Helvetica;shadow=1;" value="Step Functions<div><i>multi-step workflows</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-eb" parent="1" style="fillColor=#FCE4EC;strokeColor=#E7157B;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#E7157B;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Event Bus" vertex="1">
<mxGeometry height="120" width="120" x="890" y="580" as="geometry" />
</mxCell>
<mxCell id="svc-eb" parent="svc-group-eb" 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=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eventbridge;fontFamily=Helvetica;shadow=1;" value="EventBridge<div><i>async events</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-dynamo-sessions" parent="1" style="fillColor=#F5E6F7;strokeColor=#C925D1;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#C925D1;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Session Store" vertex="1">
<mxGeometry height="120" width="120" x="620" y="778" as="geometry" />
</mxCell>
<mxCell id="svc-dynamo-sessions" parent="svc-group-dynamo-sessions" 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=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;fontFamily=Helvetica;shadow=1;" value="DynamoDB<div><i>session store</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-dynamo-inventory" parent="1" style="fillColor=#F5E6F7;strokeColor=#C925D1;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#C925D1;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Inventory" vertex="1">
<mxGeometry height="120" width="120" x="890" y="810" as="geometry" />
</mxCell>
<mxCell id="svc-dynamo-inventory" parent="svc-group-dynamo-inventory" 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=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;fontFamily=Helvetica;shadow=1;" value="DynamoDB<div><i>inventory table</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-s3" parent="1" style="fillColor=#E8F5E9;strokeColor=#3F8624;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#3F8624;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Knowledge" vertex="1">
<mxGeometry height="120" width="120" x="350" y="580" as="geometry" />
</mxCell>
<mxCell id="svc-s3" parent="svc-group-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;fillColor=#3F8624;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;fontFamily=Helvetica;shadow=1;" value="Amazon S3<div><i>knowledge base</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-apprunner" parent="1" style="fillColor=#FFF2E8;strokeColor=#ED7100;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#ED7100;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Admin" vertex="1">
<mxGeometry height="120" width="120" x="1160" y="810" as="geometry" />
</mxCell>
<mxCell id="svc-apprunner" parent="svc-group-apprunner" 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=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ecs;fontFamily=Helvetica;shadow=1;" value="ECS Fargate<div><i>admin dashboard</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="edge-users-to-apigw" edge="1" parent="1" source="users-container" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" target="svc-group-apigw">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="279" y="249" />
<mxPoint x="279" y="420" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge-users-to-apigw-label" connectable="0" parent="edge-users-to-apigw" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-mobile-to-apigw" edge="1" parent="1" source="mobile-container" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;" target="svc-group-apigw">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-mobile-to-apigw-label" connectable="0" parent="edge-mobile-to-apigw" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" vertex="1">
<mxGeometry relative="1" y="15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-cognito-to-apigw" edge="1" parent="1" source="svc-group-cognito" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="svc-group-apigw">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-cognito-to-apigw-label" connectable="0" parent="edge-cognito-to-apigw" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="authenticate" vertex="1">
<mxGeometry relative="1" x="0.1" y="15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-apigw-to-lambda" edge="1" parent="1" source="svc-group-apigw" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;" target="svc-group-lambda">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-apigw-to-lambda-label" connectable="0" parent="edge-apigw-to-lambda" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="route request" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-lambda-to-agentcore" edge="1" parent="1" source="svc-group-lambda" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="svc-group-agentcore">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-lambda-to-agentcore-label" connectable="0" parent="edge-lambda-to-agentcore" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="invoke agent" vertex="1">
<mxGeometry relative="1" x="0.1" y="15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-lambda-to-sfn" edge="1" parent="1" source="svc-group-lambda" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="svc-group-sfn">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-lambda-to-sfn-label" connectable="0" parent="edge-lambda-to-sfn" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="start workflow" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-lambda-to-eb" edge="1" parent="1" source="svc-group-lambda" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" target="svc-group-eb">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="823" y="480" />
<mxPoint x="823" y="580" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge-lambda-to-eb-label" connectable="0" parent="edge-lambda-to-eb" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="publish events" vertex="1">
<mxGeometry relative="1" x="-0.2" y="-15" as="geometry">
<mxPoint x="13" y="5" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-agentcore-to-s3" edge="1" parent="1" source="svc-group-agentcore" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="svc-group-s3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-agentcore-to-s3-label" connectable="0" parent="edge-agentcore-to-s3" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="retrieve knowledge" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-agentcore-to-sessions" edge="1" parent="1" source="svc-group-agentcore" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="svc-group-dynamo-sessions">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-agentcore-to-sessions-label" connectable="0" parent="edge-agentcore-to-sessions" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="read/write sessions" vertex="1">
<mxGeometry relative="1" x="0.1" y="15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-sfn-to-inventory" edge="1" parent="1" source="svc-group-sfn" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="svc-group-dynamo-inventory">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1125" y="450" />
<mxPoint x="1125" y="769" />
<mxPoint x="950" y="769" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge-sfn-to-inventory-label" connectable="0" parent="edge-sfn-to-inventory" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="update inventory" vertex="1">
<mxGeometry relative="1" x="0.1" y="15" as="geometry">
<mxPoint x="-15" y="-89" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-eb-to-sfn" edge="1" parent="1" source="svc-group-eb" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="svc-group-sfn">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="950" y="560" />
<mxPoint x="950" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge-eb-to-sfn-label" connectable="0" parent="edge-eb-to-sfn" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="trigger workflow" vertex="1">
<mxGeometry relative="1" x="0.2" y="-15" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="edge-apprunner-to-inventory" edge="1" parent="1" source="svc-group-apprunner" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="svc-group-dynamo-inventory">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-apprunner-to-inventory-label" connectable="0" parent="edge-apprunner-to-inventory" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" value="read inventory" vertex="1">
<mxGeometry relative="1" y="-15" as="geometry">
<mxPoint y="28" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="step-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="1" vertex="1">
<mxGeometry height="28" width="28" x="309" y="209" as="geometry" />
</mxCell>
<mxCell id="step-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="2" vertex="1">
<mxGeometry height="28" width="28" x="200" y="370" as="geometry" />
</mxCell>
<mxCell id="step-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="3" vertex="1">
<mxGeometry height="28" width="28" x="532" y="408" as="geometry" />
</mxCell>
<mxCell id="step-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="4" vertex="1">
<mxGeometry height="28" width="28" x="620" y="535" as="geometry" />
</mxCell>
<mxCell id="step-5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="5" vertex="1">
<mxGeometry height="28" width="28" x="800" y="408" as="geometry" />
</mxCell>
<mxCell id="step-6" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="6" vertex="1">
<mxGeometry height="28" width="28" x="782" y="528" as="geometry" />
</mxCell>
<mxCell id="step-7" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="7" vertex="1">
<mxGeometry height="28" width="28" x="572" y="760" as="geometry" />
</mxCell>
<mxCell id="step-8" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=16;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;align=center;verticalAlign=middle;labelBackgroundColor=none;" value="8" vertex="1">
<mxGeometry height="28" width="28" x="1071" y="824" as="geometry" />
</mxCell>
<mxCell id="legend-outer" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="1130" width="650" x="1600" y="30" as="geometry" />
</mxCell>
<mxCell id="legend-bg" parent="legend-outer" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.rect;fillColor2=none;strokeWidth=1;size=20;indent=5;fillColor=light-dark(#EDF3FF,#305363);strokeColor=#6c8ebf;" value="" vertex="1">
<mxGeometry height="1130" width="650" as="geometry" />
</mxCell>
<mxCell id="legend-container" connectable="0" parent="legend-outer" style="group" value="" vertex="1">
<mxGeometry height="1080" width="602" x="20" y="25" as="geometry" />
</mxCell>
<mxCell id="step-1-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" as="geometry" />
</mxCell>
<mxCell id="step-1-badge-legend" parent="step-1-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="1" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-1-desc-legend" parent="step-1-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>User Authentication</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Users and mobile clients authenticate via Amazon Cognito</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>JWT tokens authorize access to API Gateway endpoints</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-2-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="90" as="geometry" />
</mxCell>
<mxCell id="step-2-badge-legend" parent="step-2-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="2" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-2-desc-legend" parent="step-2-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>API Gateway Entry</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>API Gateway receives authenticated requests</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Routes to Lambda orchestrator for processing</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-3-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="180" as="geometry" />
</mxCell>
<mxCell id="step-3-badge-legend" parent="step-3-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="3" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-3-desc-legend" parent="step-3-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Lambda Orchestration</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Lambda orchestrator invokes Bedrock AgentCore for AI tasks</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Triggers Step Functions for complex multi-step workflows</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-4-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="270" as="geometry" />
</mxCell>
<mxCell id="step-4-badge-legend" parent="step-4-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="4" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-4-desc-legend" parent="step-4-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Agent Runtime + Memory</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>AgentCore provides runtime and conversation memory</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Retrieves knowledge from S3 for contextual responses</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-5-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="360" as="geometry" />
</mxCell>
<mxCell id="step-5-badge-legend" parent="step-5-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="5" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-5-desc-legend" parent="step-5-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Multi-Step Workflows</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Step Functions orchestrates complex multi-step business flows</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Updates DynamoDB inventory table with workflow results</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-6-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="450" as="geometry" />
</mxCell>
<mxCell id="step-6-badge-legend" parent="step-6-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="6" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-6-desc-legend" parent="step-6-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Async Event Routing</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>EventBridge routes async events between services</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Triggers Step Functions workflows based on event patterns</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-7-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="80" width="600" y="540" as="geometry" />
</mxCell>
<mxCell id="step-7-badge-legend" parent="step-7-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="7" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-7-desc-legend" parent="step-7-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Data Persistence</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>DynamoDB stores session state and vehicle inventory</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>S3 provides knowledge base for agent reasoning</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="step-8-legend-group" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="135" width="600" y="630" as="geometry" />
</mxCell>
<mxCell id="step-8-badge-legend" parent="step-8-legend-group" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#007CBD;strokeColor=default;fontColor=#FFFFFF;fontStyle=1;fontSize=22;labelBackgroundColor=none;fontFamily=Helvetica;shadow=1;glass=0;strokeWidth=2;" value="8" vertex="1">
<mxGeometry height="38" width="40" y="2" as="geometry" />
</mxCell>
<mxCell id="step-8-desc-legend" parent="step-8-legend-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>Admin Dashboard</b></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>ECS Fargate hosts the admin dashboard for operations</span></div><div><span style="color: light-dark(rgb(0,0,0), rgb(255,255,255));"><b><font style="font-size: 15px;">-</font> </b>Reads inventory data from DynamoDB for monitoring</span></div>" vertex="1">
<mxGeometry height="80" width="548" x="52" as="geometry" />
</mxCell>
<mxCell id="jyVs7GgIkLTRjIjV6R_S-1" parent="step-8-legend-group" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="<div style="font-size: 13px;"><i>CloudWatch monitors all Lambda, AgentCore, and Step Functions.</i></div><div style="font-size: 13px;"><i>IAM provides roles and policies for all services.</i></div>" vertex="1">
<mxGeometry height="30" width="474" y="105" as="geometry" />
</mxCell>
<mxCell id="legend-line-styles-outer" connectable="0" parent="legend-container" style="group;fontFamily=Helvetica;" value="" vertex="1">
<mxGeometry height="133" width="600" y="797" as="geometry" />
</mxCell>
<mxCell id="legend-line-styles-group" parent="legend-line-styles-outer" style="group;fontFamily=Helvetica;fillColor=light-dark(#F5F5F5,#29393B);strokeColor=#666666;rounded=1;" value="" vertex="1">
<mxGeometry height="133" width="456" as="geometry" />
</mxCell>
<mxCell id="legend-line-title" parent="legend-line-styles-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=14;fontStyle=1;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="Line Styles" vertex="1">
<mxGeometry height="26" width="152" x="4" y="4" as="geometry" />
</mxCell>
<mxCell id="legend-line-desc" parent="legend-line-styles-group" style="text;html=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=13;labelBackgroundColor=none;whiteSpace=wrap;fontFamily=Helvetica;" value="<div><b>---- Solid</b>: Request/response and data flow</div><div><br></div><div><br></div>" vertex="1">
<mxGeometry height="100" width="440" x="8" y="30" as="geometry" />
</mxCell>
<mxCell id="sPYyA0Y9JWH9Wk6o2K7T-3" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="186" width="389" x="292" y="923" as="geometry" />
</mxCell>
<mxCell id="sPYyA0Y9JWH9Wk6o2K7T-1" parent="sPYyA0Y9JWH9Wk6o2K7T-3" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;fillColor=none;dashed=1;" value="Auxiliary Services" vertex="1">
<mxGeometry height="186" width="389" as="geometry" />
</mxCell>
<mxCell id="svc-group-iam" parent="sPYyA0Y9JWH9Wk6o2K7T-3" style="fillColor=#FFEBEE;strokeColor=#DD344C;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#DD344C;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Security" vertex="1">
<mxGeometry height="120" width="120" x="38" y="46" as="geometry" />
</mxCell>
<mxCell id="svc-iam" parent="svc-group-iam" 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=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.identity_and_access_management;fontFamily=Helvetica;shadow=1;" value="IAM<div><i>roles + policies</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
<mxCell id="svc-group-cw" parent="sPYyA0Y9JWH9Wk6o2K7T-3" style="fillColor=#FCE4EC;strokeColor=#E7157B;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#E7157B;fontFamily=Helvetica;container=1;collapsible=0;shadow=1;strokeWidth=1.5;" value="Monitoring" vertex="1">
<mxGeometry height="120" width="120" x="228" y="46" as="geometry" />
</mxCell>
<mxCell id="svc-cw" parent="svc-group-cw" 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=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch;fontFamily=Helvetica;shadow=1;" value="CloudWatch<div><i>metrics + logs</i></div>" vertex="1">
<mxGeometry height="48" width="48" x="36" y="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
General Architecture Icons
When the architecture includes non-AWS services (on-premises, third-party, open-source, or platform-native), use these mappings. Same 120x120 container + 48x48 icon pattern as AWS services. Category tint colors match the AWS palette so mixed diagrams look consistent.
The icon is generic — the container label and service name are critical for identification.
Technology to Shape Mapping
Databases
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| PostgreSQL, MySQL, MariaDB, SQLite | generic_database | Database (#F5E6F7 / #C925D1) |
| MongoDB, Redis, Elasticsearch, Neo4j | generic_database | Database (#F5E6F7 / #C925D1) |
Compute and Runtime
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| Docker, Kubernetes, VMs | container_1 | Compute (#FFF2E8 / #ED7100) |
| On-premises servers, bare metal | traditional_server | Compute (#FFF2E8 / #ED7100) |
| macOS, iOS, Android native app | mobile_client | Compute (#FFF2E8 / #ED7100) |
| Desktop application, CLI tool | generic_application | Compute (#FFF2E8 / #ED7100) |
| Web server (nginx, Apache) | traditional_server | Compute (#FFF2E8 / #ED7100) |
External Services and APIs
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| GitHub, GitLab, Bitbucket | internet | Networking (#EDE7F6 / #8C4FFF) |
| REST/GraphQL API endpoints | internet | Networking (#EDE7F6 / #8C4FFF) |
| Stripe, Twilio, SendGrid | generic_application | App Integration (#FCE4EC / #E7157B) |
| CDN (Cloudflare, Fastly) | internet | Networking (#EDE7F6 / #8C4FFF) |
| DNS providers | internet | Networking (#EDE7F6 / #8C4FFF) |
AI and ML
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| HuggingFace, OpenAI, Anthropic | generic_application | AI/ML (#E0F2F1 / #01A88D) |
| CoreML, TensorFlow, PyTorch | generic_application | AI/ML (#E0F2F1 / #01A88D) |
| ML model files, ONNX runtime | generic_application | AI/ML (#E0F2F1 / #01A88D) |
Storage
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| Local filesystem, NFS, CIFS | generic_application | Storage (#E8F5E9 / #3F8624) |
| Object storage (MinIO, Ceph) | generic_application | Storage (#E8F5E9 / #3F8624) |
Messaging and Streaming
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| Kafka, RabbitMQ, NATS, MQTT | generic_application | App Integration (#FCE4EC / #E7157B) |
| WebSocket, gRPC, pub/sub | generic_application | App Integration (#FCE4EC / #E7157B) |
Security and Auth
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| OAuth, OIDC, SAML, LDAP | generic_application | Security (#FFEBEE / #DD344C) |
| Vault (HashiCorp), KeyCloak | generic_application | Security (#FFEBEE / #DD344C) |
Monitoring and Observability
| Technology | resIcon shape | Category (tint / stroke) |
|---|---|---|
| Prometheus, Grafana, Datadog | generic_application | Management (#FCE4EC / #E7157B) |
| ELK stack, Splunk, PagerDuty | generic_application | Management (#FCE4EC / #E7157B) |
External Actors (outside the system boundary)
| Actor | resIcon shape | Container style |
|---|---|---|
| End users / people | users | fillColor=#f5f5f5, stroke=light-dark(#666666,#D4D4D4) |
| Mobile users | mobile_client | fillColor=#f5f5f5, stroke=light-dark(#666666,#D4D4D4) |
| IoT devices / sensors | sensor | fillColor=#f5f5f5, stroke=light-dark(#666666,#D4D4D4) |
| Corporate data center | corporate_data_center | fillColor=#f5f5f5, stroke=light-dark(#666666,#D4D4D4) |
Boundary Groups for Non-AWS
For non-AWS architectures, replace the AWS Cloud boundary group with a generic system boundary:
- Use
group_corporate_data_centerstyle for on-premises boundaries - Use a plain
groupstyle with dashed border for logical boundaries - Keep the same
container=0pattern for decorative region/zone groups
Post-Processing Pipeline
Deterministic fixers run automatically via the validate-drawio.sh PostToolUse hook, in this order:
1. fix_nesting.py — Sets Region container=0, re-parents children to root 2. fix_icon_colors.py — Corrects service icon fillColor to match category 3. fix_step_badges.py — Nudges overlapping step badges apart 4. fix_placement.py — Moves external actors below the title block (y >= 140) 5. fix_legend_size.py — Resizes legend panel to match diagram height
All scripts are in scripts/lib/. The pipeline is orchestrated by scripts/lib/post_process_drawio.py, which chains them in sequence. No manual invocation is needed when using the PostToolUse hook.
The PostToolUse hook fires on all Edit/Write operations but exits immediately (<10ms) for non-.drawio files.
Dependency: The pipeline requires defusedxml (pip3 install defusedxml>=0.7.1). If missing, the hook skips validation and shows an install prompt.
XML Templates — Examples
Edge, container, and annotation XML snippets. For core structure (title, users, legend), see xml-templates-structure.md.
Edge with Label
<mxCell id="edge-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="api-gw" target="kinesis">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-1-label" value="query logs" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;" connectable="0" vertex="1" parent="edge-1">
<mxGeometry relative="1" x="-0.3" y="0" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>Edge with Explicit Waypoints
<mxCell id="e1" style="edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="a" target="b">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="300" y="150"/>
<mxPoint x="300" y="250"/>
</Array>
</mxGeometry>
</mxCell>Decision Point Annotations
<!-- Conditional edge label (italic) -->
<mxCell id="edge-decision-label" value="deploy [if build passes]" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;fontStyle=2;" connectable="0" vertex="1" parent="edge-decision">
<mxGeometry relative="1" x="-0.3" y="0" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<!-- Dashed arrow for failure/fallback paths -->
<mxCell id="edge-fallback" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;strokeColor=#999999;" edge="1" parent="1" source="SOURCE" target="FALLBACK_TARGET">
<mxGeometry relative="1" as="geometry" />
</mxCell>Swimlane Container
<mxCell id="svc1" value="User Service" style="swimlane;startSize=30;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="100" y="100" width="300" height="200" as="geometry"/>
</mxCell>
<mxCell id="api1" value="REST API" style="rounded=1;whiteSpace=wrap;" vertex="1" parent="svc1">
<mxGeometry x="20" y="40" width="120" height="60" as="geometry"/>
</mxCell>Invisible Group
<mxCell id="grp1" value="" style="group;" vertex="1" parent="1">
<mxGeometry x="100" y="100" width="300" height="200" as="geometry"/>
</mxCell>
<mxCell id="c1" value="Component A" style="rounded=1;whiteSpace=wrap;" vertex="1" parent="grp1">
<mxGeometry x="10" y="10" width="120" height="60" as="geometry"/>
</mxCell>Region with Adaptive Fill
<mxCell id="region-1" style="...shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fillColor=light-dark(#0C7B7D0D,#0C7B7D0D);fillStyle=auto;..." value="Region: us-east-1" vertex="1" parent="1">
<mxGeometry x="X" y="Y" width="W" height="H" as="geometry" />
</mxCell>Related skills
FAQ
Can it generate a diagram from existing code?
Yes. In codebase-analysis mode it scans CloudFormation, CDK, and Terraform files to extract services, relationships, and data flow.
What output formats does it support?
It exports .drawio by default, with optional PNG, SVG, or PDF export via the draw.io desktop CLI.