This is page 98 of 104. Use http://codebase.md/versuscontrol/ai-infrastructure-agent?page={x} to view the full context. # Directory Structure ``` ├── .github │ └── workflows │ ├── dev-ci.yaml │ └── release.yaml ├── .gitignore ├── cmd │ ├── server │ │ └── main.go │ ├── tmp │ │ └── main.go │ └── web │ └── main.go ├── config.bedrock.yaml.example ├── config.gemini.yaml.example ├── config.openai.yaml.example ├── config.yaml ├── Dockerfile ├── docs │ ├── _sidebar.md │ ├── .nojekyll │ ├── api-key-setup │ │ ├── aws-bedrock-nova-setup.md │ │ ├── gemini-api-setup.md │ │ └── openai-api-setup.md │ ├── architecture │ │ └── architecture-overview.md │ ├── CNAME │ ├── docs.html │ ├── examples │ │ ├── working-with-ec2-instance.md │ │ └── working-with-vpc.md │ ├── getting-started.md │ ├── images │ │ ├── advanced-demo.svg │ │ ├── ai-analysis-planning.png │ │ ├── ai-execute-planning.png │ │ ├── ai-infrastructure-agent.svg │ │ ├── ai-infrastructure-state.png │ │ ├── core-components.svg │ │ ├── ec2-00.png │ │ ├── ec2-01.png │ │ ├── ec2-02.png │ │ ├── ec2-03.png │ │ ├── ec2-04.png │ │ ├── ec2-05.png │ │ ├── ec2-06.png │ │ ├── ec2-07.png │ │ ├── simple-demo.svg │ │ ├── vpc-00.png │ │ ├── vpc-01.png │ │ ├── vpc-02.png │ │ ├── vpc-03.png │ │ ├── vpc-04.png │ │ ├── vpc-05.png │ │ ├── vpc-06.png │ │ ├── vpc-07.png │ │ ├── vpc-08.png │ │ ├── vpc-09.png │ │ ├── vpc-10.png │ │ ├── vpc-11.png │ │ ├── vpc-architecture.svg │ │ └── web-dashboard.svg │ ├── index.html │ ├── installation.md │ └── README.md ├── go.mod ├── go.sum ├── internal │ ├── config │ │ ├── config.go │ │ └── loader.go │ └── logging │ └── logger.go ├── LICENSE ├── pkg │ ├── adapters │ │ ├── alb.go │ │ ├── asg.go │ │ ├── base.go │ │ ├── ec2.go │ │ ├── keypair.go │ │ ├── rds.go │ │ ├── security_group.go │ │ └── vpc.go │ ├── agent │ │ ├── agent_capability_extractors.go │ │ ├── agent_dependency_resolver.go │ │ ├── agent_factory.go │ │ ├── agent_json_processing.go │ │ ├── agent_plan_executor.go │ │ ├── agent_request_processor.go │ │ ├── agent_resource_correlation.go │ │ ├── agent_test.go │ │ ├── agent_utility_helpers.go │ │ ├── mcp_communication.go │ │ ├── mocks │ │ │ ├── aws_client_mock.go │ │ │ ├── helpers.go │ │ │ ├── mcp_integration_test.go │ │ │ ├── mcp_server_mock.go │ │ │ ├── state_manager_mock.go │ │ │ └── validation.go │ │ ├── react_agent_extensions.go │ │ ├── react_error_context.go │ │ ├── react_recovery_engine.go │ │ ├── react_recovery_types.go │ │ ├── resources │ │ │ ├── field_resolver.go │ │ │ ├── id_extractor.go │ │ │ └── pattern_matcher.go │ │ └── types.go │ ├── api │ │ └── server.go │ ├── aws │ │ ├── alb.go │ │ ├── asg.go │ │ ├── client.go │ │ ├── ec2.go │ │ ├── params.go │ │ ├── rds.go │ │ ├── security_group.go │ │ └── vpc.go │ ├── conflict │ │ └── resolver.go │ ├── discovery │ │ └── scanner.go │ ├── graph │ │ ├── analyzer.go │ │ └── manager.go │ ├── interfaces │ │ ├── aws_resource.go │ │ ├── mcp_tool.go │ │ └── state_management.go │ ├── mcp │ │ ├── resource_definitions.go │ │ ├── resource_registry.go │ │ ├── server_integration.go │ │ ├── server.go │ │ └── tool_manager.go │ ├── state │ │ └── manager.go │ ├── tools │ │ ├── alb_tools.go │ │ ├── ami_tools.go │ │ ├── asg_tools.go │ │ ├── ec2_tools.go │ │ ├── factory.go │ │ ├── helpers.go │ │ ├── keypair_tools.go │ │ ├── networking_tools.go │ │ ├── rds_tools.go │ │ ├── registry.go │ │ ├── security_group_tools.go │ │ ├── state_tools.go │ │ ├── vpc_tools.go │ │ └── zone_tools.go │ ├── types │ │ └── mcp.go │ └── utilities │ └── helpers.go ├── README.md ├── scripts │ ├── install.sh │ └── run-web-ui.sh ├── settings │ ├── field-mappings-enhanced.yaml │ ├── resource-extraction-enhanced.yaml │ ├── resource-patterns-enhanced.yaml │ └── templates │ ├── decision-plan-prompt-optimized.txt │ └── tools-execution-context-optimized.txt └── web └── build ├── ai-infrastructure-agent.svg ├── asset-manifest.json ├── aws-service-icons │ ├── .DS_Store │ ├── analytics │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Athena_16.png │ │ │ ├── Arch_Amazon-Athena_16.svg │ │ │ ├── Arch_Amazon-CloudSearch_16.png │ │ │ ├── Arch_Amazon-CloudSearch_16.svg │ │ │ ├── Arch_Amazon-Data-Firehose_16.png │ │ │ ├── Arch_Amazon-Data-Firehose_16.svg │ │ │ ├── Arch_Amazon-DataZone_16.png │ │ │ ├── Arch_Amazon-DataZone_16.svg │ │ │ ├── Arch_Amazon-EMR_16.png │ │ │ ├── Arch_Amazon-EMR_16.svg │ │ │ ├── Arch_Amazon-FinSpace_16.png │ │ │ ├── Arch_Amazon-FinSpace_16.svg │ │ │ ├── Arch_Amazon-Kinesis_16.png │ │ │ ├── Arch_Amazon-Kinesis_16.svg │ │ │ ├── Arch_Amazon-Kinesis-Data-Streams_16.png │ │ │ ├── Arch_Amazon-Kinesis-Data-Streams_16.svg │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_16.png │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_16.svg │ │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_16.png │ │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_16.svg │ │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_16.png │ │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_16.svg │ │ │ ├── Arch_Amazon-OpenSearch-Service_16.png │ │ │ ├── Arch_Amazon-OpenSearch-Service_16.svg │ │ │ ├── Arch_Amazon-QuickSight_16.png │ │ │ ├── Arch_Amazon-QuickSight_16.svg │ │ │ ├── Arch_Amazon-Redshift_16.png │ │ │ ├── Arch_Amazon-Redshift_16.svg │ │ │ ├── Arch_Amazon-SageMaker_16.png │ │ │ ├── Arch_Amazon-SageMaker_16.svg │ │ │ ├── Arch_AWS-Clean-Rooms_16.png │ │ │ ├── Arch_AWS-Clean-Rooms_16.svg │ │ │ ├── Arch_AWS-Data-Exchange_16.png │ │ │ ├── Arch_AWS-Data-Exchange_16.svg │ │ │ ├── Arch_AWS-Entity-Resolution_16.png │ │ │ ├── Arch_AWS-Entity-Resolution_16.svg │ │ │ ├── Arch_AWS-Glue_16.png │ │ │ ├── Arch_AWS-Glue_16.svg │ │ │ ├── Arch_AWS-Glue-DataBrew_16.png │ │ │ ├── Arch_AWS-Glue-DataBrew_16.svg │ │ │ ├── Arch_AWS-Lake-Formation_16.png │ │ │ └── Arch_AWS-Lake-Formation_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Athena_32.png │ │ │ ├── Arch_Amazon-Athena_32.svg │ │ │ ├── Arch_Amazon-CloudSearch_32.png │ │ │ ├── Arch_Amazon-CloudSearch_32.svg │ │ │ ├── Arch_Amazon-Data-Firehose_32.png │ │ │ ├── Arch_Amazon-Data-Firehose_32.svg │ │ │ ├── Arch_Amazon-DataZone_32.png │ │ │ ├── Arch_Amazon-DataZone_32.svg │ │ │ ├── Arch_Amazon-EMR_32.png │ │ │ ├── Arch_Amazon-EMR_32.svg │ │ │ ├── Arch_Amazon-FinSpace_32.png │ │ │ ├── Arch_Amazon-FinSpace_32.svg │ │ │ ├── Arch_Amazon-Kinesis_32.png │ │ │ ├── Arch_Amazon-Kinesis_32.svg │ │ │ ├── Arch_Amazon-Kinesis-Data-Streams_32.png │ │ │ ├── Arch_Amazon-Kinesis-Data-Streams_32.svg │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_32.png │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_32.svg │ │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_32.png │ │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_32.svg │ │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_32.png │ │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_32.svg │ │ │ ├── Arch_Amazon-OpenSearch-Service_32.png │ │ │ ├── Arch_Amazon-OpenSearch-Service_32.svg │ │ │ ├── Arch_Amazon-QuickSight_32.png │ │ │ ├── Arch_Amazon-QuickSight_32.svg │ │ │ ├── Arch_Amazon-Redshift_32.png │ │ │ ├── Arch_Amazon-Redshift_32.svg │ │ │ ├── Arch_Amazon-SageMaker_32.png │ │ │ ├── Arch_Amazon-SageMaker_32.svg │ │ │ ├── Arch_AWS-Clean-Rooms_32.png │ │ │ ├── Arch_AWS-Clean-Rooms_32.svg │ │ │ ├── Arch_AWS-Data-Exchange_32.png │ │ │ ├── Arch_AWS-Data-Exchange_32.svg │ │ │ ├── Arch_AWS-Entity-Resolution_32.png │ │ │ ├── Arch_AWS-Entity-Resolution_32.svg │ │ │ ├── Arch_AWS-Glue_32.png │ │ │ ├── Arch_AWS-Glue_32.svg │ │ │ ├── Arch_AWS-Glue-DataBrew_32.png │ │ │ ├── Arch_AWS-Glue-DataBrew_32.svg │ │ │ ├── Arch_AWS-Lake-Formation_32.png │ │ │ └── Arch_AWS-Lake-Formation_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Athena_48.png │ │ │ ├── Arch_Amazon-Athena_48.svg │ │ │ ├── Arch_Amazon-CloudSearch_48.png │ │ │ ├── Arch_Amazon-CloudSearch_48.svg │ │ │ ├── Arch_Amazon-Data-Firehose_48.png │ │ │ ├── Arch_Amazon-Data-Firehose_48.svg │ │ │ ├── Arch_Amazon-DataZone_48.png │ │ │ ├── Arch_Amazon-DataZone_48.svg │ │ │ ├── Arch_Amazon-EMR_48.png │ │ │ ├── Arch_Amazon-EMR_48.svg │ │ │ ├── Arch_Amazon-FinSpace_48.png │ │ │ ├── Arch_Amazon-FinSpace_48.svg │ │ │ ├── Arch_Amazon-Kinesis_48.png │ │ │ ├── Arch_Amazon-Kinesis_48.svg │ │ │ ├── Arch_Amazon-Kinesis-Data-Streams_48.png │ │ │ ├── Arch_Amazon-Kinesis-Data-Streams_48.svg │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_48.png │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_48.svg │ │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_48.png │ │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_48.svg │ │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_48.png │ │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_48.svg │ │ │ ├── Arch_Amazon-OpenSearch-Service_48.png │ │ │ ├── Arch_Amazon-OpenSearch-Service_48.svg │ │ │ ├── Arch_Amazon-QuickSight_48.png │ │ │ ├── Arch_Amazon-QuickSight_48.svg │ │ │ ├── Arch_Amazon-Redshift_48.png │ │ │ ├── Arch_Amazon-Redshift_48.svg │ │ │ ├── Arch_Amazon-SageMaker_48.png │ │ │ ├── Arch_Amazon-SageMaker_48.svg │ │ │ ├── Arch_AWS-Clean-Rooms_48.png │ │ │ ├── Arch_AWS-Clean-Rooms_48.svg │ │ │ ├── Arch_AWS-Data-Exchange_48.png │ │ │ ├── Arch_AWS-Data-Exchange_48.svg │ │ │ ├── Arch_AWS-Entity-Resolution_48.png │ │ │ ├── Arch_AWS-Entity-Resolution_48.svg │ │ │ ├── Arch_AWS-Glue_48.png │ │ │ ├── Arch_AWS-Glue_48.svg │ │ │ ├── Arch_AWS-Glue-DataBrew_48.png │ │ │ ├── Arch_AWS-Glue-DataBrew_48.svg │ │ │ ├── Arch_AWS-Lake-Formation_48.png │ │ │ └── Arch_AWS-Lake-Formation_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-Athena_64.png │ │ ├── Arch_Amazon-Athena_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-CloudSearch_64.png │ │ ├── Arch_Amazon-CloudSearch_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Data-Firehose_64.png │ │ ├── Arch_Amazon-Data-Firehose_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-DataZone_64.png │ │ ├── Arch_Amazon-DataZone_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EMR_64.png │ │ ├── Arch_Amazon-EMR_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-FinSpace_64.png │ │ ├── Arch_Amazon-FinSpace_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Kinesis_64.png │ │ ├── Arch_Amazon-Kinesis_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Kinesis-Data-Streams_64.png │ │ ├── Arch_Amazon-Kinesis-Data-Streams_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Kinesis-Video-Streams_64.png │ │ ├── Arch_Amazon-Kinesis-Video-Streams_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_64.png │ │ ├── Arch_Amazon-Managed-Service-for-Apache-Flink_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_64.png │ │ ├── Arch_Amazon-Managed-Streaming-for-Apache-Kafka_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-OpenSearch-Service_64.png │ │ ├── Arch_Amazon-OpenSearch-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-QuickSight_64.png │ │ ├── Arch_Amazon-QuickSight_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Redshift_64.png │ │ ├── Arch_Amazon-Redshift_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-SageMaker_64.png │ │ ├── Arch_Amazon-SageMaker_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Clean-Rooms_64.png │ │ ├── Arch_AWS-Clean-Rooms_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Data-Exchange_64.png │ │ ├── Arch_AWS-Data-Exchange_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Entity-Resolution_64.png │ │ ├── Arch_AWS-Entity-Resolution_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Glue_64.png │ │ ├── Arch_AWS-Glue_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Glue-DataBrew_64.png │ │ ├── Arch_AWS-Glue-DataBrew_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Lake-Formation_64.png │ │ ├── Arch_AWS-Lake-Formation_64.svg │ │ └── [email protected] │ ├── app-integration │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-AppFlow_16.png │ │ │ ├── Arch_Amazon-AppFlow_16.svg │ │ │ ├── Arch_Amazon-EventBridge_16.png │ │ │ ├── Arch_Amazon-EventBridge_16.svg │ │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_16.png │ │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_16.svg │ │ │ ├── Arch_Amazon-MQ_16.png │ │ │ ├── Arch_Amazon-MQ_16.svg │ │ │ ├── Arch_Amazon-Simple-Notification-Service_16.png │ │ │ ├── Arch_Amazon-Simple-Notification-Service_16.svg │ │ │ ├── Arch_Amazon-Simple-Queue-Service_16.png │ │ │ ├── Arch_Amazon-Simple-Queue-Service_16.svg │ │ │ ├── Arch_AWS-AppSync_16.png │ │ │ ├── Arch_AWS-AppSync_16.svg │ │ │ ├── Arch_AWS-B2B-Data-Interchange_16.png │ │ │ ├── Arch_AWS-B2B-Data-Interchange_16.svg │ │ │ ├── Arch_AWS-Express-Workflows_16.png │ │ │ ├── Arch_AWS-Express-Workflows_16.svg │ │ │ ├── Arch_AWS-Step-Functions_16.png │ │ │ └── Arch_AWS-Step-Functions_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-AppFlow_32.png │ │ │ ├── Arch_Amazon-AppFlow_32.svg │ │ │ ├── Arch_Amazon-EventBridge_32.png │ │ │ ├── Arch_Amazon-EventBridge_32.svg │ │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_32.png │ │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_32.svg │ │ │ ├── Arch_Amazon-MQ_32.png │ │ │ ├── Arch_Amazon-MQ_32.svg │ │ │ ├── Arch_Amazon-Simple-Notification-Service_32.png │ │ │ ├── Arch_Amazon-Simple-Notification-Service_32.svg │ │ │ ├── Arch_Amazon-Simple-Queue-Service_32.png │ │ │ ├── Arch_Amazon-Simple-Queue-Service_32.svg │ │ │ ├── Arch_AWS-AppSync_32.png │ │ │ ├── Arch_AWS-AppSync_32.svg │ │ │ ├── Arch_AWS-B2B-Data-Interchange_32.png │ │ │ ├── Arch_AWS-B2B-Data-Interchange_32.svg │ │ │ ├── Arch_AWS-Express-Workflows_32.png │ │ │ ├── Arch_AWS-Express-Workflows_32.svg │ │ │ ├── Arch_AWS-Step-Functions_32.png │ │ │ └── Arch_AWS-Step-Functions_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-AppFlow_48.png │ │ │ ├── Arch_Amazon-AppFlow_48.svg │ │ │ ├── Arch_Amazon-EventBridge_48.png │ │ │ ├── Arch_Amazon-EventBridge_48.svg │ │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_48.png │ │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_48.svg │ │ │ ├── Arch_Amazon-MQ_48.png │ │ │ ├── Arch_Amazon-MQ_48.svg │ │ │ ├── Arch_Amazon-Simple-Notification-Service_48.png │ │ │ ├── Arch_Amazon-Simple-Notification-Service_48.svg │ │ │ ├── Arch_Amazon-Simple-Queue-Service_48.png │ │ │ ├── Arch_Amazon-Simple-Queue-Service_48.svg │ │ │ ├── Arch_AWS-AppSync_48.png │ │ │ ├── Arch_AWS-AppSync_48.svg │ │ │ ├── Arch_AWS-B2B-Data-Interchange_48.png │ │ │ ├── Arch_AWS-B2B-Data-Interchange_48.svg │ │ │ ├── Arch_AWS-Express-Workflows_48.png │ │ │ ├── Arch_AWS-Express-Workflows_48.svg │ │ │ ├── Arch_AWS-Step-Functions_48.png │ │ │ └── Arch_AWS-Step-Functions_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-AppFlow_64.png │ │ ├── Arch_Amazon-AppFlow_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EventBridge_64.png │ │ ├── Arch_Amazon-EventBridge_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_64.png │ │ ├── Arch_Amazon-Managed-Workflows-for-Apache-Airflow_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-MQ_64.png │ │ ├── Arch_Amazon-MQ_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Simple-Notification-Service_64.png │ │ ├── Arch_Amazon-Simple-Notification-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Simple-Queue-Service_64.png │ │ ├── Arch_Amazon-Simple-Queue-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-AppSync_64.png │ │ ├── Arch_AWS-AppSync_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-B2B-Data-Interchange_64.png │ │ ├── Arch_AWS-B2B-Data-Interchange_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Express-Workflows_64.png │ │ ├── Arch_AWS-Express-Workflows_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Step-Functions_64.png │ │ ├── Arch_AWS-Step-Functions_64.svg │ │ └── [email protected] │ ├── artificial-intelligence │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Augmented-AI-A2I_16.png │ │ │ ├── Arch_Amazon-Augmented-AI-A2I_16.svg │ │ │ ├── Arch_Amazon-Bedrock_16.png │ │ │ ├── Arch_Amazon-Bedrock_16.svg │ │ │ ├── Arch_Amazon-CodeGuru_16.png │ │ │ ├── Arch_Amazon-CodeGuru_16.svg │ │ │ ├── Arch_Amazon-CodeWhisperer_16.png │ │ │ ├── Arch_Amazon-CodeWhisperer_16.svg │ │ │ ├── Arch_Amazon-Comprehend_16.png │ │ │ ├── Arch_Amazon-Comprehend_16.svg │ │ │ ├── Arch_Amazon-Comprehend-Medical_16.png │ │ │ ├── Arch_Amazon-Comprehend-Medical_16.svg │ │ │ ├── Arch_Amazon-DevOps-Guru_16.png │ │ │ ├── Arch_Amazon-DevOps-Guru_16.svg │ │ │ ├── Arch_Amazon-Elastic-Inference_16.png │ │ │ ├── Arch_Amazon-Elastic-Inference_16.svg │ │ │ ├── Arch_Amazon-Forecast_16.png │ │ │ ├── Arch_Amazon-Forecast_16.svg │ │ │ ├── Arch_Amazon-Fraud-Detector_16.png │ │ │ ├── Arch_Amazon-Fraud-Detector_16.svg │ │ │ ├── Arch_Amazon-Kendra_16.png │ │ │ ├── Arch_Amazon-Kendra_16.svg │ │ │ ├── Arch_Amazon-Lex_16.png │ │ │ ├── Arch_Amazon-Lex_16.svg │ │ │ ├── Arch_Amazon-Lookout-for-Equipment_16.png │ │ │ ├── Arch_Amazon-Lookout-for-Equipment_16.svg │ │ │ ├── Arch_Amazon-Lookout-for-Metrics_16.png │ │ │ ├── Arch_Amazon-Lookout-for-Metrics_16.svg │ │ │ ├── Arch_Amazon-Lookout-for-Vision_16.png │ │ │ ├── Arch_Amazon-Lookout-for-Vision_16.svg │ │ │ ├── Arch_Amazon-Monitron_16.png │ │ │ ├── Arch_Amazon-Monitron_16.svg │ │ │ ├── Arch_Amazon-Nova_16.png │ │ │ ├── Arch_Amazon-Nova_16.svg │ │ │ ├── Arch_Amazon-Personalize_16.png │ │ │ ├── Arch_Amazon-Personalize_16.svg │ │ │ ├── Arch_Amazon-Polly_16.png │ │ │ ├── Arch_Amazon-Polly_16.svg │ │ │ ├── Arch_Amazon-Q_16.png │ │ │ ├── Arch_Amazon-Q_16.svg │ │ │ ├── Arch_Amazon-Rekognition_16.png │ │ │ ├── Arch_Amazon-Rekognition_16.svg │ │ │ ├── Arch_Amazon-SageMaker-AI_16.png │ │ │ ├── Arch_Amazon-SageMaker-AI_16.svg │ │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_16.png │ │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_16.svg │ │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_16.png │ │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_16.svg │ │ │ ├── Arch_Amazon-Textract_16.png │ │ │ ├── Arch_Amazon-Textract_16.svg │ │ │ ├── Arch_Amazon-Transcribe_16.png │ │ │ ├── Arch_Amazon-Transcribe_16.svg │ │ │ ├── Arch_Amazon-Translate_16.png │ │ │ ├── Arch_Amazon-Translate_16.svg │ │ │ ├── Arch_Apache-MXNet-on-AWS_16.png │ │ │ ├── Arch_Apache-MXNet-on-AWS_16.svg │ │ │ ├── Arch_AWS-App-Studio_16.png │ │ │ ├── Arch_AWS-App-Studio_16.svg │ │ │ ├── Arch_AWS-Deep-Learning-AMIs_16.png │ │ │ ├── Arch_AWS-Deep-Learning-AMIs_16.svg │ │ │ ├── Arch_AWS-Deep-Learning-Containers_16.png │ │ │ ├── Arch_AWS-Deep-Learning-Containers_16.svg │ │ │ ├── Arch_AWS-DeepComposer_16.png │ │ │ ├── Arch_AWS-DeepComposer_16.svg │ │ │ ├── Arch_AWS-DeepRacer_16.png │ │ │ ├── Arch_AWS-DeepRacer_16.svg │ │ │ ├── Arch_AWS-HealthImaging_16.png │ │ │ ├── Arch_AWS-HealthImaging_16.svg │ │ │ ├── Arch_AWS-HealthLake_16.png │ │ │ ├── Arch_AWS-HealthLake_16.svg │ │ │ ├── Arch_AWS-HealthOmics_16.png │ │ │ ├── Arch_AWS-HealthOmics_16.svg │ │ │ ├── Arch_AWS-HealthScribe_16.png │ │ │ ├── Arch_AWS-HealthScribe_16.svg │ │ │ ├── Arch_AWS-Neuron_16.png │ │ │ ├── Arch_AWS-Neuron_16.svg │ │ │ ├── Arch_AWS-Panorama_16.png │ │ │ ├── Arch_AWS-Panorama_16.svg │ │ │ ├── Arch_PyTorch-on-AWS_16.png │ │ │ ├── Arch_PyTorch-on-AWS_16.svg │ │ │ ├── Arch_TensorFlow-on-AWS_16.png │ │ │ └── Arch_TensorFlow-on-AWS_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Augmented-AI-A2I_32.png │ │ │ ├── Arch_Amazon-Augmented-AI-A2I_32.svg │ │ │ ├── Arch_Amazon-Bedrock_32.png │ │ │ ├── Arch_Amazon-Bedrock_32.svg │ │ │ ├── Arch_Amazon-CodeGuru_32.png │ │ │ ├── Arch_Amazon-CodeGuru_32.svg │ │ │ ├── Arch_Amazon-CodeWhisperer_32.png │ │ │ ├── Arch_Amazon-CodeWhisperer_32.svg │ │ │ ├── Arch_Amazon-Comprehend_32.png │ │ │ ├── Arch_Amazon-Comprehend_32.svg │ │ │ ├── Arch_Amazon-Comprehend-Medical_32.png │ │ │ ├── Arch_Amazon-Comprehend-Medical_32.svg │ │ │ ├── Arch_Amazon-DevOps-Guru_32.png │ │ │ ├── Arch_Amazon-DevOps-Guru_32.svg │ │ │ ├── Arch_Amazon-Elastic-Inference_32.png │ │ │ ├── Arch_Amazon-Elastic-Inference_32.svg │ │ │ ├── Arch_Amazon-Forecast_32.png │ │ │ ├── Arch_Amazon-Forecast_32.svg │ │ │ ├── Arch_Amazon-Fraud-Detector_32.png │ │ │ ├── Arch_Amazon-Fraud-Detector_32.svg │ │ │ ├── Arch_Amazon-Kendra_32.png │ │ │ ├── Arch_Amazon-Kendra_32.svg │ │ │ ├── Arch_Amazon-Lex_32.png │ │ │ ├── Arch_Amazon-Lex_32.svg │ │ │ ├── Arch_Amazon-Lookout-for-Equipment_32.png │ │ │ ├── Arch_Amazon-Lookout-for-Equipment_32.svg │ │ │ ├── Arch_Amazon-Lookout-for-Metrics_32.png │ │ │ ├── Arch_Amazon-Lookout-for-Metrics_32.svg │ │ │ ├── Arch_Amazon-Lookout-for-Vision_32.png │ │ │ ├── Arch_Amazon-Lookout-for-Vision_32.svg │ │ │ ├── Arch_Amazon-Monitron_32.png │ │ │ ├── Arch_Amazon-Monitron_32.svg │ │ │ ├── Arch_Amazon-Nova_32.png │ │ │ ├── Arch_Amazon-Nova_32.svg │ │ │ ├── Arch_Amazon-Personalize_32.png │ │ │ ├── Arch_Amazon-Personalize_32.svg │ │ │ ├── Arch_Amazon-Polly_32.png │ │ │ ├── Arch_Amazon-Polly_32.svg │ │ │ ├── Arch_Amazon-Q_32.png │ │ │ ├── Arch_Amazon-Q_32.svg │ │ │ ├── Arch_Amazon-Rekognition_32.png │ │ │ ├── Arch_Amazon-Rekognition_32.svg │ │ │ ├── Arch_Amazon-SageMaker-AI_32.png │ │ │ ├── Arch_Amazon-SageMaker-AI_32.svg │ │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_32.png │ │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_32.svg │ │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_32.png │ │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_32.svg │ │ │ ├── Arch_Amazon-Textract_32.png │ │ │ ├── Arch_Amazon-Textract_32.svg │ │ │ ├── Arch_Amazon-Transcribe_32.png │ │ │ ├── Arch_Amazon-Transcribe_32.svg │ │ │ ├── Arch_Amazon-Translate_32.png │ │ │ ├── Arch_Amazon-Translate_32.svg │ │ │ ├── Arch_Apache-MXNet-on-AWS_32.png │ │ │ ├── Arch_Apache-MXNet-on-AWS_32.svg │ │ │ ├── Arch_AWS-App-Studio_32.png │ │ │ ├── Arch_AWS-App-Studio_32.svg │ │ │ ├── Arch_AWS-Deep-Learning-AMIs_32.png │ │ │ ├── Arch_AWS-Deep-Learning-AMIs_32.svg │ │ │ ├── Arch_AWS-Deep-Learning-Containers_32.png │ │ │ ├── Arch_AWS-Deep-Learning-Containers_32.svg │ │ │ ├── Arch_AWS-DeepComposer_32.png │ │ │ ├── Arch_AWS-DeepComposer_32.svg │ │ │ ├── Arch_AWS-DeepRacer_32.png │ │ │ ├── Arch_AWS-DeepRacer_32.svg │ │ │ ├── Arch_AWS-HealthImaging_32.png │ │ │ ├── Arch_AWS-HealthImaging_32.svg │ │ │ ├── Arch_AWS-HealthLake_32.png │ │ │ ├── Arch_AWS-HealthLake_32.svg │ │ │ ├── Arch_AWS-HealthOmics_32.png │ │ │ ├── Arch_AWS-HealthOmics_32.svg │ │ │ ├── Arch_AWS-HealthScribe_32.png │ │ │ ├── Arch_AWS-HealthScribe_32.svg │ │ │ ├── Arch_AWS-Neuron_32.png │ │ │ ├── Arch_AWS-Neuron_32.svg │ │ │ ├── Arch_AWS-Panorama_32.png │ │ │ ├── Arch_AWS-Panorama_32.svg │ │ │ ├── Arch_PyTorch-on-AWS_32.png │ │ │ ├── Arch_PyTorch-on-AWS_32.svg │ │ │ ├── Arch_TensorFlow-on-AWS_32.png │ │ │ └── Arch_TensorFlow-on-AWS_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Augmented-AI-A2I_48.png │ │ │ ├── Arch_Amazon-Augmented-AI-A2I_48.svg │ │ │ ├── Arch_Amazon-Bedrock_48.png │ │ │ ├── Arch_Amazon-Bedrock_48.svg │ │ │ ├── Arch_Amazon-CodeGuru_48.png │ │ │ ├── Arch_Amazon-CodeGuru_48.svg │ │ │ ├── Arch_Amazon-CodeWhisperer_48.png │ │ │ ├── Arch_Amazon-CodeWhisperer_48.svg │ │ │ ├── Arch_Amazon-Comprehend_48.png │ │ │ ├── Arch_Amazon-Comprehend_48.svg │ │ │ ├── Arch_Amazon-Comprehend-Medical_48.png │ │ │ ├── Arch_Amazon-Comprehend-Medical_48.svg │ │ │ ├── Arch_Amazon-DevOps-Guru_48.png │ │ │ ├── Arch_Amazon-DevOps-Guru_48.svg │ │ │ ├── Arch_Amazon-Elastic-Inference_48.png │ │ │ ├── Arch_Amazon-Elastic-Inference_48.svg │ │ │ ├── Arch_Amazon-Forecast_48.png │ │ │ ├── Arch_Amazon-Forecast_48.svg │ │ │ ├── Arch_Amazon-Fraud-Detector_48.png │ │ │ ├── Arch_Amazon-Fraud-Detector_48.svg │ │ │ ├── Arch_Amazon-Kendra_48.png │ │ │ ├── Arch_Amazon-Kendra_48.svg │ │ │ ├── Arch_Amazon-Lex_48.png │ │ │ ├── Arch_Amazon-Lex_48.svg │ │ │ ├── Arch_Amazon-Lookout-for-Equipment_48.png │ │ │ ├── Arch_Amazon-Lookout-for-Equipment_48.svg │ │ │ ├── Arch_Amazon-Lookout-for-Metrics_48.png │ │ │ ├── Arch_Amazon-Lookout-for-Metrics_48.svg │ │ │ ├── Arch_Amazon-Lookout-for-Vision_48.png │ │ │ ├── Arch_Amazon-Lookout-for-Vision_48.svg │ │ │ ├── Arch_Amazon-Monitron_48.png │ │ │ ├── Arch_Amazon-Monitron_48.svg │ │ │ ├── Arch_Amazon-Nova_48.png │ │ │ ├── Arch_Amazon-Nova_48.svg │ │ │ ├── Arch_Amazon-Personalize_48.png │ │ │ ├── Arch_Amazon-Personalize_48.svg │ │ │ ├── Arch_Amazon-Polly_48.png │ │ │ ├── Arch_Amazon-Polly_48.svg │ │ │ ├── Arch_Amazon-Q_48.png │ │ │ ├── Arch_Amazon-Q_48.svg │ │ │ ├── Arch_Amazon-Rekognition_48.png │ │ │ ├── Arch_Amazon-Rekognition_48.svg │ │ │ ├── Arch_Amazon-SageMaker-AI_48.png │ │ │ ├── Arch_Amazon-SageMaker-AI_48.svg │ │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_48.png │ │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_48.svg │ │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_48.png │ │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_48.svg │ │ │ ├── Arch_Amazon-Textract_48.png │ │ │ ├── Arch_Amazon-Textract_48.svg │ │ │ ├── Arch_Amazon-Transcribe_48.png │ │ │ ├── Arch_Amazon-Transcribe_48.svg │ │ │ ├── Arch_Amazon-Translate_48.png │ │ │ ├── Arch_Amazon-Translate_48.svg │ │ │ ├── Arch_Apache-MXNet-on-AWS_48.png │ │ │ ├── Arch_Apache-MXNet-on-AWS_48.svg │ │ │ ├── Arch_AWS-App-Studio_48.png │ │ │ ├── Arch_AWS-App-Studio_48.svg │ │ │ ├── Arch_AWS-Deep-Learning-AMIs_48.png │ │ │ ├── Arch_AWS-Deep-Learning-AMIs_48.svg │ │ │ ├── Arch_AWS-Deep-Learning-Containers_48.png │ │ │ ├── Arch_AWS-Deep-Learning-Containers_48.svg │ │ │ ├── Arch_AWS-DeepComposer_48.png │ │ │ ├── Arch_AWS-DeepComposer_48.svg │ │ │ ├── Arch_AWS-DeepRacer_48.png │ │ │ ├── Arch_AWS-DeepRacer_48.svg │ │ │ ├── Arch_AWS-HealthImaging_48.png │ │ │ ├── Arch_AWS-HealthImaging_48.svg │ │ │ ├── Arch_AWS-HealthLake_48.png │ │ │ ├── Arch_AWS-HealthLake_48.svg │ │ │ ├── Arch_AWS-HealthOmics_48.png │ │ │ ├── Arch_AWS-HealthOmics_48.svg │ │ │ ├── Arch_AWS-HealthScribe_48.png │ │ │ ├── Arch_AWS-HealthScribe_48.svg │ │ │ ├── Arch_AWS-Neuron_48.png │ │ │ ├── Arch_AWS-Neuron_48.svg │ │ │ ├── Arch_AWS-Panorama_48.png │ │ │ ├── Arch_AWS-Panorama_48.svg │ │ │ ├── Arch_PyTorch-on-AWS_48.png │ │ │ ├── Arch_PyTorch-on-AWS_48.svg │ │ │ ├── Arch_TensorFlow-on-AWS_48.png │ │ │ └── Arch_TensorFlow-on-AWS_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-Augmented-AI-A2I_64.png │ │ ├── Arch_Amazon-Augmented-AI-A2I_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Bedrock_64.png │ │ ├── Arch_Amazon-Bedrock_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-CodeGuru_64.png │ │ ├── Arch_Amazon-CodeGuru_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-CodeWhisperer_64.png │ │ ├── Arch_Amazon-CodeWhisperer_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Comprehend_64.png │ │ ├── Arch_Amazon-Comprehend_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Comprehend-Medical_64.png │ │ ├── Arch_Amazon-Comprehend-Medical_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-DevOps-Guru_64.png │ │ ├── Arch_Amazon-DevOps-Guru_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Elastic-Inference_64.png │ │ ├── Arch_Amazon-Elastic-Inference_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Forecast_64.png │ │ ├── Arch_Amazon-Forecast_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Fraud-Detector_64.png │ │ ├── Arch_Amazon-Fraud-Detector_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Kendra_64.png │ │ ├── Arch_Amazon-Kendra_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Lex_64.png │ │ ├── Arch_Amazon-Lex_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Lookout-for-Equipment_64.png │ │ ├── Arch_Amazon-Lookout-for-Equipment_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Lookout-for-Metrics_64.png │ │ ├── Arch_Amazon-Lookout-for-Metrics_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Lookout-for-Vision_64.png │ │ ├── Arch_Amazon-Lookout-for-Vision_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Monitron_64.png │ │ ├── Arch_Amazon-Monitron_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Nova_64.png │ │ ├── Arch_Amazon-Nova_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Personalize_64.png │ │ ├── Arch_Amazon-Personalize_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Polly_64.png │ │ ├── Arch_Amazon-Polly_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Q_64.png │ │ ├── Arch_Amazon-Q_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Rekognition_64.png │ │ ├── Arch_Amazon-Rekognition_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-SageMaker-AI_64.png │ │ ├── Arch_Amazon-SageMaker-AI_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_64.png │ │ ├── Arch_Amazon-SageMaker-Ground-Truth_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_64.png │ │ ├── Arch_Amazon-SageMaker-Studio-Lab_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Textract_64.png │ │ ├── Arch_Amazon-Textract_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Transcribe_64.png │ │ ├── Arch_Amazon-Transcribe_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Translate_64.png │ │ ├── Arch_Amazon-Translate_64.svg │ │ ├── [email protected] │ │ ├── Arch_Apache-MXNet-on-AWS_64.png │ │ ├── Arch_Apache-MXNet-on-AWS_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-App-Studio_64.png │ │ ├── Arch_AWS-App-Studio_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Deep-Learning-AMIs_64.png │ │ ├── Arch_AWS-Deep-Learning-AMIs_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Deep-Learning-Containers_64.png │ │ ├── Arch_AWS-Deep-Learning-Containers_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-DeepComposer_64.png │ │ ├── Arch_AWS-DeepComposer_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-DeepRacer_64.png │ │ ├── Arch_AWS-DeepRacer_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-HealthImaging_64.png │ │ ├── Arch_AWS-HealthImaging_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-HealthLake_64.png │ │ ├── Arch_AWS-HealthLake_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-HealthOmics_64.png │ │ ├── Arch_AWS-HealthOmics_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-HealthScribe_64.png │ │ ├── Arch_AWS-HealthScribe_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Neuron_64.png │ │ ├── Arch_AWS-Neuron_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Panorama_64.png │ │ ├── Arch_AWS-Panorama_64.svg │ │ ├── [email protected] │ │ ├── Arch_PyTorch-on-AWS_64.png │ │ ├── Arch_PyTorch-on-AWS_64.svg │ │ ├── [email protected] │ │ ├── Arch_TensorFlow-on-AWS_64.png │ │ ├── Arch_TensorFlow-on-AWS_64.svg │ │ └── [email protected] │ ├── blockchain │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_Amazon-Managed-Blockchain_16.png │ │ │ ├── Arch_Amazon-Managed-Blockchain_16.svg │ │ │ ├── Arch_Amazon-Quantum-Ledger-Database_16.png │ │ │ └── Arch_Amazon-Quantum-Ledger-Database_16.svg │ │ ├── 32 │ │ │ ├── Arch_Amazon-Managed-Blockchain_32.png │ │ │ ├── Arch_Amazon-Managed-Blockchain_32.svg │ │ │ ├── Arch_Amazon-Quantum-Ledger-Database_32.png │ │ │ └── Arch_Amazon-Quantum-Ledger-Database_32.svg │ │ ├── 48 │ │ │ ├── Arch_Amazon-Managed-Blockchain_48.png │ │ │ ├── Arch_Amazon-Managed-Blockchain_48.svg │ │ │ ├── Arch_Amazon-Quantum-Ledger-Database_48.png │ │ │ └── Arch_Amazon-Quantum-Ledger-Database_48.svg │ │ └── 64 │ │ ├── Arch_Amazon-Managed-Blockchain_64.png │ │ ├── Arch_Amazon-Managed-Blockchain_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Quantum-Ledger-Database_64.png │ │ ├── Arch_Amazon-Quantum-Ledger-Database_64.svg │ │ └── [email protected] │ ├── business-applications │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Alexa-For-Business_16.png │ │ │ ├── Arch_Alexa-For-Business_16.svg │ │ │ ├── Arch_Amazon-Chime_16.png │ │ │ ├── Arch_Amazon-Chime_16.svg │ │ │ ├── Arch_Amazon-Chime-SDK_16.png │ │ │ ├── Arch_Amazon-Chime-SDK_16.svg │ │ │ ├── Arch_Amazon-Connect_16.png │ │ │ ├── Arch_Amazon-Connect_16.svg │ │ │ ├── Arch_Amazon-Pinpoint_16.png │ │ │ ├── Arch_Amazon-Pinpoint_16.svg │ │ │ ├── Arch_Amazon-Pinpoint-APIs_16.png │ │ │ ├── Arch_Amazon-Pinpoint-APIs_16.svg │ │ │ ├── Arch_Amazon-Simple-Email-Service_16.png │ │ │ ├── Arch_Amazon-Simple-Email-Service_16.svg │ │ │ ├── Arch_Amazon-WorkDocs_16.png │ │ │ ├── Arch_Amazon-WorkDocs_16.svg │ │ │ ├── Arch_Amazon-WorkDocs-SDK_16.png │ │ │ ├── Arch_Amazon-WorkDocs-SDK_16.svg │ │ │ ├── Arch_Amazon-WorkMail_16.png │ │ │ ├── Arch_Amazon-WorkMail_16.svg │ │ │ ├── Arch_AWS-AppFabric_16.png │ │ │ ├── Arch_AWS-AppFabric_16.svg │ │ │ ├── Arch_AWS-End-User-Messaging_16.png │ │ │ ├── Arch_AWS-End-User-Messaging_16.svg │ │ │ ├── Arch_AWS-Supply-Chain_16.png │ │ │ ├── Arch_AWS-Supply-Chain_16.svg │ │ │ ├── Arch_AWS-Wickr_16.png │ │ │ └── Arch_AWS-Wickr_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Alexa-For-Business_32.png │ │ │ ├── Arch_Alexa-For-Business_32.svg │ │ │ ├── Arch_Amazon-Chime_32.png │ │ │ ├── Arch_Amazon-Chime_32.svg │ │ │ ├── Arch_Amazon-Chime-SDK_32.png │ │ │ ├── Arch_Amazon-Chime-SDK_32.svg │ │ │ ├── Arch_Amazon-Connect_32.png │ │ │ ├── Arch_Amazon-Connect_32.svg │ │ │ ├── Arch_Amazon-Pinpoint_32.png │ │ │ ├── Arch_Amazon-Pinpoint_32.svg │ │ │ ├── Arch_Amazon-Pinpoint-APIs_32.png │ │ │ ├── Arch_Amazon-Pinpoint-APIs_32.svg │ │ │ ├── Arch_Amazon-Simple-Email-Service_32.png │ │ │ ├── Arch_Amazon-Simple-Email-Service_32.svg │ │ │ ├── Arch_Amazon-WorkDocs_32.png │ │ │ ├── Arch_Amazon-WorkDocs_32.svg │ │ │ ├── Arch_Amazon-WorkDocs-SDK_32.png │ │ │ ├── Arch_Amazon-WorkDocs-SDK_32.svg │ │ │ ├── Arch_Amazon-WorkMail_32.png │ │ │ ├── Arch_Amazon-WorkMail_32.svg │ │ │ ├── Arch_AWS-AppFabric_32.png │ │ │ ├── Arch_AWS-AppFabric_32.svg │ │ │ ├── Arch_AWS-End-User-Messaging_32.png │ │ │ ├── Arch_AWS-End-User-Messaging_32.svg │ │ │ ├── Arch_AWS-Supply-Chain_32.png │ │ │ ├── Arch_AWS-Supply-Chain_32.svg │ │ │ ├── Arch_AWS-Wickr_32.png │ │ │ └── Arch_AWS-Wickr_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Alexa-For-Business_48.png │ │ │ ├── Arch_Alexa-For-Business_48.svg │ │ │ ├── Arch_Amazon-Chime_48.png │ │ │ ├── Arch_Amazon-Chime_48.svg │ │ │ ├── Arch_Amazon-Chime-SDK_48.png │ │ │ ├── Arch_Amazon-Chime-SDK_48.svg │ │ │ ├── Arch_Amazon-Connect_48.png │ │ │ ├── Arch_Amazon-Connect_48.svg │ │ │ ├── Arch_Amazon-Pinpoint_48.png │ │ │ ├── Arch_Amazon-Pinpoint_48.svg │ │ │ ├── Arch_Amazon-Pinpoint-APIs_48.png │ │ │ ├── Arch_Amazon-Pinpoint-APIs_48.svg │ │ │ ├── Arch_Amazon-Simple-Email-Service_48.png │ │ │ ├── Arch_Amazon-Simple-Email-Service_48.svg │ │ │ ├── Arch_Amazon-WorkDocs_48.png │ │ │ ├── Arch_Amazon-WorkDocs_48.svg │ │ │ ├── Arch_Amazon-WorkDocs-SDK_48.png │ │ │ ├── Arch_Amazon-WorkDocs-SDK_48.svg │ │ │ ├── Arch_Amazon-WorkMail_48.png │ │ │ ├── Arch_Amazon-WorkMail_48.svg │ │ │ ├── Arch_AWS-AppFabric_48.png │ │ │ ├── Arch_AWS-AppFabric_48.svg │ │ │ ├── Arch_AWS-End-User-Messaging_48.png │ │ │ ├── Arch_AWS-End-User-Messaging_48.svg │ │ │ ├── Arch_AWS-Supply-Chain_48.png │ │ │ ├── Arch_AWS-Supply-Chain_48.svg │ │ │ ├── Arch_AWS-Wickr_48.png │ │ │ └── Arch_AWS-Wickr_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Alexa-For-Business_64.png │ │ ├── Arch_Alexa-For-Business_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Chime_64.png │ │ ├── Arch_Amazon-Chime_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Chime-SDK_64.png │ │ ├── Arch_Amazon-Chime-SDK_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Connect_64.png │ │ ├── Arch_Amazon-Connect_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Pinpoint_64.png │ │ ├── Arch_Amazon-Pinpoint_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Pinpoint-APIs_64.png │ │ ├── Arch_Amazon-Pinpoint-APIs_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Simple-Email-Service_64.png │ │ ├── Arch_Amazon-Simple-Email-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-WorkDocs_64.png │ │ ├── Arch_Amazon-WorkDocs_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-WorkDocs-SDK_64.png │ │ ├── Arch_Amazon-WorkDocs-SDK_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-WorkMail_64.png │ │ ├── Arch_Amazon-WorkMail_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-AppFabric_64.png │ │ ├── Arch_AWS-AppFabric_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-End-User-Messaging_64.png │ │ ├── Arch_AWS-End-User-Messaging_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Supply-Chain_64.png │ │ ├── Arch_AWS-Supply-Chain_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Wickr_64.png │ │ ├── Arch_AWS-Wickr_64.svg │ │ └── [email protected] │ ├── cloud-financial │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-Billing-Conductor_16.png │ │ │ ├── Arch_AWS-Billing-Conductor_16.svg │ │ │ ├── Arch_AWS-Budgets_16.png │ │ │ ├── Arch_AWS-Budgets_16.svg │ │ │ ├── Arch_AWS-Cost-and-Usage-Report_16.png │ │ │ ├── Arch_AWS-Cost-and-Usage-Report_16.svg │ │ │ ├── Arch_AWS-Cost-Explorer_16.png │ │ │ ├── Arch_AWS-Cost-Explorer_16.svg │ │ │ ├── Arch_Reserved-Instance-Reporting_16.png │ │ │ ├── Arch_Reserved-Instance-Reporting_16.svg │ │ │ ├── Arch_Savings-Plans_16.png │ │ │ └── Arch_Savings-Plans_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-Billing-Conductor_32.png │ │ │ ├── Arch_AWS-Billing-Conductor_32.svg │ │ │ ├── Arch_AWS-Budgets_32.png │ │ │ ├── Arch_AWS-Budgets_32.svg │ │ │ ├── Arch_AWS-Cost-and-Usage-Report_32.png │ │ │ ├── Arch_AWS-Cost-and-Usage-Report_32.svg │ │ │ ├── Arch_AWS-Cost-Explorer_32.png │ │ │ ├── Arch_AWS-Cost-Explorer_32.svg │ │ │ ├── Arch_Reserved-Instance-Reporting_32.png │ │ │ ├── Arch_Reserved-Instance-Reporting_32.svg │ │ │ ├── Arch_Savings-Plans_32.png │ │ │ └── Arch_Savings-Plans_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-Billing-Conductor_48.png │ │ │ ├── Arch_AWS-Billing-Conductor_48.svg │ │ │ ├── Arch_AWS-Budgets_48.png │ │ │ ├── Arch_AWS-Budgets_48.svg │ │ │ ├── Arch_AWS-Cost-and-Usage-Report_48.png │ │ │ ├── Arch_AWS-Cost-and-Usage-Report_48.svg │ │ │ ├── Arch_AWS-Cost-Explorer_48.png │ │ │ ├── Arch_AWS-Cost-Explorer_48.svg │ │ │ ├── Arch_Reserved-Instance-Reporting_48.png │ │ │ ├── Arch_Reserved-Instance-Reporting_48.svg │ │ │ ├── Arch_Savings-Plans_48.png │ │ │ └── Arch_Savings-Plans_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_AWS-Billing-Conductor_64.png │ │ ├── Arch_AWS-Billing-Conductor_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Budgets_64.png │ │ ├── Arch_AWS-Budgets_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Cost-and-Usage-Report_64.png │ │ ├── Arch_AWS-Cost-and-Usage-Report_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Cost-Explorer_64.png │ │ ├── Arch_AWS-Cost-Explorer_64.svg │ │ ├── [email protected] │ │ ├── Arch_Reserved-Instance-Reporting_64.png │ │ ├── Arch_Reserved-Instance-Reporting_64.svg │ │ ├── [email protected] │ │ ├── Arch_Savings-Plans_64.png │ │ ├── Arch_Savings-Plans_64.svg │ │ └── [email protected] │ ├── compute │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-DCV_16.png │ │ │ ├── Arch_Amazon-DCV_16.svg │ │ │ ├── Arch_Amazon-EC2_16.png │ │ │ ├── Arch_Amazon-EC2_16.svg │ │ │ ├── Arch_Amazon-EC2-Auto-Scaling_16.png │ │ │ ├── Arch_Amazon-EC2-Auto-Scaling_16.svg │ │ │ ├── Arch_Amazon-EC2-Image-Builder_16.png │ │ │ ├── Arch_Amazon-EC2-Image-Builder_16.svg │ │ │ ├── Arch_Amazon-Elastic-VMware-Service_16.png │ │ │ ├── Arch_Amazon-Elastic-VMware-Service_16.svg │ │ │ ├── Arch_Amazon-Lightsail_16.png │ │ │ ├── Arch_Amazon-Lightsail_16.svg │ │ │ ├── Arch_Amazon-Lightsail-for-Research_16.png │ │ │ ├── Arch_Amazon-Lightsail-for-Research_16.svg │ │ │ ├── Arch_AWS-App-Runner_16.png │ │ │ ├── Arch_AWS-App-Runner_16.svg │ │ │ ├── Arch_AWS-Batch_16.png │ │ │ ├── Arch_AWS-Batch_16.svg │ │ │ ├── Arch_AWS-Compute-Optimizer_16.png │ │ │ ├── Arch_AWS-Compute-Optimizer_16.svg │ │ │ ├── Arch_AWS-Elastic-Beanstalk_16.png │ │ │ ├── Arch_AWS-Elastic-Beanstalk_16.svg │ │ │ ├── Arch_AWS-Lambda_16.png │ │ │ ├── Arch_AWS-Lambda_16.svg │ │ │ ├── Arch_AWS-Local-Zones_16.png │ │ │ ├── Arch_AWS-Local-Zones_16.svg │ │ │ ├── Arch_AWS-Nitro-Enclaves_16.png │ │ │ ├── Arch_AWS-Nitro-Enclaves_16.svg │ │ │ ├── Arch_AWS-Outposts-family_16.png │ │ │ ├── Arch_AWS-Outposts-family_16.svg │ │ │ ├── Arch_AWS-Outposts-rack_16.png │ │ │ ├── Arch_AWS-Outposts-rack_16.svg │ │ │ ├── Arch_AWS-Outposts-servers_16.png │ │ │ ├── Arch_AWS-Outposts-servers_16.svg │ │ │ ├── Arch_AWS-Parallel-Cluster_16.png │ │ │ ├── Arch_AWS-Parallel-Cluster_16.svg │ │ │ ├── Arch_AWS-Parallel-Computing-Service_16.png │ │ │ ├── Arch_AWS-Parallel-Computing-Service_16.svg │ │ │ ├── Arch_AWS-Serverless-Application-Repository_16.png │ │ │ ├── Arch_AWS-Serverless-Application-Repository_16.svg │ │ │ ├── Arch_AWS-SimSpace-Weaver_16.png │ │ │ ├── Arch_AWS-SimSpace-Weaver_16.svg │ │ │ ├── Arch_AWS-Wavelength_16.png │ │ │ ├── Arch_AWS-Wavelength_16.svg │ │ │ ├── Arch_Bottlerocket_16.png │ │ │ ├── Arch_Bottlerocket_16.svg │ │ │ ├── Arch_Elastic-Fabric-Adapter_16.png │ │ │ ├── Arch_Elastic-Fabric-Adapter_16.svg │ │ │ ├── Arch_NICE-EnginFrame_16.png │ │ │ └── Arch_NICE-EnginFrame_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-DCV_32.png │ │ │ ├── Arch_Amazon-DCV_32.svg │ │ │ ├── Arch_Amazon-EC2_32.png │ │ │ ├── Arch_Amazon-EC2_32.svg │ │ │ ├── Arch_Amazon-EC2-Auto-Scaling_32.png │ │ │ ├── Arch_Amazon-EC2-Auto-Scaling_32.svg │ │ │ ├── Arch_Amazon-EC2-Image-Builder_32.png │ │ │ ├── Arch_Amazon-EC2-Image-Builder_32.svg │ │ │ ├── Arch_Amazon-Elastic-VMware-Service_32.png │ │ │ ├── Arch_Amazon-Elastic-VMware-Service_32.svg │ │ │ ├── Arch_Amazon-Lightsail_32.png │ │ │ ├── Arch_Amazon-Lightsail_32.svg │ │ │ ├── Arch_Amazon-Lightsail-for-Research_32.png │ │ │ ├── Arch_Amazon-Lightsail-for-Research_32.svg │ │ │ ├── Arch_AWS-App-Runner_32.png │ │ │ ├── Arch_AWS-App-Runner_32.svg │ │ │ ├── Arch_AWS-Batch_32.png │ │ │ ├── Arch_AWS-Batch_32.svg │ │ │ ├── Arch_AWS-Compute-Optimizer_32.png │ │ │ ├── Arch_AWS-Compute-Optimizer_32.svg │ │ │ ├── Arch_AWS-Elastic-Beanstalk_32.png │ │ │ ├── Arch_AWS-Elastic-Beanstalk_32.svg │ │ │ ├── Arch_AWS-Lambda_32.png │ │ │ ├── Arch_AWS-Lambda_32.svg │ │ │ ├── Arch_AWS-Local-Zones_32.png │ │ │ ├── Arch_AWS-Local-Zones_32.svg │ │ │ ├── Arch_AWS-Nitro-Enclaves_32.png │ │ │ ├── Arch_AWS-Nitro-Enclaves_32.svg │ │ │ ├── Arch_AWS-Outposts-family_32.png │ │ │ ├── Arch_AWS-Outposts-family_32.svg │ │ │ ├── Arch_AWS-Outposts-rack_32.png │ │ │ ├── Arch_AWS-Outposts-rack_32.svg │ │ │ ├── Arch_AWS-Outposts-servers_32.png │ │ │ ├── Arch_AWS-Outposts-servers_32.svg │ │ │ ├── Arch_AWS-Parallel-Cluster_32.png │ │ │ ├── Arch_AWS-Parallel-Cluster_32.svg │ │ │ ├── Arch_AWS-Parallel-Computing-Service_32.png │ │ │ ├── Arch_AWS-Parallel-Computing-Service_32.svg │ │ │ ├── Arch_AWS-Serverless-Application-Repository_32.png │ │ │ ├── Arch_AWS-Serverless-Application-Repository_32.svg │ │ │ ├── Arch_AWS-SimSpace-Weaver_32.png │ │ │ ├── Arch_AWS-SimSpace-Weaver_32.svg │ │ │ ├── Arch_AWS-Wavelength_32.png │ │ │ ├── Arch_AWS-Wavelength_32.svg │ │ │ ├── Arch_Bottlerocket_32.png │ │ │ ├── Arch_Bottlerocket_32.svg │ │ │ ├── Arch_Elastic-Fabric-Adapter_32.png │ │ │ ├── Arch_Elastic-Fabric-Adapter_32.svg │ │ │ ├── Arch_NICE-EnginFrame_32.png │ │ │ └── Arch_NICE-EnginFrame_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-DCV_48.png │ │ │ ├── Arch_Amazon-DCV_48.svg │ │ │ ├── Arch_Amazon-EC2_48.png │ │ │ ├── Arch_Amazon-EC2_48.svg │ │ │ ├── Arch_Amazon-EC2-Auto-Scaling_48.png │ │ │ ├── Arch_Amazon-EC2-Auto-Scaling_48.svg │ │ │ ├── Arch_Amazon-EC2-Image-Builder_48.png │ │ │ ├── Arch_Amazon-EC2-Image-Builder_48.svg │ │ │ ├── Arch_Amazon-Elastic-VMware-Service_48.png │ │ │ ├── Arch_Amazon-Elastic-VMware-Service_48.svg │ │ │ ├── Arch_Amazon-Lightsail_48.png │ │ │ ├── Arch_Amazon-Lightsail_48.svg │ │ │ ├── Arch_Amazon-Lightsail-for-Research_48.png │ │ │ ├── Arch_Amazon-Lightsail-for-Research_48.svg │ │ │ ├── Arch_AWS-App-Runner_48.png │ │ │ ├── Arch_AWS-App-Runner_48.svg │ │ │ ├── Arch_AWS-Batch_48.png │ │ │ ├── Arch_AWS-Batch_48.svg │ │ │ ├── Arch_AWS-Compute-Optimizer_48.png │ │ │ ├── Arch_AWS-Compute-Optimizer_48.svg │ │ │ ├── Arch_AWS-Elastic-Beanstalk_48.png │ │ │ ├── Arch_AWS-Elastic-Beanstalk_48.svg │ │ │ ├── Arch_AWS-Lambda_48.png │ │ │ ├── Arch_AWS-Lambda_48.svg │ │ │ ├── Arch_AWS-Local-Zones_48.png │ │ │ ├── Arch_AWS-Local-Zones_48.svg │ │ │ ├── Arch_AWS-Nitro-Enclaves_48.png │ │ │ ├── Arch_AWS-Nitro-Enclaves_48.svg │ │ │ ├── Arch_AWS-Outposts-family_48.png │ │ │ ├── Arch_AWS-Outposts-family_48.svg │ │ │ ├── Arch_AWS-Outposts-rack_48.png │ │ │ ├── Arch_AWS-Outposts-rack_48.svg │ │ │ ├── Arch_AWS-Outposts-servers_48.png │ │ │ ├── Arch_AWS-Outposts-servers_48.svg │ │ │ ├── Arch_AWS-Parallel-Cluster_48.png │ │ │ ├── Arch_AWS-Parallel-Cluster_48.svg │ │ │ ├── Arch_AWS-Parallel-Computing-Service_48.png │ │ │ ├── Arch_AWS-Parallel-Computing-Service_48.svg │ │ │ ├── Arch_AWS-Serverless-Application-Repository_48.png │ │ │ ├── Arch_AWS-Serverless-Application-Repository_48.svg │ │ │ ├── Arch_AWS-SimSpace-Weaver_48.png │ │ │ ├── Arch_AWS-SimSpace-Weaver_48.svg │ │ │ ├── Arch_AWS-Wavelength_48.png │ │ │ ├── Arch_AWS-Wavelength_48.svg │ │ │ ├── Arch_Bottlerocket_48.png │ │ │ ├── Arch_Bottlerocket_48.svg │ │ │ ├── Arch_Elastic-Fabric-Adapter_48.png │ │ │ ├── Arch_Elastic-Fabric-Adapter_48.svg │ │ │ ├── Arch_NICE-EnginFrame_48.png │ │ │ └── Arch_NICE-EnginFrame_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-DCV_64.png │ │ ├── Arch_Amazon-DCV_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EC2_64.png │ │ ├── Arch_Amazon-EC2_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EC2-Auto-Scaling_64.png │ │ ├── Arch_Amazon-EC2-Auto-Scaling_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EC2-Image-Builder_64.png │ │ ├── Arch_Amazon-EC2-Image-Builder_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Elastic-VMware-Service_64.png │ │ ├── Arch_Amazon-Elastic-VMware-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Lightsail_64.png │ │ ├── Arch_Amazon-Lightsail_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Lightsail-for-Research_64.png │ │ ├── Arch_Amazon-Lightsail-for-Research_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-App-Runner_64.png │ │ ├── Arch_AWS-App-Runner_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Batch_64.png │ │ ├── Arch_AWS-Batch_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Compute-Optimizer_64.png │ │ ├── Arch_AWS-Compute-Optimizer_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elastic-Beanstalk_64.png │ │ ├── Arch_AWS-Elastic-Beanstalk_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Lambda_64.png │ │ ├── Arch_AWS-Lambda_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Local-Zones_64.png │ │ ├── Arch_AWS-Local-Zones_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Nitro-Enclaves_64.png │ │ ├── Arch_AWS-Nitro-Enclaves_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Outposts-family_64.png │ │ ├── Arch_AWS-Outposts-family_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Outposts-rack_64.png │ │ ├── Arch_AWS-Outposts-rack_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Outposts-servers_64.png │ │ ├── Arch_AWS-Outposts-servers_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Parallel-Cluster_64.png │ │ ├── Arch_AWS-Parallel-Cluster_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Parallel-Computing-Service_64.png │ │ ├── Arch_AWS-Parallel-Computing-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Serverless-Application-Repository_64.png │ │ ├── Arch_AWS-Serverless-Application-Repository_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-SimSpace-Weaver_64.png │ │ ├── Arch_AWS-SimSpace-Weaver_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Wavelength_64.png │ │ ├── Arch_AWS-Wavelength_64.svg │ │ ├── [email protected] │ │ ├── Arch_Bottlerocket_64.png │ │ ├── Arch_Bottlerocket_64.svg │ │ ├── [email protected] │ │ ├── Arch_Elastic-Fabric-Adapter_64.png │ │ ├── Arch_Elastic-Fabric-Adapter_64.svg │ │ ├── [email protected] │ │ ├── Arch_NICE-EnginFrame_64.png │ │ ├── Arch_NICE-EnginFrame_64.svg │ │ └── [email protected] │ ├── containers │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_Amazon-ECS-Anywhere_16.png │ │ │ ├── Arch_Amazon-ECS-Anywhere_16.svg │ │ │ ├── Arch_Amazon-EKS-Anywhere_16.png │ │ │ ├── Arch_Amazon-EKS-Anywhere_16.svg │ │ │ ├── Arch_Amazon-EKS-Cloud_16.png │ │ │ ├── Arch_Amazon-EKS-Cloud_16.svg │ │ │ ├── Arch_Amazon-EKS-Distro_16.png │ │ │ ├── Arch_Amazon-EKS-Distro_16.svg │ │ │ ├── Arch_Amazon-Elastic-Container-Registry_16.png │ │ │ ├── Arch_Amazon-Elastic-Container-Registry_16.svg │ │ │ ├── Arch_Amazon-Elastic-Container-Service_16.png │ │ │ ├── Arch_Amazon-Elastic-Container-Service_16.svg │ │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_16.png │ │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_16.svg │ │ │ ├── Arch_AWS-Fargate_16.png │ │ │ ├── Arch_AWS-Fargate_16.svg │ │ │ ├── Arch_Red-Hat-OpenShift-Service-on-AWS_16.png │ │ │ └── Arch_Red-Hat-OpenShift-Service-on-AWS_16.svg │ │ ├── 32 │ │ │ ├── Arch_Amazon-ECS-Anywhere_32.png │ │ │ ├── Arch_Amazon-ECS-Anywhere_32.svg │ │ │ ├── Arch_Amazon-EKS-Anywhere_32.png │ │ │ ├── Arch_Amazon-EKS-Anywhere_32.svg │ │ │ ├── Arch_Amazon-EKS-Cloud_32.png │ │ │ ├── Arch_Amazon-EKS-Cloud_32.svg │ │ │ ├── Arch_Amazon-EKS-Distro_32.png │ │ │ ├── Arch_Amazon-EKS-Distro_32.svg │ │ │ ├── Arch_Amazon-Elastic-Container-Registry_32.png │ │ │ ├── Arch_Amazon-Elastic-Container-Registry_32.svg │ │ │ ├── Arch_Amazon-Elastic-Container-Service_32.png │ │ │ ├── Arch_Amazon-Elastic-Container-Service_32.svg │ │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_32.png │ │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_32.svg │ │ │ ├── Arch_AWS-Fargate_32.png │ │ │ ├── Arch_AWS-Fargate_32.svg │ │ │ ├── Arch_Red-Hat-OpenShift-Service-on-AWS_32.png │ │ │ └── Arch_Red-Hat-OpenShift-Service-on-AWS_32.svg │ │ ├── 48 │ │ │ ├── Arch_Amazon-ECS-Anywhere_48.png │ │ │ ├── Arch_Amazon-ECS-Anywhere_48.svg │ │ │ ├── Arch_Amazon-EKS-Anywhere_48.png │ │ │ ├── Arch_Amazon-EKS-Anywhere_48.svg │ │ │ ├── Arch_Amazon-EKS-Cloud_48.png │ │ │ ├── Arch_Amazon-EKS-Cloud_48.svg │ │ │ ├── Arch_Amazon-EKS-Distro_48.png │ │ │ ├── Arch_Amazon-EKS-Distro_48.svg │ │ │ ├── Arch_Amazon-Elastic-Container-Registry_48.png │ │ │ ├── Arch_Amazon-Elastic-Container-Registry_48.svg │ │ │ ├── Arch_Amazon-Elastic-Container-Service_48.png │ │ │ ├── Arch_Amazon-Elastic-Container-Service_48.svg │ │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_48.png │ │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_48.svg │ │ │ ├── Arch_AWS-Fargate_48.png │ │ │ ├── Arch_AWS-Fargate_48.svg │ │ │ ├── Arch_Red-Hat-OpenShift-Service-on-AWS_48.png │ │ │ └── Arch_Red-Hat-OpenShift-Service-on-AWS_48.svg │ │ └── 64 │ │ ├── Arch_Amazon-ECS-Anywhere_64.png │ │ ├── Arch_Amazon-ECS-Anywhere_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EKS-Anywhere_64.png │ │ ├── Arch_Amazon-EKS-Anywhere_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EKS-Cloud_64.png │ │ ├── Arch_Amazon-EKS-Cloud_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-EKS-Distro_64.png │ │ ├── Arch_Amazon-EKS-Distro_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Elastic-Container-Registry_64.png │ │ ├── Arch_Amazon-Elastic-Container-Registry_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Elastic-Container-Service_64.png │ │ ├── Arch_Amazon-Elastic-Container-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_64.png │ │ ├── Arch_Amazon-Elastic-Kubernetes-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Fargate_64.png │ │ ├── Arch_AWS-Fargate_64.svg │ │ ├── [email protected] │ │ ├── Arch_Red-Hat-OpenShift-Service-on-AWS_64.png │ │ ├── Arch_Red-Hat-OpenShift-Service-on-AWS_64.svg │ │ └── [email protected] │ ├── customer-enablement │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_AWS-Activate_16.png │ │ │ ├── Arch_AWS-Activate_16.svg │ │ │ ├── Arch_AWS-IQ_16.png │ │ │ ├── Arch_AWS-IQ_16.svg │ │ │ ├── Arch_AWS-Managed-Services_16.png │ │ │ ├── Arch_AWS-Managed-Services_16.svg │ │ │ ├── Arch_AWS-Professional-Services_16.png │ │ │ ├── Arch_AWS-Professional-Services_16.svg │ │ │ ├── Arch_AWS-rePost_16.png │ │ │ ├── Arch_AWS-rePost_16.svg │ │ │ ├── Arch_AWS-rePost-Private_16.png │ │ │ ├── Arch_AWS-rePost-Private_16.svg │ │ │ ├── Arch_AWS-Support_16.png │ │ │ ├── Arch_AWS-Support_16.svg │ │ │ ├── Arch_AWS-Training-Certification_16.png │ │ │ └── Arch_AWS-Training-Certification_16.svg │ │ ├── 32 │ │ │ ├── Arch_AWS-Activate_32.png │ │ │ ├── Arch_AWS-Activate_32.svg │ │ │ ├── Arch_AWS-IQ_32.png │ │ │ ├── Arch_AWS-IQ_32.svg │ │ │ ├── Arch_AWS-Managed-Services_32.png │ │ │ ├── Arch_AWS-Managed-Services_32.svg │ │ │ ├── Arch_AWS-Professional-Services_32.png │ │ │ ├── Arch_AWS-Professional-Services_32.svg │ │ │ ├── Arch_AWS-rePost_32.png │ │ │ ├── Arch_AWS-rePost_32.svg │ │ │ ├── Arch_AWS-rePost-Private_32.png │ │ │ ├── Arch_AWS-rePost-Private_32.svg │ │ │ ├── Arch_AWS-Support_32.png │ │ │ ├── Arch_AWS-Support_32.svg │ │ │ ├── Arch_AWS-Training-Certification_32.png │ │ │ └── Arch_AWS-Training-Certification_32.svg │ │ ├── 48 │ │ │ ├── Arch_AWS-Activate_48.png │ │ │ ├── Arch_AWS-Activate_48.svg │ │ │ ├── Arch_AWS-IQ_48.png │ │ │ ├── Arch_AWS-IQ_48.svg │ │ │ ├── Arch_AWS-Managed-Services_48.png │ │ │ ├── Arch_AWS-Managed-Services_48.svg │ │ │ ├── Arch_AWS-Professional-Services_48.png │ │ │ ├── Arch_AWS-Professional-Services_48.svg │ │ │ ├── Arch_AWS-rePost_48.png │ │ │ ├── Arch_AWS-rePost_48.svg │ │ │ ├── Arch_AWS-rePost-Private_48.png │ │ │ ├── Arch_AWS-rePost-Private_48.svg │ │ │ ├── Arch_AWS-Support_48.png │ │ │ ├── Arch_AWS-Support_48.svg │ │ │ ├── Arch_AWS-Training-Certification_48.png │ │ │ └── Arch_AWS-Training-Certification_48.svg │ │ └── 64 │ │ ├── Arch_AWS-Activate_64.png │ │ ├── Arch_AWS-Activate_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IQ_64.png │ │ ├── Arch_AWS-IQ_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Managed-Services_64.png │ │ ├── Arch_AWS-Managed-Services_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Professional-Services_64.png │ │ ├── Arch_AWS-Professional-Services_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-rePost_64.png │ │ ├── Arch_AWS-rePost_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-rePost-Private_64.png │ │ ├── Arch_AWS-rePost-Private_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Support_64.png │ │ ├── Arch_AWS-Support_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Training-Certification_64.png │ │ ├── Arch_AWS-Training-Certification_64.svg │ │ └── [email protected] │ ├── database │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Aurora_16.png │ │ │ ├── Arch_Amazon-Aurora_16.svg │ │ │ ├── Arch_Amazon-DocumentDB_16.png │ │ │ ├── Arch_Amazon-DocumentDB_16.svg │ │ │ ├── Arch_Amazon-DynamoDB_16.png │ │ │ ├── Arch_Amazon-DynamoDB_16.svg │ │ │ ├── Arch_Amazon-ElastiCache_16.png │ │ │ ├── Arch_Amazon-ElastiCache_16.svg │ │ │ ├── Arch_Amazon-Keyspaces_16.png │ │ │ ├── Arch_Amazon-Keyspaces_16.svg │ │ │ ├── Arch_Amazon-MemoryDB_16.png │ │ │ ├── Arch_Amazon-MemoryDB_16.svg │ │ │ ├── Arch_Amazon-Neptune_16.png │ │ │ ├── Arch_Amazon-Neptune_16.svg │ │ │ ├── Arch_Amazon-RDS_16.png │ │ │ ├── Arch_Amazon-RDS_16.svg │ │ │ ├── Arch_Amazon-Timestream_16.png │ │ │ ├── Arch_Amazon-Timestream_16.svg │ │ │ ├── Arch_AWS-Database-Migration-Service_16.png │ │ │ ├── Arch_AWS-Database-Migration-Service_16.svg │ │ │ ├── Arch_Oracle-Database-at-AWS_16.png │ │ │ └── Arch_Oracle-Database-at-AWS_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Aurora_32.png │ │ │ ├── Arch_Amazon-Aurora_32.svg │ │ │ ├── Arch_Amazon-DocumentDB_32.png │ │ │ ├── Arch_Amazon-DocumentDB_32.svg │ │ │ ├── Arch_Amazon-DynamoDB_32.png │ │ │ ├── Arch_Amazon-DynamoDB_32.svg │ │ │ ├── Arch_Amazon-ElastiCache_32.png │ │ │ ├── Arch_Amazon-ElastiCache_32.svg │ │ │ ├── Arch_Amazon-Keyspaces_32.png │ │ │ ├── Arch_Amazon-Keyspaces_32.svg │ │ │ ├── Arch_Amazon-MemoryDB_32.png │ │ │ ├── Arch_Amazon-MemoryDB_32.svg │ │ │ ├── Arch_Amazon-Neptune_32.png │ │ │ ├── Arch_Amazon-Neptune_32.svg │ │ │ ├── Arch_Amazon-RDS_32.png │ │ │ ├── Arch_Amazon-RDS_32.svg │ │ │ ├── Arch_Amazon-Timestream_32.png │ │ │ ├── Arch_Amazon-Timestream_32.svg │ │ │ ├── Arch_AWS-Database-Migration-Service_32.png │ │ │ ├── Arch_AWS-Database-Migration-Service_32.svg │ │ │ ├── Arch_Oracle-Database-at-AWS_32.png │ │ │ └── Arch_Oracle-Database-at-AWS_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Aurora_48.png │ │ │ ├── Arch_Amazon-Aurora_48.svg │ │ │ ├── Arch_Amazon-DocumentDB_48.png │ │ │ ├── Arch_Amazon-DocumentDB_48.svg │ │ │ ├── Arch_Amazon-DynamoDB_48.png │ │ │ ├── Arch_Amazon-DynamoDB_48.svg │ │ │ ├── Arch_Amazon-ElastiCache_48.png │ │ │ ├── Arch_Amazon-ElastiCache_48.svg │ │ │ ├── Arch_Amazon-Keyspaces_48.png │ │ │ ├── Arch_Amazon-Keyspaces_48.svg │ │ │ ├── Arch_Amazon-MemoryDB_48.png │ │ │ ├── Arch_Amazon-MemoryDB_48.svg │ │ │ ├── Arch_Amazon-Neptune_48.png │ │ │ ├── Arch_Amazon-Neptune_48.svg │ │ │ ├── Arch_Amazon-RDS_48.png │ │ │ ├── Arch_Amazon-RDS_48.svg │ │ │ ├── Arch_Amazon-Timestream_48.png │ │ │ ├── Arch_Amazon-Timestream_48.svg │ │ │ ├── Arch_AWS-Database-Migration-Service_48.png │ │ │ ├── Arch_AWS-Database-Migration-Service_48.svg │ │ │ ├── Arch_Oracle-Database-at-AWS_48.png │ │ │ └── Arch_Oracle-Database-at-AWS_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-Aurora_64.png │ │ ├── Arch_Amazon-Aurora_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-DocumentDB_64.png │ │ ├── Arch_Amazon-DocumentDB_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-DynamoDB_64.png │ │ ├── Arch_Amazon-DynamoDB_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-ElastiCache_64.png │ │ ├── Arch_Amazon-ElastiCache_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Keyspaces_64.png │ │ ├── Arch_Amazon-Keyspaces_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-MemoryDB_64.png │ │ ├── Arch_Amazon-MemoryDB_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Neptune_64.png │ │ ├── Arch_Amazon-Neptune_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-RDS_64.png │ │ ├── Arch_Amazon-RDS_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Timestream_64.png │ │ ├── Arch_Amazon-Timestream_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Database-Migration-Service_64.png │ │ ├── Arch_AWS-Database-Migration-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_Oracle-Database-at-AWS_64.png │ │ ├── Arch_Oracle-Database-at-AWS_64.svg │ │ └── [email protected] │ ├── developer-tools │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-CodeCatalyst_16.png │ │ │ ├── Arch_Amazon-CodeCatalyst_16.svg │ │ │ ├── Arch_Amazon-Corretto_16.png │ │ │ ├── Arch_Amazon-Corretto_16.svg │ │ │ ├── Arch_AWS-Cloud-Control-API_16.png │ │ │ ├── Arch_AWS-Cloud-Control-API_16.svg │ │ │ ├── Arch_AWS-Cloud-Development-Kit_16.png │ │ │ ├── Arch_AWS-Cloud-Development-Kit_16.svg │ │ │ ├── Arch_AWS-Cloud9_16.png │ │ │ ├── Arch_AWS-Cloud9_16.svg │ │ │ ├── Arch_AWS-CloudShell_16.png │ │ │ ├── Arch_AWS-CloudShell_16.svg │ │ │ ├── Arch_AWS-CodeArtifact_16.png │ │ │ ├── Arch_AWS-CodeArtifact_16.svg │ │ │ ├── Arch_AWS-CodeBuild_16.png │ │ │ ├── Arch_AWS-CodeBuild_16.svg │ │ │ ├── Arch_AWS-CodeCommit_16.png │ │ │ ├── Arch_AWS-CodeCommit_16.svg │ │ │ ├── Arch_AWS-CodeDeploy_16.png │ │ │ ├── Arch_AWS-CodeDeploy_16.svg │ │ │ ├── Arch_AWS-CodePipeline_16.png │ │ │ ├── Arch_AWS-CodePipeline_16.svg │ │ │ ├── Arch_AWS-Command-Line-Interface_16.png │ │ │ ├── Arch_AWS-Command-Line-Interface_16.svg │ │ │ ├── Arch_AWS-Fault-Injection-Service_16.png │ │ │ ├── Arch_AWS-Fault-Injection-Service_16.svg │ │ │ ├── Arch_AWS-Infrastructure-Composer_16.png │ │ │ ├── Arch_AWS-Infrastructure-Composer_16.svg │ │ │ ├── Arch_AWS-Tools-and-SDKs_16.png │ │ │ ├── Arch_AWS-Tools-and-SDKs_16.svg │ │ │ ├── Arch_AWS-X-Ray_16.png │ │ │ └── Arch_AWS-X-Ray_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-CodeCatalyst_32.png │ │ │ ├── Arch_Amazon-CodeCatalyst_32.svg │ │ │ ├── Arch_Amazon-Corretto_32.png │ │ │ ├── Arch_Amazon-Corretto_32.svg │ │ │ ├── Arch_AWS-Cloud-Control-API_32.png │ │ │ ├── Arch_AWS-Cloud-Control-API_32.svg │ │ │ ├── Arch_AWS-Cloud-Development-Kit_32.png │ │ │ ├── Arch_AWS-Cloud-Development-Kit_32.svg │ │ │ ├── Arch_AWS-Cloud9_32.png │ │ │ ├── Arch_AWS-Cloud9_32.svg │ │ │ ├── Arch_AWS-CloudShell_32.png │ │ │ ├── Arch_AWS-CloudShell_32.svg │ │ │ ├── Arch_AWS-CodeArtifact_32.png │ │ │ ├── Arch_AWS-CodeArtifact_32.svg │ │ │ ├── Arch_AWS-CodeBuild_32.png │ │ │ ├── Arch_AWS-CodeBuild_32.svg │ │ │ ├── Arch_AWS-CodeCommit_32.png │ │ │ ├── Arch_AWS-CodeCommit_32.svg │ │ │ ├── Arch_AWS-CodeDeploy_32.png │ │ │ ├── Arch_AWS-CodeDeploy_32.svg │ │ │ ├── Arch_AWS-CodePipeline_32.png │ │ │ ├── Arch_AWS-CodePipeline_32.svg │ │ │ ├── Arch_AWS-Command-Line-Interface_32.png │ │ │ ├── Arch_AWS-Command-Line-Interface_32.svg │ │ │ ├── Arch_AWS-Fault-Injection-Service_32.png │ │ │ ├── Arch_AWS-Fault-Injection-Service_32.svg │ │ │ ├── Arch_AWS-Infrastructure-Composer_32.png │ │ │ ├── Arch_AWS-Infrastructure-Composer_32.svg │ │ │ ├── Arch_AWS-Tools-and-SDKs_32.png │ │ │ ├── Arch_AWS-Tools-and-SDKs_32.svg │ │ │ ├── Arch_AWS-X-Ray_32.png │ │ │ └── Arch_AWS-X-Ray_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-CodeCatalyst_48.png │ │ │ ├── Arch_Amazon-CodeCatalyst_48.svg │ │ │ ├── Arch_Amazon-Corretto_48.png │ │ │ ├── Arch_Amazon-Corretto_48.svg │ │ │ ├── Arch_AWS-Cloud-Control-API_48.png │ │ │ ├── Arch_AWS-Cloud-Control-API_48.svg │ │ │ ├── Arch_AWS-Cloud-Development-Kit_48.png │ │ │ ├── Arch_AWS-Cloud-Development-Kit_48.svg │ │ │ ├── Arch_AWS-Cloud9_48.png │ │ │ ├── Arch_AWS-Cloud9_48.svg │ │ │ ├── Arch_AWS-CloudShell_48.png │ │ │ ├── Arch_AWS-CloudShell_48.svg │ │ │ ├── Arch_AWS-CodeArtifact_48.png │ │ │ ├── Arch_AWS-CodeArtifact_48.svg │ │ │ ├── Arch_AWS-CodeBuild_48.png │ │ │ ├── Arch_AWS-CodeBuild_48.svg │ │ │ ├── Arch_AWS-CodeCommit_48.png │ │ │ ├── Arch_AWS-CodeCommit_48.svg │ │ │ ├── Arch_AWS-CodeDeploy_48.png │ │ │ ├── Arch_AWS-CodeDeploy_48.svg │ │ │ ├── Arch_AWS-CodePipeline_48.png │ │ │ ├── Arch_AWS-CodePipeline_48.svg │ │ │ ├── Arch_AWS-Command-Line-Interface_48.png │ │ │ ├── Arch_AWS-Command-Line-Interface_48.svg │ │ │ ├── Arch_AWS-Fault-Injection-Service_48.png │ │ │ ├── Arch_AWS-Fault-Injection-Service_48.svg │ │ │ ├── Arch_AWS-Infrastructure-Composer_48.png │ │ │ ├── Arch_AWS-Infrastructure-Composer_48.svg │ │ │ ├── Arch_AWS-Tools-and-SDKs_48.png │ │ │ ├── Arch_AWS-Tools-and-SDKs_48.svg │ │ │ ├── Arch_AWS-X-Ray_48.png │ │ │ └── Arch_AWS-X-Ray_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-CodeCatalyst_64.png │ │ ├── Arch_Amazon-CodeCatalyst_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Corretto_64.png │ │ ├── Arch_Amazon-Corretto_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Cloud-Control-API_64.png │ │ ├── Arch_AWS-Cloud-Control-API_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Cloud-Development-Kit_64.png │ │ ├── Arch_AWS-Cloud-Development-Kit_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Cloud9_64.png │ │ ├── Arch_AWS-Cloud9_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CloudShell_64.png │ │ ├── Arch_AWS-CloudShell_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CodeArtifact_64.png │ │ ├── Arch_AWS-CodeArtifact_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CodeBuild_64.png │ │ ├── Arch_AWS-CodeBuild_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CodeCommit_64.png │ │ ├── Arch_AWS-CodeCommit_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CodeDeploy_64.png │ │ ├── Arch_AWS-CodeDeploy_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CodePipeline_64.png │ │ ├── Arch_AWS-CodePipeline_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Command-Line-Interface_64.png │ │ ├── Arch_AWS-Command-Line-Interface_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Fault-Injection-Service_64.png │ │ ├── Arch_AWS-Fault-Injection-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Infrastructure-Composer_64.png │ │ ├── Arch_AWS-Infrastructure-Composer_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Tools-and-SDKs_64.png │ │ ├── Arch_AWS-Tools-and-SDKs_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-X-Ray_64.png │ │ ├── Arch_AWS-X-Ray_64.svg │ │ └── [email protected] │ ├── end-user-computing │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-AppStream-2_16.png │ │ │ ├── Arch_Amazon-AppStream-2_16.svg │ │ │ ├── Arch_Amazon-WorkSpaces-Family_16.png │ │ │ └── Arch_Amazon-WorkSpaces-Family_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-AppStream-2_32.png │ │ │ ├── Arch_Amazon-AppStream-2_32.svg │ │ │ ├── Arch_Amazon-WorkSpaces-Family_32.png │ │ │ └── Arch_Amazon-WorkSpaces-Family_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-AppStream-2_48.png │ │ │ ├── Arch_Amazon-AppStream-2_48.svg │ │ │ ├── Arch_Amazon-WorkSpaces-Family_48.png │ │ │ └── Arch_Amazon-WorkSpaces-Family_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-AppStream-2_64.png │ │ ├── Arch_Amazon-AppStream-2_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-WorkSpaces-Family_64.png │ │ ├── Arch_Amazon-WorkSpaces-Family_64.svg │ │ └── [email protected] │ ├── front-end-web-mobile │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_Amazon-Location-Service_16.png │ │ │ ├── Arch_Amazon-Location-Service_16.svg │ │ │ ├── Arch_AWS-Amplify_16.png │ │ │ ├── Arch_AWS-Amplify_16.svg │ │ │ ├── Arch_AWS-Device-Farm_16.png │ │ │ └── Arch_AWS-Device-Farm_16.svg │ │ ├── 32 │ │ │ ├── Arch_Amazon-Location-Service_32.png │ │ │ ├── Arch_Amazon-Location-Service_32.svg │ │ │ ├── Arch_AWS-Amplify_32.png │ │ │ ├── Arch_AWS-Amplify_32.svg │ │ │ ├── Arch_AWS-Device-Farm_32.png │ │ │ └── Arch_AWS-Device-Farm_32.svg │ │ ├── 48 │ │ │ ├── Arch_Amazon-Location-Service_48.png │ │ │ ├── Arch_Amazon-Location-Service_48.svg │ │ │ ├── Arch_AWS-Amplify_48.png │ │ │ ├── Arch_AWS-Amplify_48.svg │ │ │ ├── Arch_AWS-Device-Farm_48.png │ │ │ └── Arch_AWS-Device-Farm_48.svg │ │ └── 64 │ │ ├── Arch_Amazon-Location-Service_64.png │ │ ├── Arch_Amazon-Location-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Amplify_64.png │ │ ├── Arch_AWS-Amplify_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Device-Farm_64.png │ │ ├── Arch_AWS-Device-Farm_64.svg │ │ └── [email protected] │ ├── games │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-GameLift-Servers_16.png │ │ │ ├── Arch_Amazon-GameLift-Servers_16.svg │ │ │ ├── Arch_Amazon-GameLift-Streams_16.png │ │ │ ├── Arch_Amazon-GameLift-Streams_16.svg │ │ │ ├── Arch_Open-3D-Engine_16.png │ │ │ └── Arch_Open-3D-Engine_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-GameLift-Servers_32.png │ │ │ ├── Arch_Amazon-GameLift-Servers_32.svg │ │ │ ├── Arch_Amazon-GameLift-Streams_32.png │ │ │ ├── Arch_Amazon-GameLift-Streams_32.svg │ │ │ ├── Arch_Open-3D-Engine_32.png │ │ │ └── Arch_Open-3D-Engine_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-GameLift-Servers_48.png │ │ │ ├── Arch_Amazon-GameLift-Servers_48.svg │ │ │ ├── Arch_Amazon-GameLift-Streams_48.png │ │ │ ├── Arch_Amazon-GameLift-Streams_48.svg │ │ │ ├── Arch_Open-3D-Engine_48.png │ │ │ └── Arch_Open-3D-Engine_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-GameLift-Servers_64.png │ │ ├── Arch_Amazon-GameLift-Servers_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-GameLift-Streams_64.png │ │ ├── Arch_Amazon-GameLift-Streams_64.svg │ │ ├── [email protected] │ │ ├── Arch_Open-3D-Engine_64.png │ │ ├── Arch_Open-3D-Engine_64.svg │ │ └── [email protected] │ ├── general-icons │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_AWS-Marketplace_Dark_16.png │ │ │ ├── Arch_AWS-Marketplace_Dark_16.svg │ │ │ ├── Arch_AWS-Marketplace_Light_16.png │ │ │ └── Arch_AWS-Marketplace_Light_16.svg │ │ ├── 32 │ │ │ ├── Arch_AWS-Marketplace_Dark_32.png │ │ │ ├── Arch_AWS-Marketplace_Dark_32.svg │ │ │ ├── Arch_AWS-Marketplace_Light_32.png │ │ │ └── Arch_AWS-Marketplace_Light_32.svg │ │ ├── 48 │ │ │ ├── Arch_AWS-Marketplace_Dark_48.png │ │ │ ├── Arch_AWS-Marketplace_Dark_48.svg │ │ │ ├── Arch_AWS-Marketplace_Light_48.png │ │ │ └── Arch_AWS-Marketplace_Light_48.svg │ │ └── 64 │ │ ├── Arch_AWS-Marketplace_Dark_64.png │ │ ├── Arch_AWS-Marketplace_Dark_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Marketplace_Light_64.png │ │ ├── Arch_AWS-Marketplace_Light_64.svg │ │ └── [email protected] │ ├── internet-of-things │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-IoT-Analytics_16.png │ │ │ ├── Arch_AWS-IoT-Analytics_16.svg │ │ │ ├── Arch_AWS-IoT-Button_16.png │ │ │ ├── Arch_AWS-IoT-Button_16.svg │ │ │ ├── Arch_AWS-IoT-Core_16.png │ │ │ ├── Arch_AWS-IoT-Core_16.svg │ │ │ ├── Arch_AWS-IoT-Device-Defender_16.png │ │ │ ├── Arch_AWS-IoT-Device-Defender_16.svg │ │ │ ├── Arch_AWS-IoT-Device-Management_16.png │ │ │ ├── Arch_AWS-IoT-Device-Management_16.svg │ │ │ ├── Arch_AWS-IoT-Events_16.png │ │ │ ├── Arch_AWS-IoT-Events_16.svg │ │ │ ├── Arch_AWS-IoT-ExpressLink_16.png │ │ │ ├── Arch_AWS-IoT-ExpressLink_16.svg │ │ │ ├── Arch_AWS-IoT-FleetWise_16.png │ │ │ ├── Arch_AWS-IoT-FleetWise_16.svg │ │ │ ├── Arch_AWS-IoT-Greengrass_16.png │ │ │ ├── Arch_AWS-IoT-Greengrass_16.svg │ │ │ ├── Arch_AWS-IoT-SiteWise_16.png │ │ │ ├── Arch_AWS-IoT-SiteWise_16.svg │ │ │ ├── Arch_AWS-IoT-TwinMaker_16.png │ │ │ ├── Arch_AWS-IoT-TwinMaker_16.svg │ │ │ ├── Arch_FreeRTOS_16.png │ │ │ └── Arch_FreeRTOS_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-IoT-Analytics_32.png │ │ │ ├── Arch_AWS-IoT-Analytics_32.svg │ │ │ ├── Arch_AWS-IoT-Button_32.png │ │ │ ├── Arch_AWS-IoT-Button_32.svg │ │ │ ├── Arch_AWS-IoT-Core_32.png │ │ │ ├── Arch_AWS-IoT-Core_32.svg │ │ │ ├── Arch_AWS-IoT-Device-Defender_32.png │ │ │ ├── Arch_AWS-IoT-Device-Defender_32.svg │ │ │ ├── Arch_AWS-IoT-Device-Management_32.png │ │ │ ├── Arch_AWS-IoT-Device-Management_32.svg │ │ │ ├── Arch_AWS-IoT-Events_32.png │ │ │ ├── Arch_AWS-IoT-Events_32.svg │ │ │ ├── Arch_AWS-IoT-ExpressLink_32.png │ │ │ ├── Arch_AWS-IoT-ExpressLink_32.svg │ │ │ ├── Arch_AWS-IoT-FleetWise_32.png │ │ │ ├── Arch_AWS-IoT-FleetWise_32.svg │ │ │ ├── Arch_AWS-IoT-Greengrass_32.png │ │ │ ├── Arch_AWS-IoT-Greengrass_32.svg │ │ │ ├── Arch_AWS-IoT-SiteWise_32.png │ │ │ ├── Arch_AWS-IoT-SiteWise_32.svg │ │ │ ├── Arch_AWS-IoT-TwinMaker_32.png │ │ │ ├── Arch_AWS-IoT-TwinMaker_32.svg │ │ │ ├── Arch_FreeRTOS_32.png │ │ │ └── Arch_FreeRTOS_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-IoT-Analytics_48.png │ │ │ ├── Arch_AWS-IoT-Analytics_48.svg │ │ │ ├── Arch_AWS-IoT-Button_48.png │ │ │ ├── Arch_AWS-IoT-Button_48.svg │ │ │ ├── Arch_AWS-IoT-Core_48.png │ │ │ ├── Arch_AWS-IoT-Core_48.svg │ │ │ ├── Arch_AWS-IoT-Device-Defender_48.png │ │ │ ├── Arch_AWS-IoT-Device-Defender_48.svg │ │ │ ├── Arch_AWS-IoT-Device-Management_48.png │ │ │ ├── Arch_AWS-IoT-Device-Management_48.svg │ │ │ ├── Arch_AWS-IoT-Events_48.png │ │ │ ├── Arch_AWS-IoT-Events_48.svg │ │ │ ├── Arch_AWS-IoT-ExpressLink_48.png │ │ │ ├── Arch_AWS-IoT-ExpressLink_48.svg │ │ │ ├── Arch_AWS-IoT-FleetWise_48.png │ │ │ ├── Arch_AWS-IoT-FleetWise_48.svg │ │ │ ├── Arch_AWS-IoT-Greengrass_48.png │ │ │ ├── Arch_AWS-IoT-Greengrass_48.svg │ │ │ ├── Arch_AWS-IoT-SiteWise_48.png │ │ │ ├── Arch_AWS-IoT-SiteWise_48.svg │ │ │ ├── Arch_AWS-IoT-TwinMaker_48.png │ │ │ ├── Arch_AWS-IoT-TwinMaker_48.svg │ │ │ ├── Arch_FreeRTOS_48.png │ │ │ └── Arch_FreeRTOS_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_AWS-IoT-Analytics_64.png │ │ ├── Arch_AWS-IoT-Analytics_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-Button_64.png │ │ ├── Arch_AWS-IoT-Button_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-Core_64.png │ │ ├── Arch_AWS-IoT-Core_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-Device-Defender_64.png │ │ ├── Arch_AWS-IoT-Device-Defender_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-Device-Management_64.png │ │ ├── Arch_AWS-IoT-Device-Management_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-Events_64.png │ │ ├── Arch_AWS-IoT-Events_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-ExpressLink_64.png │ │ ├── Arch_AWS-IoT-ExpressLink_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-FleetWise_64.png │ │ ├── Arch_AWS-IoT-FleetWise_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-Greengrass_64.png │ │ ├── Arch_AWS-IoT-Greengrass_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-SiteWise_64.png │ │ ├── Arch_AWS-IoT-SiteWise_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IoT-TwinMaker_64.png │ │ ├── Arch_AWS-IoT-TwinMaker_64.svg │ │ ├── [email protected] │ │ ├── Arch_FreeRTOS_64.png │ │ ├── Arch_FreeRTOS_64.svg │ │ └── [email protected] │ ├── management-governance │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-CloudWatch_16.png │ │ │ ├── Arch_Amazon-CloudWatch_16.svg │ │ │ ├── Arch_Amazon-Managed-Grafana_16.png │ │ │ ├── Arch_Amazon-Managed-Grafana_16.svg │ │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_16.png │ │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_16.svg │ │ │ ├── Arch_AWS-AppConfig_16.png │ │ │ ├── Arch_AWS-AppConfig_16.svg │ │ │ ├── Arch_AWS-Application-Auto-Scaling_16.png │ │ │ ├── Arch_AWS-Application-Auto-Scaling_16.svg │ │ │ ├── Arch_AWS-Auto-Scaling_16.png │ │ │ ├── Arch_AWS-Auto-Scaling_16.svg │ │ │ ├── Arch_AWS-Backint-Agent_16.png │ │ │ ├── Arch_AWS-Backint-Agent_16.svg │ │ │ ├── Arch_AWS-Chatbot_16.png │ │ │ ├── Arch_AWS-Chatbot_16.svg │ │ │ ├── Arch_AWS-CloudFormation_16.png │ │ │ ├── Arch_AWS-CloudFormation_16.svg │ │ │ ├── Arch_AWS-CloudTrail_16.png │ │ │ ├── Arch_AWS-CloudTrail_16.svg │ │ │ ├── Arch_AWS-Compute-Optimizer_16.png │ │ │ ├── Arch_AWS-Compute-Optimizer_16.svg │ │ │ ├── Arch_AWS-Config_16.png │ │ │ ├── Arch_AWS-Config_16.svg │ │ │ ├── Arch_AWS-Console-Mobile-Application_16.png │ │ │ ├── Arch_AWS-Console-Mobile-Application_16.svg │ │ │ ├── Arch_AWS-Control-Tower_16.png │ │ │ ├── Arch_AWS-Control-Tower_16.svg │ │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_16.png │ │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_16.svg │ │ │ ├── Arch_AWS-Health-Dashboard_16.png │ │ │ ├── Arch_AWS-Health-Dashboard_16.svg │ │ │ ├── Arch_AWS-Launch-Wizard_16.png │ │ │ ├── Arch_AWS-Launch-Wizard_16.svg │ │ │ ├── Arch_AWS-License-Manager_16.png │ │ │ ├── Arch_AWS-License-Manager_16.svg │ │ │ ├── Arch_AWS-Management-Console_16.png │ │ │ ├── Arch_AWS-Management-Console_16.svg │ │ │ ├── Arch_AWS-Organizations_16.png │ │ │ ├── Arch_AWS-Organizations_16.svg │ │ │ ├── Arch_AWS-Proton_16.png │ │ │ ├── Arch_AWS-Proton_16.svg │ │ │ ├── Arch_AWS-Resilience-Hub_16.png │ │ │ ├── Arch_AWS-Resilience-Hub_16.svg │ │ │ ├── Arch_AWS-Resource-Explorer_16.png │ │ │ ├── Arch_AWS-Resource-Explorer_16.svg │ │ │ ├── Arch_AWS-Service-Catalog_16.png │ │ │ ├── Arch_AWS-Service-Catalog_16.svg │ │ │ ├── Arch_AWS-Service-Management-Connector_16.png │ │ │ ├── Arch_AWS-Service-Management-Connector_16.svg │ │ │ ├── Arch_AWS-Systems-Manager_16.png │ │ │ ├── Arch_AWS-Systems-Manager_16.svg │ │ │ ├── Arch_AWS-Telco-Network-Builder_16.png │ │ │ ├── Arch_AWS-Telco-Network-Builder_16.svg │ │ │ ├── Arch_AWS-Trusted-Advisor_16.png │ │ │ ├── Arch_AWS-Trusted-Advisor_16.svg │ │ │ ├── Arch_AWS-User-Notifications_16.png │ │ │ ├── Arch_AWS-User-Notifications_16.svg │ │ │ ├── Arch_AWS-Well-Architected-Tool_16.png │ │ │ └── Arch_AWS-Well-Architected-Tool_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-CloudWatch_32.png │ │ │ ├── Arch_Amazon-CloudWatch_32.svg │ │ │ ├── Arch_Amazon-Managed-Grafana_32.png │ │ │ ├── Arch_Amazon-Managed-Grafana_32.svg │ │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_32.png │ │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_32.svg │ │ │ ├── Arch_AWS-AppConfig_32.png │ │ │ ├── Arch_AWS-AppConfig_32.svg │ │ │ ├── Arch_AWS-Application-Auto-Scaling_32.png │ │ │ ├── Arch_AWS-Application-Auto-Scaling_32.svg │ │ │ ├── Arch_AWS-Auto-Scaling_32.png │ │ │ ├── Arch_AWS-Auto-Scaling_32.svg │ │ │ ├── Arch_AWS-Backint-Agent_32.png │ │ │ ├── Arch_AWS-Backint-Agent_32.svg │ │ │ ├── Arch_AWS-Chatbot_32.png │ │ │ ├── Arch_AWS-Chatbot_32.svg │ │ │ ├── Arch_AWS-CloudFormation_32.png │ │ │ ├── Arch_AWS-CloudFormation_32.svg │ │ │ ├── Arch_AWS-CloudTrail_32.png │ │ │ ├── Arch_AWS-CloudTrail_32.svg │ │ │ ├── Arch_AWS-Compute-Optimizer_32.png │ │ │ ├── Arch_AWS-Compute-Optimizer_32.svg │ │ │ ├── Arch_AWS-Config_32.png │ │ │ ├── Arch_AWS-Config_32.svg │ │ │ ├── Arch_AWS-Console-Mobile-Application_32.png │ │ │ ├── Arch_AWS-Console-Mobile-Application_32.svg │ │ │ ├── Arch_AWS-Control-Tower_32.png │ │ │ ├── Arch_AWS-Control-Tower_32.svg │ │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_32.png │ │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_32.svg │ │ │ ├── Arch_AWS-Health-Dashboard_32.png │ │ │ ├── Arch_AWS-Health-Dashboard_32.svg │ │ │ ├── Arch_AWS-Launch-Wizard_32.png │ │ │ ├── Arch_AWS-Launch-Wizard_32.svg │ │ │ ├── Arch_AWS-License-Manager_32.png │ │ │ ├── Arch_AWS-License-Manager_32.svg │ │ │ ├── Arch_AWS-Management-Console_32.png │ │ │ ├── Arch_AWS-Management-Console_32.svg │ │ │ ├── Arch_AWS-Organizations_32.png │ │ │ ├── Arch_AWS-Organizations_32.svg │ │ │ ├── Arch_AWS-Proton_32.png │ │ │ ├── Arch_AWS-Proton_32.svg │ │ │ ├── Arch_AWS-Resilience-Hub_32.png │ │ │ ├── Arch_AWS-Resilience-Hub_32.svg │ │ │ ├── Arch_AWS-Resource-Explorer_32.png │ │ │ ├── Arch_AWS-Resource-Explorer_32.svg │ │ │ ├── Arch_AWS-Service-Catalog_32.png │ │ │ ├── Arch_AWS-Service-Catalog_32.svg │ │ │ ├── Arch_AWS-Service-Management-Connector_32.png │ │ │ ├── Arch_AWS-Service-Management-Connector_32.svg │ │ │ ├── Arch_AWS-Systems-Manager_32.png │ │ │ ├── Arch_AWS-Systems-Manager_32.svg │ │ │ ├── Arch_AWS-Telco-Network-Builder_32.png │ │ │ ├── Arch_AWS-Telco-Network-Builder_32.svg │ │ │ ├── Arch_AWS-Trusted-Advisor_32.png │ │ │ ├── Arch_AWS-Trusted-Advisor_32.svg │ │ │ ├── Arch_AWS-User-Notifications_32.png │ │ │ ├── Arch_AWS-User-Notifications_32.svg │ │ │ ├── Arch_AWS-Well-Architected-Tool_32.png │ │ │ └── Arch_AWS-Well-Architected-Tool_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-CloudWatch_48.png │ │ │ ├── Arch_Amazon-CloudWatch_48.svg │ │ │ ├── Arch_Amazon-Managed-Grafana_48.png │ │ │ ├── Arch_Amazon-Managed-Grafana_48.svg │ │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_48.png │ │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_48.svg │ │ │ ├── Arch_AWS-AppConfig_48.png │ │ │ ├── Arch_AWS-AppConfig_48.svg │ │ │ ├── Arch_AWS-Application-Auto-Scaling_48.png │ │ │ ├── Arch_AWS-Application-Auto-Scaling_48.svg │ │ │ ├── Arch_AWS-Auto-Scaling_48.png │ │ │ ├── Arch_AWS-Auto-Scaling_48.svg │ │ │ ├── Arch_AWS-Backint-Agent_48.png │ │ │ ├── Arch_AWS-Backint-Agent_48.svg │ │ │ ├── Arch_AWS-Chatbot_48.png │ │ │ ├── Arch_AWS-Chatbot_48.svg │ │ │ ├── Arch_AWS-CloudFormation_48.png │ │ │ ├── Arch_AWS-CloudFormation_48.svg │ │ │ ├── Arch_AWS-CloudTrail_48.png │ │ │ ├── Arch_AWS-CloudTrail_48.svg │ │ │ ├── Arch_AWS-Compute-Optimizer_48.png │ │ │ ├── Arch_AWS-Compute-Optimizer_48.svg │ │ │ ├── Arch_AWS-Config_48.png │ │ │ ├── Arch_AWS-Config_48.svg │ │ │ ├── Arch_AWS-Console-Mobile-Application_48.png │ │ │ ├── Arch_AWS-Console-Mobile-Application_48.svg │ │ │ ├── Arch_AWS-Control-Tower_48.png │ │ │ ├── Arch_AWS-Control-Tower_48.svg │ │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_48.png │ │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_48.svg │ │ │ ├── Arch_AWS-Health-Dashboard_48.png │ │ │ ├── Arch_AWS-Health-Dashboard_48.svg │ │ │ ├── Arch_AWS-Launch-Wizard_48.png │ │ │ ├── Arch_AWS-Launch-Wizard_48.svg │ │ │ ├── Arch_AWS-License-Manager_48.png │ │ │ ├── Arch_AWS-License-Manager_48.svg │ │ │ ├── Arch_AWS-Management-Console_48.png │ │ │ ├── Arch_AWS-Management-Console_48.svg │ │ │ ├── Arch_AWS-Organizations_48.png │ │ │ ├── Arch_AWS-Organizations_48.svg │ │ │ ├── Arch_AWS-Proton_48.png │ │ │ ├── Arch_AWS-Proton_48.svg │ │ │ ├── Arch_AWS-Resilience-Hub_48.png │ │ │ ├── Arch_AWS-Resilience-Hub_48.svg │ │ │ ├── Arch_AWS-Resource-Explorer_48.png │ │ │ ├── Arch_AWS-Resource-Explorer_48.svg │ │ │ ├── Arch_AWS-Service-Catalog_48.png │ │ │ ├── Arch_AWS-Service-Catalog_48.svg │ │ │ ├── Arch_AWS-Service-Management-Connector_48.png │ │ │ ├── Arch_AWS-Service-Management-Connector_48.svg │ │ │ ├── Arch_AWS-Systems-Manager_48.png │ │ │ ├── Arch_AWS-Systems-Manager_48.svg │ │ │ ├── Arch_AWS-Telco-Network-Builder_48.png │ │ │ ├── Arch_AWS-Telco-Network-Builder_48.svg │ │ │ ├── Arch_AWS-Trusted-Advisor_48.png │ │ │ ├── Arch_AWS-Trusted-Advisor_48.svg │ │ │ ├── Arch_AWS-User-Notifications_48.png │ │ │ ├── Arch_AWS-User-Notifications_48.svg │ │ │ ├── Arch_AWS-Well-Architected-Tool_48.png │ │ │ └── Arch_AWS-Well-Architected-Tool_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-CloudWatch_64.png │ │ ├── Arch_Amazon-CloudWatch_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Managed-Grafana_64.png │ │ ├── Arch_Amazon-Managed-Grafana_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_64.png │ │ ├── Arch_Amazon-Managed-Service-for-Prometheus_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-AppConfig_64.png │ │ ├── Arch_AWS-AppConfig_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Application-Auto-Scaling_64.png │ │ ├── Arch_AWS-Application-Auto-Scaling_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Auto-Scaling_64.png │ │ ├── Arch_AWS-Auto-Scaling_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Backint-Agent_64.png │ │ ├── Arch_AWS-Backint-Agent_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Chatbot_64.png │ │ ├── Arch_AWS-Chatbot_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CloudFormation_64.png │ │ ├── Arch_AWS-CloudFormation_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CloudTrail_64.png │ │ ├── Arch_AWS-CloudTrail_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Compute-Optimizer_64.png │ │ ├── Arch_AWS-Compute-Optimizer_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Config_64.png │ │ ├── Arch_AWS-Config_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Console-Mobile-Application_64.png │ │ ├── Arch_AWS-Console-Mobile-Application_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Control-Tower_64.png │ │ ├── Arch_AWS-Control-Tower_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_64.png │ │ ├── Arch_AWS-Distro-for-OpenTelemetry_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Health-Dashboard_64.png │ │ ├── Arch_AWS-Health-Dashboard_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Launch-Wizard_64.png │ │ ├── Arch_AWS-Launch-Wizard_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-License-Manager_64.png │ │ ├── Arch_AWS-License-Manager_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Management-Console_64.png │ │ ├── Arch_AWS-Management-Console_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Organizations_64.png │ │ ├── Arch_AWS-Organizations_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Proton_64.png │ │ ├── Arch_AWS-Proton_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Resilience-Hub_64.png │ │ ├── Arch_AWS-Resilience-Hub_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Resource-Explorer_64.png │ │ ├── Arch_AWS-Resource-Explorer_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Service-Catalog_64.png │ │ ├── Arch_AWS-Service-Catalog_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Service-Management-Connector_64.png │ │ ├── Arch_AWS-Service-Management-Connector_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Systems-Manager_64.png │ │ ├── Arch_AWS-Systems-Manager_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Telco-Network-Builder_64.png │ │ ├── Arch_AWS-Telco-Network-Builder_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Trusted-Advisor_64.png │ │ ├── Arch_AWS-Trusted-Advisor_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-User-Notifications_64.png │ │ ├── Arch_AWS-User-Notifications_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Well-Architected-Tool_64.png │ │ ├── Arch_AWS-Well-Architected-Tool_64.svg │ │ └── [email protected] │ ├── media-services │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Elastic-Transcoder_16.png │ │ │ ├── Arch_Amazon-Elastic-Transcoder_16.svg │ │ │ ├── Arch_Amazon-Interactive-Video-Service_16.png │ │ │ ├── Arch_Amazon-Interactive-Video-Service_16.svg │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_16.png │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_16.svg │ │ │ ├── Arch_AWS-Deadline-Cloud_16.png │ │ │ ├── Arch_AWS-Deadline-Cloud_16.svg │ │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_16.png │ │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_16.svg │ │ │ ├── Arch_AWS-Elemental-Conductor_16.png │ │ │ ├── Arch_AWS-Elemental-Conductor_16.svg │ │ │ ├── Arch_AWS-Elemental-Delta_16.png │ │ │ ├── Arch_AWS-Elemental-Delta_16.svg │ │ │ ├── Arch_AWS-Elemental-Link_16.png │ │ │ ├── Arch_AWS-Elemental-Link_16.svg │ │ │ ├── Arch_AWS-Elemental-Live_16.png │ │ │ ├── Arch_AWS-Elemental-Live_16.svg │ │ │ ├── Arch_AWS-Elemental-MediaConnect_16.png │ │ │ ├── Arch_AWS-Elemental-MediaConnect_16.svg │ │ │ ├── Arch_AWS-Elemental-MediaConvert_16.png │ │ │ ├── Arch_AWS-Elemental-MediaConvert_16.svg │ │ │ ├── Arch_AWS-Elemental-MediaLive_16.png │ │ │ ├── Arch_AWS-Elemental-MediaLive_16.svg │ │ │ ├── Arch_AWS-Elemental-MediaPackage_16.png │ │ │ ├── Arch_AWS-Elemental-MediaPackage_16.svg │ │ │ ├── Arch_AWS-Elemental-MediaStore_16.png │ │ │ ├── Arch_AWS-Elemental-MediaStore_16.svg │ │ │ ├── Arch_AWS-Elemental-MediaTailor_16.png │ │ │ ├── Arch_AWS-Elemental-MediaTailor_16.svg │ │ │ ├── Arch_AWS-Elemental-Server_16.png │ │ │ ├── Arch_AWS-Elemental-Server_16.svg │ │ │ ├── Arch_AWS-Thinkbox-Deadline_16.png │ │ │ ├── Arch_AWS-Thinkbox-Deadline_16.svg │ │ │ ├── Arch_AWS-Thinkbox-Frost_16.png │ │ │ ├── Arch_AWS-Thinkbox-Frost_16.svg │ │ │ ├── Arch_AWS-Thinkbox-Krakatoa_16.png │ │ │ ├── Arch_AWS-Thinkbox-Krakatoa_16.svg │ │ │ ├── Arch_AWS-Thinkbox-Sequoia_16.png │ │ │ ├── Arch_AWS-Thinkbox-Sequoia_16.svg │ │ │ ├── Arch_AWS-Thinkbox-Stoke_16.png │ │ │ ├── Arch_AWS-Thinkbox-Stoke_16.svg │ │ │ ├── Arch_AWS-Thinkbox-XMesh_16.png │ │ │ └── Arch_AWS-Thinkbox-XMesh_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Elastic-Transcoder_32.png │ │ │ ├── Arch_Amazon-Elastic-Transcoder_32.svg │ │ │ ├── Arch_Amazon-Interactive-Video-Service_32.png │ │ │ ├── Arch_Amazon-Interactive-Video-Service_32.svg │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_32.png │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_32.svg │ │ │ ├── Arch_AWS-Deadline-Cloud_32.png │ │ │ ├── Arch_AWS-Deadline-Cloud_32.svg │ │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_32.png │ │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_32.svg │ │ │ ├── Arch_AWS-Elemental-Conductor_32.png │ │ │ ├── Arch_AWS-Elemental-Conductor_32.svg │ │ │ ├── Arch_AWS-Elemental-Delta_32.png │ │ │ ├── Arch_AWS-Elemental-Delta_32.svg │ │ │ ├── Arch_AWS-Elemental-Link_32.png │ │ │ ├── Arch_AWS-Elemental-Link_32.svg │ │ │ ├── Arch_AWS-Elemental-Live_32.png │ │ │ ├── Arch_AWS-Elemental-Live_32.svg │ │ │ ├── Arch_AWS-Elemental-MediaConnect_32.png │ │ │ ├── Arch_AWS-Elemental-MediaConnect_32.svg │ │ │ ├── Arch_AWS-Elemental-MediaConvert_32.png │ │ │ ├── Arch_AWS-Elemental-MediaConvert_32.svg │ │ │ ├── Arch_AWS-Elemental-MediaLive_32.png │ │ │ ├── Arch_AWS-Elemental-MediaLive_32.svg │ │ │ ├── Arch_AWS-Elemental-MediaPackage_32.png │ │ │ ├── Arch_AWS-Elemental-MediaPackage_32.svg │ │ │ ├── Arch_AWS-Elemental-MediaStore_32.png │ │ │ ├── Arch_AWS-Elemental-MediaStore_32.svg │ │ │ ├── Arch_AWS-Elemental-MediaTailor_32.png │ │ │ ├── Arch_AWS-Elemental-MediaTailor_32.svg │ │ │ ├── Arch_AWS-Elemental-Server_32.png │ │ │ ├── Arch_AWS-Elemental-Server_32.svg │ │ │ ├── Arch_AWS-Thinkbox-Deadline_32.png │ │ │ ├── Arch_AWS-Thinkbox-Deadline_32.svg │ │ │ ├── Arch_AWS-Thinkbox-Frost_32.png │ │ │ ├── Arch_AWS-Thinkbox-Frost_32.svg │ │ │ ├── Arch_AWS-Thinkbox-Krakatoa_32.png │ │ │ ├── Arch_AWS-Thinkbox-Krakatoa_32.svg │ │ │ ├── Arch_AWS-Thinkbox-Sequoia_32.png │ │ │ ├── Arch_AWS-Thinkbox-Sequoia_32.svg │ │ │ ├── Arch_AWS-Thinkbox-Stoke_32.png │ │ │ ├── Arch_AWS-Thinkbox-Stoke_32.svg │ │ │ ├── Arch_AWS-Thinkbox-XMesh_32.png │ │ │ └── Arch_AWS-Thinkbox-XMesh_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-Elastic-Transcoder_48.png │ │ │ ├── Arch_Amazon-Elastic-Transcoder_48.svg │ │ │ ├── Arch_Amazon-Interactive-Video-Service_48.png │ │ │ ├── Arch_Amazon-Interactive-Video-Service_48.svg │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_48.png │ │ │ ├── Arch_Amazon-Kinesis-Video-Streams_48.svg │ │ │ ├── Arch_AWS-Deadline-Cloud_48.png │ │ │ ├── Arch_AWS-Deadline-Cloud_48.svg │ │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_48.png │ │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_48.svg │ │ │ ├── Arch_AWS-Elemental-Conductor_48.png │ │ │ ├── Arch_AWS-Elemental-Conductor_48.svg │ │ │ ├── Arch_AWS-Elemental-Delta_48.png │ │ │ ├── Arch_AWS-Elemental-Delta_48.svg │ │ │ ├── Arch_AWS-Elemental-Link_48.png │ │ │ ├── Arch_AWS-Elemental-Link_48.svg │ │ │ ├── Arch_AWS-Elemental-Live_48.png │ │ │ ├── Arch_AWS-Elemental-Live_48.svg │ │ │ ├── Arch_AWS-Elemental-MediaConnect_48.png │ │ │ ├── Arch_AWS-Elemental-MediaConnect_48.svg │ │ │ ├── Arch_AWS-Elemental-MediaConvert_48.png │ │ │ ├── Arch_AWS-Elemental-MediaConvert_48.svg │ │ │ ├── Arch_AWS-Elemental-MediaLive_48.png │ │ │ ├── Arch_AWS-Elemental-MediaLive_48.svg │ │ │ ├── Arch_AWS-Elemental-MediaPackage_48.png │ │ │ ├── Arch_AWS-Elemental-MediaPackage_48.svg │ │ │ ├── Arch_AWS-Elemental-MediaStore_48.png │ │ │ ├── Arch_AWS-Elemental-MediaStore_48.svg │ │ │ ├── Arch_AWS-Elemental-MediaTailor_48.png │ │ │ ├── Arch_AWS-Elemental-MediaTailor_48.svg │ │ │ ├── Arch_AWS-Elemental-Server_48.png │ │ │ ├── Arch_AWS-Elemental-Server_48.svg │ │ │ ├── Arch_AWS-Thinkbox-Deadline_48.png │ │ │ ├── Arch_AWS-Thinkbox-Deadline_48.svg │ │ │ ├── Arch_AWS-Thinkbox-Frost_48.png │ │ │ ├── Arch_AWS-Thinkbox-Frost_48.svg │ │ │ ├── Arch_AWS-Thinkbox-Krakatoa_48.png │ │ │ ├── Arch_AWS-Thinkbox-Krakatoa_48.svg │ │ │ ├── Arch_AWS-Thinkbox-Sequoia_48.png │ │ │ ├── Arch_AWS-Thinkbox-Sequoia_48.svg │ │ │ ├── Arch_AWS-Thinkbox-Stoke_48.png │ │ │ ├── Arch_AWS-Thinkbox-Stoke_48.svg │ │ │ ├── Arch_AWS-Thinkbox-XMesh_48.png │ │ │ └── Arch_AWS-Thinkbox-XMesh_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-Elastic-Transcoder_64.png │ │ ├── Arch_Amazon-Elastic-Transcoder_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Interactive-Video-Service_64.png │ │ ├── Arch_Amazon-Interactive-Video-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Kinesis-Video-Streams_64.png │ │ ├── Arch_Amazon-Kinesis-Video-Streams_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Deadline-Cloud_64.png │ │ ├── Arch_AWS-Deadline-Cloud_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_64.png │ │ ├── Arch_AWS-Elemental-Appliances-&-Software_64.svg │ │ ├── Arch_AWS-Elemental-Appliances-&[email protected] │ │ ├── Arch_AWS-Elemental-Conductor_64.png │ │ ├── Arch_AWS-Elemental-Conductor_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-Delta_64.png │ │ ├── Arch_AWS-Elemental-Delta_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-Link_64.png │ │ ├── Arch_AWS-Elemental-Link_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-Live_64.png │ │ ├── Arch_AWS-Elemental-Live_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-MediaConnect_64.png │ │ ├── Arch_AWS-Elemental-MediaConnect_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-MediaConvert_64.png │ │ ├── Arch_AWS-Elemental-MediaConvert_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-MediaLive_64.png │ │ ├── Arch_AWS-Elemental-MediaLive_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-MediaPackage_64.png │ │ ├── Arch_AWS-Elemental-MediaPackage_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-MediaStore_64.png │ │ ├── Arch_AWS-Elemental-MediaStore_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-MediaTailor_64.png │ │ ├── Arch_AWS-Elemental-MediaTailor_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Elemental-Server_64.png │ │ ├── Arch_AWS-Elemental-Server_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Thinkbox-Deadline_64.png │ │ ├── Arch_AWS-Thinkbox-Deadline_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Thinkbox-Frost_64.png │ │ ├── Arch_AWS-Thinkbox-Frost_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Thinkbox-Krakatoa_64.png │ │ ├── Arch_AWS-Thinkbox-Krakatoa_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Thinkbox-Sequoia_64.png │ │ ├── Arch_AWS-Thinkbox-Sequoia_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Thinkbox-Stoke_64.png │ │ ├── Arch_AWS-Thinkbox-Stoke_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Thinkbox-XMesh_64.png │ │ ├── Arch_AWS-Thinkbox-XMesh_64.svg │ │ └── [email protected] │ ├── migration-modernization │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-Application-Discovery-Service_16.png │ │ │ ├── Arch_AWS-Application-Discovery-Service_16.svg │ │ │ ├── Arch_AWS-Application-Migration-Service_16.png │ │ │ ├── Arch_AWS-Application-Migration-Service_16.svg │ │ │ ├── Arch_AWS-Data-Transfer-Terminal_16.png │ │ │ ├── Arch_AWS-Data-Transfer-Terminal_16.svg │ │ │ ├── Arch_AWS-DataSync_16.png │ │ │ ├── Arch_AWS-DataSync_16.svg │ │ │ ├── Arch_AWS-Mainframe-Modernization_16.png │ │ │ ├── Arch_AWS-Mainframe-Modernization_16.svg │ │ │ ├── Arch_AWS-Migration-Evaluator_16.png │ │ │ ├── Arch_AWS-Migration-Evaluator_16.svg │ │ │ ├── Arch_AWS-Migration-Hub_16.png │ │ │ ├── Arch_AWS-Migration-Hub_16.svg │ │ │ ├── Arch_AWS-Transfer-Family_16.png │ │ │ ├── Arch_AWS-Transfer-Family_16.svg │ │ │ ├── Arch_AWS-Transform_16.png │ │ │ └── Arch_AWS-Transform_16.svg │ │ ├── 32 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-Application-Discovery-Service_32.png │ │ │ ├── Arch_AWS-Application-Discovery-Service_32.svg │ │ │ ├── Arch_AWS-Application-Migration-Service_32.png │ │ │ ├── Arch_AWS-Application-Migration-Service_32.svg │ │ │ ├── Arch_AWS-Data-Transfer-Terminal_32.png │ │ │ ├── Arch_AWS-Data-Transfer-Terminal_32.svg │ │ │ ├── Arch_AWS-DataSync_32.png │ │ │ ├── Arch_AWS-DataSync_32.svg │ │ │ ├── Arch_AWS-Mainframe-Modernization_32.png │ │ │ ├── Arch_AWS-Mainframe-Modernization_32.svg │ │ │ ├── Arch_AWS-Migration-Evaluator_32.png │ │ │ ├── Arch_AWS-Migration-Evaluator_32.svg │ │ │ ├── Arch_AWS-Migration-Hub_32.png │ │ │ ├── Arch_AWS-Migration-Hub_32.svg │ │ │ ├── Arch_AWS-Transfer-Family_32.png │ │ │ ├── Arch_AWS-Transfer-Family_32.svg │ │ │ ├── Arch_AWS-Transform_32.png │ │ │ └── Arch_AWS-Transform_32.svg │ │ ├── 48 │ │ │ ├── .DS_Store │ │ │ ├── Arch_AWS-Application-Discovery-Service_48.png │ │ │ ├── Arch_AWS-Application-Discovery-Service_48.svg │ │ │ ├── Arch_AWS-Application-Migration-Service_48.png │ │ │ ├── Arch_AWS-Application-Migration-Service_48.svg │ │ │ ├── Arch_AWS-Data-Transfer-Terminal_48.png │ │ │ ├── Arch_AWS-Data-Transfer-Terminal_48.svg │ │ │ ├── Arch_AWS-DataSync_48.png │ │ │ ├── Arch_AWS-DataSync_48.svg │ │ │ ├── Arch_AWS-Mainframe-Modernization_48.png │ │ │ ├── Arch_AWS-Mainframe-Modernization_48.svg │ │ │ ├── Arch_AWS-Migration-Evaluator_48.png │ │ │ ├── Arch_AWS-Migration-Evaluator_48.svg │ │ │ ├── Arch_AWS-Migration-Hub_48.png │ │ │ ├── Arch_AWS-Migration-Hub_48.svg │ │ │ ├── Arch_AWS-Transfer-Family_48.png │ │ │ ├── Arch_AWS-Transfer-Family_48.svg │ │ │ ├── Arch_AWS-Transform_48.png │ │ │ └── Arch_AWS-Transform_48.svg │ │ └── 64 │ │ ├── .DS_Store │ │ ├── Arch_AWS-Application-Discovery-Service_64.png │ │ ├── Arch_AWS-Application-Discovery-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Application-Migration-Service_64.png │ │ ├── Arch_AWS-Application-Migration-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Data-Transfer-Terminal_64.png │ │ ├── Arch_AWS-Data-Transfer-Terminal_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-DataSync_64.png │ │ ├── Arch_AWS-DataSync_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Mainframe-Modernization_64.png │ │ ├── Arch_AWS-Mainframe-Modernization_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Migration-Evaluator_64.png │ │ ├── Arch_AWS-Migration-Evaluator_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Migration-Hub_64.png │ │ ├── Arch_AWS-Migration-Hub_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Transfer-Family_64.png │ │ ├── Arch_AWS-Transfer-Family_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Transform_64.png │ │ ├── Arch_AWS-Transform_64.svg │ │ └── [email protected] │ ├── networking-content-delivery │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── .DS_Store │ │ │ ├── Arch_Amazon-API-Gateway_16.png │ │ │ ├── Arch_Amazon-API-Gateway_16.svg │ │ │ ├── Arch_Amazon-Application-Recovery-Controller_16.png │ │ │ ├── Arch_Amazon-Application-Recovery-Controller_16.svg │ │ │ ├── Arch_Amazon-CloudFront_16.png │ │ │ ├── Arch_Amazon-CloudFront_16.svg │ │ │ ├── Arch_Amazon-Route-53_16.png │ │ │ ├── Arch_Amazon-Route-53_16.svg │ │ │ ├── Arch_Amazon-Virtual-Private-Cloud_16.png │ │ │ ├── Arch_Amazon-Virtual-Private-Cloud_16.svg │ │ │ ├── Arch_Amazon-VPC-Lattice_16.png │ │ │ ├── Arch_Amazon-VPC-Lattice_16.svg │ │ │ ├── Arch_AWS-App-Mesh_16.png │ │ │ ├── Arch_AWS-App-Mesh_16.svg │ │ │ ├── Arch_AWS-Client-VPN_16.png │ │ │ ├── Arch_AWS-Client-VPN_16.svg │ │ │ ├── Arch_AWS-Cloud-Map_16.png │ │ │ ├── Arch_AWS-Cloud-Map_16.svg │ │ │ ├── Arch_AWS-Cloud-WAN_16.png │ │ │ ├── Arch_AWS-Cloud-WAN_16.svg │ │ │ ├── Arch_AWS-Direct-Connect_16.png │ │ │ ├── Arch_AWS-Direct-Connect_16.svg │ │ │ ├── Arch_AWS-Global-Accelerator_16.png │ │ │ ├── Arch_AWS-Global-Accelerator_16.svg │ │ │ ├── Arch_AWS-Private-5G_16.png │ │ │ ├── Arch_AWS-Private-5G_16.svg │ │ │ ├── Arch_AWS-PrivateLink_16.png │ │ │ ├── Arch_AWS-PrivateLink_16.svg │ │ │ ├── Arch_AWS-Site-to-Site-VPN_16.png │ │ │ ├── Arch_AWS-Site-to-Site-VPN_16.svg │ │ │ ├── Arch_AWS-Transit-Gateway_16.png │ │ │ ├── Arch_AWS-Transit-Gateway_16.svg │ │ │ ├── Arch_AWS-Verified-Access_16.png │ │ │ ├── Arch_AWS-Verified-Access_16.svg │ │ │ ├── Arch_Elastic-Load-Balancing_16.png │ │ │ └── Arch_Elastic-Load-Balancing_16.svg │ │ ├── 32 │ │ │ ├── Arch_Amazon-API-Gateway_32.png │ │ │ ├── Arch_Amazon-API-Gateway_32.svg │ │ │ ├── Arch_Amazon-Application-Recovery-Controller_32.png │ │ │ ├── Arch_Amazon-Application-Recovery-Controller_32.svg │ │ │ ├── Arch_Amazon-CloudFront_32.png │ │ │ ├── Arch_Amazon-CloudFront_32.svg │ │ │ ├── Arch_Amazon-Route-53_32.png │ │ │ ├── Arch_Amazon-Route-53_32.svg │ │ │ ├── Arch_Amazon-Virtual-Private-Cloud_32.png │ │ │ ├── Arch_Amazon-Virtual-Private-Cloud_32.svg │ │ │ ├── Arch_Amazon-VPC-Lattice_32.png │ │ │ ├── Arch_Amazon-VPC-Lattice_32.svg │ │ │ ├── Arch_AWS-App-Mesh_32.png │ │ │ ├── Arch_AWS-App-Mesh_32.svg │ │ │ ├── Arch_AWS-Client-VPN_32.png │ │ │ ├── Arch_AWS-Client-VPN_32.svg │ │ │ ├── Arch_AWS-Cloud-Map_32.png │ │ │ ├── Arch_AWS-Cloud-Map_32.svg │ │ │ ├── Arch_AWS-Cloud-WAN_32.png │ │ │ ├── Arch_AWS-Cloud-WAN_32.svg │ │ │ ├── Arch_AWS-Direct-Connect_32.png │ │ │ ├── Arch_AWS-Direct-Connect_32.svg │ │ │ ├── Arch_AWS-Global-Accelerator_32.png │ │ │ ├── Arch_AWS-Global-Accelerator_32.svg │ │ │ ├── Arch_AWS-Private-5G_32.png │ │ │ ├── Arch_AWS-Private-5G_32.svg │ │ │ ├── Arch_AWS-PrivateLink_32.png │ │ │ ├── Arch_AWS-PrivateLink_32.svg │ │ │ ├── Arch_AWS-Site-to-Site-VPN_32.png │ │ │ ├── Arch_AWS-Site-to-Site-VPN_32.svg │ │ │ ├── Arch_AWS-Transit-Gateway_32.png │ │ │ ├── Arch_AWS-Transit-Gateway_32.svg │ │ │ ├── Arch_AWS-Verified-Access_32.png │ │ │ ├── Arch_AWS-Verified-Access_32.svg │ │ │ ├── Arch_Elastic-Load-Balancing_32.png │ │ │ └── Arch_Elastic-Load-Balancing_32.svg │ │ ├── 48 │ │ │ ├── Arch_Amazon-API-Gateway_48.png │ │ │ ├── Arch_Amazon-API-Gateway_48.svg │ │ │ ├── Arch_Amazon-Application-Recovery-Controller_48.png │ │ │ ├── Arch_Amazon-Application-Recovery-Controller_48.svg │ │ │ ├── Arch_Amazon-CloudFront_48.png │ │ │ ├── Arch_Amazon-CloudFront_48.svg │ │ │ ├── Arch_Amazon-Route-53_48.png │ │ │ ├── Arch_Amazon-Route-53_48.svg │ │ │ ├── Arch_Amazon-Virtual-Private-Cloud_48.png │ │ │ ├── Arch_Amazon-Virtual-Private-Cloud_48.svg │ │ │ ├── Arch_Amazon-VPC-Lattice_48.png │ │ │ ├── Arch_Amazon-VPC-Lattice_48.svg │ │ │ ├── Arch_AWS-App-Mesh_48.png │ │ │ ├── Arch_AWS-App-Mesh_48.svg │ │ │ ├── Arch_AWS-Client-VPN_48.png │ │ │ ├── Arch_AWS-Client-VPN_48.svg │ │ │ ├── Arch_AWS-Cloud-Map_48.png │ │ │ ├── Arch_AWS-Cloud-Map_48.svg │ │ │ ├── Arch_AWS-Cloud-WAN_48.png │ │ │ ├── Arch_AWS-Cloud-WAN_48.svg │ │ │ ├── Arch_AWS-Direct-Connect_48.png │ │ │ ├── Arch_AWS-Direct-Connect_48.svg │ │ │ ├── Arch_AWS-Global-Accelerator_48.png │ │ │ ├── Arch_AWS-Global-Accelerator_48.svg │ │ │ ├── Arch_AWS-Private-5G_48.png │ │ │ ├── Arch_AWS-Private-5G_48.svg │ │ │ ├── Arch_AWS-PrivateLink_48.png │ │ │ ├── Arch_AWS-PrivateLink_48.svg │ │ │ ├── Arch_AWS-Site-to-Site-VPN_48.png │ │ │ ├── Arch_AWS-Site-to-Site-VPN_48.svg │ │ │ ├── Arch_AWS-Transit-Gateway_48.png │ │ │ ├── Arch_AWS-Transit-Gateway_48.svg │ │ │ ├── Arch_AWS-Verified-Access_48.png │ │ │ ├── Arch_AWS-Verified-Access_48.svg │ │ │ ├── Arch_Elastic-Load-Balancing_48.png │ │ │ └── Arch_Elastic-Load-Balancing_48.svg │ │ └── 64 │ │ ├── Arch_Amazon-API-Gateway_64.png │ │ ├── Arch_Amazon-API-Gateway_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Application-Recovery-Controller_64.png │ │ ├── Arch_Amazon-Application-Recovery-Controller_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-CloudFront_64.png │ │ ├── Arch_Amazon-CloudFront_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Route-53_64.png │ │ ├── Arch_Amazon-Route-53_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Virtual-Private-Cloud_64.png │ │ ├── Arch_Amazon-Virtual-Private-Cloud_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-VPC-Lattice_64.png │ │ ├── Arch_Amazon-VPC-Lattice_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-App-Mesh_64.png │ │ ├── Arch_AWS-App-Mesh_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Client-VPN_64.png │ │ ├── Arch_AWS-Client-VPN_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Cloud-Map_64.png │ │ ├── Arch_AWS-Cloud-Map_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Cloud-WAN_64.png │ │ ├── Arch_AWS-Cloud-WAN_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Direct-Connect_64.png │ │ ├── Arch_AWS-Direct-Connect_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Global-Accelerator_64.png │ │ ├── Arch_AWS-Global-Accelerator_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Private-5G_64.png │ │ ├── Arch_AWS-Private-5G_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-PrivateLink_64.png │ │ ├── Arch_AWS-PrivateLink_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Site-to-Site-VPN_64.png │ │ ├── Arch_AWS-Site-to-Site-VPN_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Transit-Gateway_64.png │ │ ├── Arch_AWS-Transit-Gateway_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Verified-Access_64.png │ │ ├── Arch_AWS-Verified-Access_64.svg │ │ ├── [email protected] │ │ ├── Arch_Elastic-Load-Balancing_64.png │ │ ├── Arch_Elastic-Load-Balancing_64.svg │ │ └── [email protected] │ ├── quantum-technologies │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_Amazon-Braket_16.png │ │ │ └── Arch_Amazon-Braket_16.svg │ │ ├── 32 │ │ │ ├── Arch_Amazon-Braket_32.png │ │ │ └── Arch_Amazon-Braket_32.svg │ │ ├── 48 │ │ │ ├── Arch_Amazon-Braket_48.png │ │ │ └── Arch_Amazon-Braket_48.svg │ │ └── 64 │ │ ├── Arch_Amazon-Braket_64.png │ │ ├── Arch_Amazon-Braket_64.svg │ │ └── [email protected] │ ├── satellite │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_AWS-Ground-Station_16.png │ │ │ └── Arch_AWS-Ground-Station_16.svg │ │ ├── 32 │ │ │ ├── Arch_AWS-Ground-Station_32.png │ │ │ └── Arch_AWS-Ground-Station_32.svg │ │ ├── 48 │ │ │ ├── Arch_AWS-Ground-Station_48.png │ │ │ └── Arch_AWS-Ground-Station_48.svg │ │ └── 64 │ │ ├── Arch_AWS-Ground-Station_64.png │ │ ├── Arch_AWS-Ground-Station_64.svg │ │ └── [email protected] │ ├── security-identity-compliance │ │ ├── .DS_Store │ │ ├── 16 │ │ │ ├── Arch_Amazon-Cloud-Directory_16.png │ │ │ ├── Arch_Amazon-Cloud-Directory_16.svg │ │ │ ├── Arch_Amazon-Cognito_16.png │ │ │ ├── Arch_Amazon-Cognito_16.svg │ │ │ ├── Arch_Amazon-Detective_16.png │ │ │ ├── Arch_Amazon-Detective_16.svg │ │ │ ├── Arch_Amazon-GuardDuty_16.png │ │ │ ├── Arch_Amazon-GuardDuty_16.svg │ │ │ ├── Arch_Amazon-Inspector_16.png │ │ │ ├── Arch_Amazon-Inspector_16.svg │ │ │ ├── Arch_Amazon-Macie_16.png │ │ │ ├── Arch_Amazon-Macie_16.svg │ │ │ ├── Arch_Amazon-Security-Lake_16.png │ │ │ ├── Arch_Amazon-Security-Lake_16.svg │ │ │ ├── Arch_Amazon-Verified-Permissions_16.png │ │ │ ├── Arch_Amazon-Verified-Permissions_16.svg │ │ │ ├── Arch_AWS-Artifact_16.png │ │ │ ├── Arch_AWS-Artifact_16.svg │ │ │ ├── Arch_AWS-Audit-Manager_16.png │ │ │ ├── Arch_AWS-Audit-Manager_16.svg │ │ │ ├── Arch_AWS-Certificate-Manager_16.png │ │ │ ├── Arch_AWS-Certificate-Manager_16.svg │ │ │ ├── Arch_AWS-CloudHSM_16.png │ │ │ ├── Arch_AWS-CloudHSM_16.svg │ │ │ ├── Arch_AWS-Directory-Service_16.png │ │ │ ├── Arch_AWS-Directory-Service_16.svg │ │ │ ├── Arch_AWS-Firewall-Manager_16.png │ │ │ ├── Arch_AWS-Firewall-Manager_16.svg │ │ │ ├── Arch_AWS-IAM-Identity-Center_16.png │ │ │ ├── Arch_AWS-IAM-Identity-Center_16.svg │ │ │ ├── Arch_AWS-Identity-and-Access-Management_16.png │ │ │ ├── Arch_AWS-Identity-and-Access-Management_16.svg │ │ │ ├── Arch_AWS-Key-Management-Service_16.png │ │ │ ├── Arch_AWS-Key-Management-Service_16.svg │ │ │ ├── Arch_AWS-Network-Firewall_16.png │ │ │ ├── Arch_AWS-Network-Firewall_16.svg │ │ │ ├── Arch_AWS-Payment-Cryptography_16.png │ │ │ ├── Arch_AWS-Payment-Cryptography_16.svg │ │ │ ├── Arch_AWS-Private-Certificate-Authority_16.png │ │ │ ├── Arch_AWS-Private-Certificate-Authority_16.svg │ │ │ ├── Arch_AWS-Resource-Access-Manager_16.png │ │ │ ├── Arch_AWS-Resource-Access-Manager_16.svg │ │ │ ├── Arch_AWS-Secrets-Manager_16.png │ │ │ ├── Arch_AWS-Secrets-Manager_16.svg │ │ │ ├── Arch_AWS-Security-Hub_16.png │ │ │ ├── Arch_AWS-Security-Hub_16.svg │ │ │ ├── Arch_AWS-Security-Incident-Response_16.png │ │ │ ├── Arch_AWS-Security-Incident-Response_16.svg │ │ │ ├── Arch_AWS-Shield_16.png │ │ │ ├── Arch_AWS-Shield_16.svg │ │ │ ├── Arch_AWS-Signer_16.png │ │ │ ├── Arch_AWS-Signer_16.svg │ │ │ ├── Arch_AWS-WAF_16.png │ │ │ └── Arch_AWS-WAF_16.svg │ │ ├── 32 │ │ │ ├── Arch_Amazon-Cloud-Directory_32.png │ │ │ ├── Arch_Amazon-Cloud-Directory_32.svg │ │ │ ├── Arch_Amazon-Cognito_32.png │ │ │ ├── Arch_Amazon-Cognito_32.svg │ │ │ ├── Arch_Amazon-Detective_32.png │ │ │ ├── Arch_Amazon-Detective_32.svg │ │ │ ├── Arch_Amazon-GuardDuty_32.png │ │ │ ├── Arch_Amazon-GuardDuty_32.svg │ │ │ ├── Arch_Amazon-Inspector_32.png │ │ │ ├── Arch_Amazon-Inspector_32.svg │ │ │ ├── Arch_Amazon-Macie_32.png │ │ │ ├── Arch_Amazon-Macie_32.svg │ │ │ ├── Arch_Amazon-Security-Lake_32.png │ │ │ ├── Arch_Amazon-Security-Lake_32.svg │ │ │ ├── Arch_Amazon-Verified-Permissions_32.png │ │ │ ├── Arch_Amazon-Verified-Permissions_32.svg │ │ │ ├── Arch_AWS-Artifact_32.png │ │ │ ├── Arch_AWS-Artifact_32.svg │ │ │ ├── Arch_AWS-Audit-Manager_32.png │ │ │ ├── Arch_AWS-Audit-Manager_32.svg │ │ │ ├── Arch_AWS-Certificate-Manager_32.png │ │ │ ├── Arch_AWS-Certificate-Manager_32.svg │ │ │ ├── Arch_AWS-CloudHSM_32.png │ │ │ ├── Arch_AWS-CloudHSM_32.svg │ │ │ ├── Arch_AWS-Directory-Service_32.png │ │ │ ├── Arch_AWS-Directory-Service_32.svg │ │ │ ├── Arch_AWS-Firewall-Manager_32.png │ │ │ ├── Arch_AWS-Firewall-Manager_32.svg │ │ │ ├── Arch_AWS-IAM-Identity-Center_32.png │ │ │ ├── Arch_AWS-IAM-Identity-Center_32.svg │ │ │ ├── Arch_AWS-Identity-and-Access-Management_32.png │ │ │ ├── Arch_AWS-Identity-and-Access-Management_32.svg │ │ │ ├── Arch_AWS-Key-Management-Service_32.png │ │ │ ├── Arch_AWS-Key-Management-Service_32.svg │ │ │ ├── Arch_AWS-Network-Firewall_32.png │ │ │ ├── Arch_AWS-Network-Firewall_32.svg │ │ │ ├── Arch_AWS-Payment-Cryptography_32.png │ │ │ ├── Arch_AWS-Payment-Cryptography_32.svg │ │ │ ├── Arch_AWS-Private-Certificate-Authority_32.png │ │ │ ├── Arch_AWS-Private-Certificate-Authority_32.svg │ │ │ ├── Arch_AWS-Resource-Access-Manager_32.png │ │ │ ├── Arch_AWS-Resource-Access-Manager_32.svg │ │ │ ├── Arch_AWS-Secrets-Manager_32.png │ │ │ ├── Arch_AWS-Secrets-Manager_32.svg │ │ │ ├── Arch_AWS-Security-Hub_32.png │ │ │ ├── Arch_AWS-Security-Hub_32.svg │ │ │ ├── Arch_AWS-Security-Incident-Response_32.png │ │ │ ├── Arch_AWS-Security-Incident-Response_32.svg │ │ │ ├── Arch_AWS-Shield_32.png │ │ │ ├── Arch_AWS-Shield_32.svg │ │ │ ├── Arch_AWS-Signer_32.png │ │ │ ├── Arch_AWS-Signer_32.svg │ │ │ ├── Arch_AWS-WAF_32.png │ │ │ └── Arch_AWS-WAF_32.svg │ │ ├── 48 │ │ │ ├── Arch_Amazon-Cloud-Directory_48.png │ │ │ ├── Arch_Amazon-Cloud-Directory_48.svg │ │ │ ├── Arch_Amazon-Cognito_48.png │ │ │ ├── Arch_Amazon-Cognito_48.svg │ │ │ ├── Arch_Amazon-Detective_48.png │ │ │ ├── Arch_Amazon-Detective_48.svg │ │ │ ├── Arch_Amazon-GuardDuty_48.png │ │ │ ├── Arch_Amazon-GuardDuty_48.svg │ │ │ ├── Arch_Amazon-Inspector_48.png │ │ │ ├── Arch_Amazon-Inspector_48.svg │ │ │ ├── Arch_Amazon-Macie_48.png │ │ │ ├── Arch_Amazon-Macie_48.svg │ │ │ ├── Arch_Amazon-Security-Lake_48.png │ │ │ ├── Arch_Amazon-Security-Lake_48.svg │ │ │ ├── Arch_Amazon-Verified-Permissions_48.png │ │ │ ├── Arch_Amazon-Verified-Permissions_48.svg │ │ │ ├── Arch_AWS-Artifact_48.png │ │ │ ├── Arch_AWS-Artifact_48.svg │ │ │ ├── Arch_AWS-Audit-Manager_48.png │ │ │ ├── Arch_AWS-Audit-Manager_48.svg │ │ │ ├── Arch_AWS-Certificate-Manager_48.png │ │ │ ├── Arch_AWS-Certificate-Manager_48.svg │ │ │ ├── Arch_AWS-CloudHSM_48.png │ │ │ ├── Arch_AWS-CloudHSM_48.svg │ │ │ ├── Arch_AWS-Directory-Service_48.png │ │ │ ├── Arch_AWS-Directory-Service_48.svg │ │ │ ├── Arch_AWS-Firewall-Manager_48.png │ │ │ ├── Arch_AWS-Firewall-Manager_48.svg │ │ │ ├── Arch_AWS-IAM-Identity-Center_48.png │ │ │ ├── Arch_AWS-IAM-Identity-Center_48.svg │ │ │ ├── Arch_AWS-Identity-and-Access-Management_48.png │ │ │ ├── Arch_AWS-Identity-and-Access-Management_48.svg │ │ │ ├── Arch_AWS-Key-Management-Service_48.png │ │ │ ├── Arch_AWS-Key-Management-Service_48.svg │ │ │ ├── Arch_AWS-Network-Firewall_48.png │ │ │ ├── Arch_AWS-Network-Firewall_48.svg │ │ │ ├── Arch_AWS-Payment-Cryptography_48.png │ │ │ ├── Arch_AWS-Payment-Cryptography_48.svg │ │ │ ├── Arch_AWS-Private-Certificate-Authority_48.png │ │ │ ├── Arch_AWS-Private-Certificate-Authority_48.svg │ │ │ ├── Arch_AWS-Resource-Access-Manager_48.png │ │ │ ├── Arch_AWS-Resource-Access-Manager_48.svg │ │ │ ├── Arch_AWS-Secrets-Manager_48.png │ │ │ ├── Arch_AWS-Secrets-Manager_48.svg │ │ │ ├── Arch_AWS-Security-Hub_48.png │ │ │ ├── Arch_AWS-Security-Hub_48.svg │ │ │ ├── Arch_AWS-Security-Incident-Response_48.png │ │ │ ├── Arch_AWS-Security-Incident-Response_48.svg │ │ │ ├── Arch_AWS-Shield_48.png │ │ │ ├── Arch_AWS-Shield_48.svg │ │ │ ├── Arch_AWS-Signer_48.png │ │ │ ├── Arch_AWS-Signer_48.svg │ │ │ ├── Arch_AWS-WAF_48.png │ │ │ └── Arch_AWS-WAF_48.svg │ │ └── 64 │ │ ├── Arch_Amazon-Cloud-Directory_64.png │ │ ├── Arch_Amazon-Cloud-Directory_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Cognito_64.png │ │ ├── Arch_Amazon-Cognito_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Detective_64.png │ │ ├── Arch_Amazon-Detective_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-GuardDuty_64.png │ │ ├── Arch_Amazon-GuardDuty_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Inspector_64.png │ │ ├── Arch_Amazon-Inspector_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Macie_64.png │ │ ├── Arch_Amazon-Macie_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Security-Lake_64.png │ │ ├── Arch_Amazon-Security-Lake_64.svg │ │ ├── [email protected] │ │ ├── Arch_Amazon-Verified-Permissions_64.png │ │ ├── Arch_Amazon-Verified-Permissions_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Artifact_64.png │ │ ├── Arch_AWS-Artifact_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Audit-Manager_64.png │ │ ├── Arch_AWS-Audit-Manager_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Certificate-Manager_64.png │ │ ├── Arch_AWS-Certificate-Manager_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-CloudHSM_64.png │ │ ├── Arch_AWS-CloudHSM_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Directory-Service_64.png │ │ ├── Arch_AWS-Directory-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Firewall-Manager_64.png │ │ ├── Arch_AWS-Firewall-Manager_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-IAM-Identity-Center_64.png │ │ ├── Arch_AWS-IAM-Identity-Center_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Identity-and-Access-Management_64.png │ │ ├── Arch_AWS-Identity-and-Access-Management_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Key-Management-Service_64.png │ │ ├── Arch_AWS-Key-Management-Service_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Network-Firewall_64.png │ │ ├── Arch_AWS-Network-Firewall_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Payment-Cryptography_64.png │ │ ├── Arch_AWS-Payment-Cryptography_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Private-Certificate-Authority_64.png │ │ ├── Arch_AWS-Private-Certificate-Authority_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Resource-Access-Manager_64.png │ │ ├── Arch_AWS-Resource-Access-Manager_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Secrets-Manager_64.png │ │ ├── Arch_AWS-Secrets-Manager_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Security-Hub_64.png │ │ ├── Arch_AWS-Security-Hub_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Security-Incident-Response_64.png │ │ ├── Arch_AWS-Security-Incident-Response_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Shield_64.png │ │ ├── Arch_AWS-Shield_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-Signer_64.png │ │ ├── Arch_AWS-Signer_64.svg │ │ ├── [email protected] │ │ ├── Arch_AWS-WAF_64.png │ │ ├── Arch_AWS-WAF_64.svg │ │ └── [email protected] │ └── storage │ ├── .DS_Store │ ├── 16 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-EFS_16.png │ │ ├── Arch_Amazon-EFS_16.svg │ │ ├── Arch_Amazon-Elastic-Block-Store_16.png │ │ ├── Arch_Amazon-Elastic-Block-Store_16.svg │ │ ├── Arch_Amazon-File-Cache_16.png │ │ ├── Arch_Amazon-File-Cache_16.svg │ │ ├── Arch_Amazon-FSx_16.png │ │ ├── Arch_Amazon-FSx_16.svg │ │ ├── Arch_Amazon-FSx-for-Lustre_16.png │ │ ├── Arch_Amazon-FSx-for-Lustre_16.svg │ │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_16.png │ │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_16.svg │ │ ├── Arch_Amazon-FSx-for-OpenZFS_16.png │ │ ├── Arch_Amazon-FSx-for-OpenZFS_16.svg │ │ ├── Arch_Amazon-FSx-for-WFS_16.png │ │ ├── Arch_Amazon-FSx-for-WFS_16.svg │ │ ├── Arch_Amazon-S3-on-Outposts_16.png │ │ ├── Arch_Amazon-S3-on-Outposts_16.svg │ │ ├── Arch_Amazon-Simple-Storage-Service_16.png │ │ ├── Arch_Amazon-Simple-Storage-Service_16.svg │ │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_16.png │ │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_16.svg │ │ ├── Arch_AWS-Backup_16.png │ │ ├── Arch_AWS-Backup_16.svg │ │ ├── Arch_AWS-Elastic-Disaster-Recovery_16.png │ │ ├── Arch_AWS-Elastic-Disaster-Recovery_16.svg │ │ ├── Arch_AWS-Snowball_16.png │ │ ├── Arch_AWS-Snowball_16.svg │ │ ├── Arch_AWS-Snowball-Edge_16.png │ │ ├── Arch_AWS-Snowball-Edge_16.svg │ │ ├── Arch_AWS-Storage-Gateway_16.png │ │ └── Arch_AWS-Storage-Gateway_16.svg │ ├── 32 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-EFS_32.png │ │ ├── Arch_Amazon-EFS_32.svg │ │ ├── Arch_Amazon-Elastic-Block-Store_32.png │ │ ├── Arch_Amazon-Elastic-Block-Store_32.svg │ │ ├── Arch_Amazon-File-Cache_32.png │ │ ├── Arch_Amazon-File-Cache_32.svg │ │ ├── Arch_Amazon-FSx_32.png │ │ ├── Arch_Amazon-FSx_32.svg │ │ ├── Arch_Amazon-FSx-for-Lustre_32.png │ │ ├── Arch_Amazon-FSx-for-Lustre_32.svg │ │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_32.png │ │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_32.svg │ │ ├── Arch_Amazon-FSx-for-OpenZFS_32.png │ │ ├── Arch_Amazon-FSx-for-OpenZFS_32.svg │ │ ├── Arch_Amazon-FSx-for-WFS_32.png │ │ ├── Arch_Amazon-FSx-for-WFS_32.svg │ │ ├── Arch_Amazon-S3-on-Outposts_32.png │ │ ├── Arch_Amazon-S3-on-Outposts_32.svg │ │ ├── Arch_Amazon-Simple-Storage-Service_32.png │ │ ├── Arch_Amazon-Simple-Storage-Service_32.svg │ │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_32.png │ │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_32.svg │ │ ├── Arch_AWS-Backup_32.png │ │ ├── Arch_AWS-Backup_32.svg │ │ ├── Arch_AWS-Elastic-Disaster-Recovery_32.png │ │ ├── Arch_AWS-Elastic-Disaster-Recovery_32.svg │ │ ├── Arch_AWS-Snowball_32.png │ │ ├── Arch_AWS-Snowball_32.svg │ │ ├── Arch_AWS-Snowball-Edge_32.png │ │ ├── Arch_AWS-Snowball-Edge_32.svg │ │ ├── Arch_AWS-Storage-Gateway_32.png │ │ └── Arch_AWS-Storage-Gateway_32.svg │ ├── 48 │ │ ├── .DS_Store │ │ ├── Arch_Amazon-EFS_48.png │ │ ├── Arch_Amazon-EFS_48.svg │ │ ├── Arch_Amazon-Elastic-Block-Store_48.png │ │ ├── Arch_Amazon-Elastic-Block-Store_48.svg │ │ ├── Arch_Amazon-File-Cache_48.png │ │ ├── Arch_Amazon-File-Cache_48.svg │ │ ├── Arch_Amazon-FSx_48.png │ │ ├── Arch_Amazon-FSx_48.svg │ │ ├── Arch_Amazon-FSx-for-Lustre_48.png │ │ ├── Arch_Amazon-FSx-for-Lustre_48.svg │ │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_48.png │ │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_48.svg │ │ ├── Arch_Amazon-FSx-for-OpenZFS_48.png │ │ ├── Arch_Amazon-FSx-for-OpenZFS_48.svg │ │ ├── Arch_Amazon-FSx-for-WFS_48.png │ │ ├── Arch_Amazon-FSx-for-WFS_48.svg │ │ ├── Arch_Amazon-S3-on-Outposts_48.png │ │ ├── Arch_Amazon-S3-on-Outposts_48.svg │ │ ├── Arch_Amazon-Simple-Storage-Service_48.png │ │ ├── Arch_Amazon-Simple-Storage-Service_48.svg │ │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_48.png │ │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_48.svg │ │ ├── Arch_AWS-Backup_48.png │ │ ├── Arch_AWS-Backup_48.svg │ │ ├── Arch_AWS-Elastic-Disaster-Recovery_48.png │ │ ├── Arch_AWS-Elastic-Disaster-Recovery_48.svg │ │ ├── Arch_AWS-Snowball_48.png │ │ ├── Arch_AWS-Snowball_48.svg │ │ ├── Arch_AWS-Snowball-Edge_48.png │ │ ├── Arch_AWS-Snowball-Edge_48.svg │ │ ├── Arch_AWS-Storage-Gateway_48.png │ │ └── Arch_AWS-Storage-Gateway_48.svg │ └── 64 │ ├── .DS_Store │ ├── Arch_Amazon-EFS_64.png │ ├── Arch_Amazon-EFS_64.svg │ ├── [email protected] │ ├── Arch_Amazon-Elastic-Block-Store_64.png │ ├── Arch_Amazon-Elastic-Block-Store_64.svg │ ├── [email protected] │ ├── Arch_Amazon-File-Cache_64.png │ ├── Arch_Amazon-File-Cache_64.svg │ ├── [email protected] │ ├── Arch_Amazon-FSx_64.png │ ├── Arch_Amazon-FSx_64.svg │ ├── [email protected] │ ├── Arch_Amazon-FSx-for-Lustre_64.png │ ├── Arch_Amazon-FSx-for-Lustre_64.svg │ ├── [email protected] │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_64.png │ ├── Arch_Amazon-FSx-for-NetApp-ONTAP_64.svg │ ├── [email protected] │ ├── Arch_Amazon-FSx-for-OpenZFS_64.png │ ├── Arch_Amazon-FSx-for-OpenZFS_64.svg │ ├── [email protected] │ ├── Arch_Amazon-FSx-for-WFS_64.png │ ├── Arch_Amazon-FSx-for-WFS_64.svg │ ├── [email protected] │ ├── Arch_Amazon-S3-on-Outposts_64.png │ ├── Arch_Amazon-S3-on-Outposts_64.svg │ ├── [email protected] │ ├── Arch_Amazon-Simple-Storage-Service_64.png │ ├── Arch_Amazon-Simple-Storage-Service_64.svg │ ├── [email protected] │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_64.png │ ├── Arch_Amazon-Simple-Storage-Service-Glacier_64.svg │ ├── [email protected] │ ├── Arch_AWS-Backup_64.png │ ├── Arch_AWS-Backup_64.svg │ ├── [email protected] │ ├── Arch_AWS-Elastic-Disaster-Recovery_64.png │ ├── Arch_AWS-Elastic-Disaster-Recovery_64.svg │ ├── [email protected] │ ├── Arch_AWS-Snowball_64.png │ ├── Arch_AWS-Snowball_64.svg │ ├── [email protected] │ ├── Arch_AWS-Snowball-Edge_64.png │ ├── Arch_AWS-Snowball-Edge_64.svg │ ├── [email protected] │ ├── Arch_AWS-Storage-Gateway_64.png │ ├── Arch_AWS-Storage-Gateway_64.svg │ └── [email protected] ├── index.html ├── manifest.json ├── robots.txt └── static ├── css │ ├── main.c910004d.css │ └── main.c910004d.css.map └── js ├── 1297.c349ec3c.chunk.js ├── 14.7ba48ec4.chunk.js ├── 14.7ba48ec4.chunk.js.LICENSE.txt ├── 14.7ba48ec4.chunk.js.map ├── 1409.d2c5ac18.chunk.js ├── 1457.10b2696f.chunk.js ├── 1595.f10cd903.chunk.js ├── 1595.f10cd903.chunk.js.LICENSE.txt ├── 1595.f10cd903.chunk.js.map ├── 1707.26c2b146.chunk.js ├── 1707.26c2b146.chunk.js.map ├── 2019.3e4e6398.chunk.js ├── 2019.3e4e6398.chunk.js.map ├── 2038.86d3ba27.chunk.js ├── 2038.86d3ba27.chunk.js.map ├── 2374.75cb7c60.chunk.js ├── 2374.75cb7c60.chunk.js.LICENSE.txt ├── 2374.75cb7c60.chunk.js.map ├── 2491.6dc3b41c.chunk.js ├── 2491.6dc3b41c.chunk.js.map ├── 3025.e856e271.chunk.js ├── 3025.e856e271.chunk.js.LICENSE.txt ├── 3025.e856e271.chunk.js.map ├── 3290.6c752b7b.chunk.js ├── 3290.6c752b7b.chunk.js.map ├── 3345.719283e7.chunk.js ├── 3345.719283e7.chunk.js.map ├── 349.2456c1b6.chunk.js ├── 349.2456c1b6.chunk.js.map ├── 3641.87d0bf7c.chunk.js ├── 3641.87d0bf7c.chunk.js.map ├── 3705.1bb92025.chunk.js ├── 3705.1bb92025.chunk.js.map ├── 3750.c184e3e3.chunk.js ├── 3750.c184e3e3.chunk.js.map ├── 3817.79a57e5e.chunk.js ├── 3817.79a57e5e.chunk.js.map ├── 4114.eea3c770.chunk.js ├── 4114.eea3c770.chunk.js.map ├── 4135.b88aaf7b.chunk.js ├── 4147.5f8e8649.chunk.js ├── 4191.3ed02494.chunk.js ├── 4191.3ed02494.chunk.js.map ├── 4487.fec1d877.chunk.js ├── 4570.ce64aedb.chunk.js ├── 4570.ce64aedb.chunk.js.map ├── 490.a05b6059.chunk.js ├── 490.a05b6059.chunk.js.map ├── 5009.1a2aa685.chunk.js ├── 5009.1a2aa685.chunk.js.LICENSE.txt ├── 5009.1a2aa685.chunk.js.map ├── 5502.14766ceb.chunk.js ├── 5502.14766ceb.chunk.js.map ├── 62.b40b6fbd.chunk.js ├── 62.b40b6fbd.chunk.js.map ├── 6453.8c3fba0e.chunk.js ├── 6453.8c3fba0e.chunk.js.map ├── 6455.8e6b5278.chunk.js ├── 6455.8e6b5278.chunk.js.map ├── 646.6aac5035.chunk.js ├── 646.6aac5035.chunk.js.LICENSE.txt ├── 646.6aac5035.chunk.js.map ├── 6516.3948f7b4.chunk.js ├── 6516.3948f7b4.chunk.js.map ├── 6725.6ad72d9d.chunk.js ├── 6823.e10e9817.chunk.js ├── 6823.e10e9817.chunk.js.map ├── 6865.afd592a9.chunk.js ├── 6865.afd592a9.chunk.js.map ├── 6977.4218876a.chunk.js ├── 6977.4218876a.chunk.js.LICENSE.txt ├── 6977.4218876a.chunk.js.map ├── 7069.02ce9149.chunk.js ├── 7069.02ce9149.chunk.js.map ├── 7513.37f12f0e.chunk.js ├── 7513.37f12f0e.chunk.js.map ├── 7550.0cfdabcf.chunk.js ├── 7550.0cfdabcf.chunk.js.map ├── 7681.ee495de8.chunk.js ├── 7681.ee495de8.chunk.js.LICENSE.txt ├── 7681.ee495de8.chunk.js.map ├── 7841.37a92b31.chunk.js ├── 7841.37a92b31.chunk.js.map ├── 7854.ed7e04cc.chunk.js ├── 7854.ed7e04cc.chunk.js.map ├── 8151.87df400e.chunk.js ├── 8151.87df400e.chunk.js.map ├── 8195.55a334cf.chunk.js ├── 8195.55a334cf.chunk.js.map ├── 8218.b7de3259.chunk.js ├── 8218.b7de3259.chunk.js.map ├── 8234.f2f9a7db.chunk.js ├── 8234.f2f9a7db.chunk.js.map ├── 8332.9aa74d00.chunk.js ├── 8332.9aa74d00.chunk.js.map ├── 8449.676bcc94.chunk.js ├── 8449.676bcc94.chunk.js.map ├── 8660.7fdeafe8.chunk.js ├── 8660.7fdeafe8.chunk.js.map ├── 9413.aea20916.chunk.js ├── 9413.aea20916.chunk.js.map ├── 9448.cd4e8095.chunk.js ├── 9448.cd4e8095.chunk.js.map ├── 9459.753274fe.chunk.js ├── 9459.753274fe.chunk.js.map ├── 9573.5ba95804.chunk.js ├── 9573.5ba95804.chunk.js.map ├── 9664.9e69f3bc.chunk.js ├── 9664.9e69f3bc.chunk.js.map ├── 9844.6366c533.chunk.js ├── 9844.6366c533.chunk.js.map ├── main.4cda12e2.js ├── main.4cda12e2.js.LICENSE.txt └── main.4cda12e2.js.map ``` # Files -------------------------------------------------------------------------------- /pkg/agent/agent_test.go: -------------------------------------------------------------------------------- ```go package agent import ( "context" "encoding/json" "fmt" "os" "path/filepath" "strings" "testing" "time" "github.com/tmc/langchaingo/llms" "github.com/tmc/langchaingo/llms/googleai" "github.com/versus-control/ai-infrastructure-agent/internal/config" "github.com/versus-control/ai-infrastructure-agent/internal/logging" "github.com/versus-control/ai-infrastructure-agent/pkg/agent/mocks" "github.com/versus-control/ai-infrastructure-agent/pkg/types" ) // === Helper Functions for Setting Up Real AI and Comprehensive Mock MCP Tools === func setupRealConfiguration() (*config.Config, error) { // Load the actual config from configuration file cfg, err := config.Load() if err != nil { return nil, fmt.Errorf("failed to load configuration: %w", err) } // Ensure we're using Gemini for this test cfg.Agent.Provider = "gemini" cfg.Agent.MaxTokens = 20000 cfg.Agent.Model = "gemini-2.5-flash-lite" // Use a valid model name cfg.Agent.EnableDebug = true return cfg, nil } func setupRealLLMClient(cfg *config.Config) (llms.Model, error) { switch cfg.Agent.Provider { case "gemini": apiKey := os.Getenv("GEMINI_API_KEY") if apiKey == "" { return nil, fmt.Errorf("You need an auth option to use this client.") } // Pass the API key and model to the googleai client return googleai.New(context.Background(), googleai.WithAPIKey(apiKey), googleai.WithDefaultModel(cfg.Agent.Model)) default: return nil, fmt.Errorf("unsupported LLM provider: %s", cfg.Agent.Provider) } } func setupAgentWithRealAI(cfg *config.Config, llmClient llms.Model) (*StateAwareAgent, *mocks.MockTestSuite, error) { // Create logger logger := logging.NewLogger("test", cfg.Logging.Level) // Initialize mock test suite with real component integration mockSuite, err := mocks.NewMockTestSuite("us-west-2") if err != nil { return nil, nil, fmt.Errorf("failed to create mock test suite: %w", err) } // Create agent with real AI but mock infrastructure components agent := &StateAwareAgent{ llm: llmClient, config: &cfg.Agent, awsConfig: &cfg.AWS, Logger: logger, // MCP from mock suite resourceMappings: make(map[string]string), mcpTools: make(map[string]MCPToolInfo), mcpResources: make(map[string]MCPResourceInfo), // Enable test mode to use mock MCP capabilities testMode: true, // Set mock MCP server for test mode mockMCPServer: mockSuite.MCPServer, // Use real configuration-driven components from mock suite patternMatcher: mockSuite.StateManager.GetPatternMatcher(), fieldResolver: mockSuite.StateManager.GetFieldResolver(), extractionConfig: mockSuite.StateManager.GetExtractionConfig(), idExtractor: mockSuite.StateManager.GetIDExtractor(), } return agent, mockSuite, nil } // == Prompts == // Comprehensive VPC Infrastructure func comprehensiveVPCPrompt() string { // Comprehensive VPC infrastructure prompt prompt := `Create a complete production-ready VPC infrastructure on AWS with the following requirements: NETWORK ARCHITECTURE: - VPC with CIDR 10.0.0.0/16 in us-west-2 - 6 subnets across 3 availability zones: * 2 public subnets (10.0.1.0/24, 10.0.2.0/24) for load balancers * 2 private subnets (10.0.11.0/24, 10.0.12.0/24) for application servers * 2 database subnets (10.0.21.0/24, 10.0.22.0/24) for RDS instances - Internet Gateway for public access - 2 NAT Gateways in public subnets for private subnet internet access - Route tables with proper routing COMPUTE & SECURITY: - Application Load Balancer in public subnets - Auto Scaling Group with t3.medium instances in private subnets - Launch Template with latest Amazon Linux 2 AMI - Security Groups with least privilege access - Target Group for ALB health checks DATABASE: - RDS MySQL instance in database subnets - Database security group allowing access only from app servers - Multi-AZ deployment for high availability VALIDATION: - Validate all resources are properly configured - Test connectivity between components - Verify security group rules are correct Please create a detailed execution plan with all necessary steps, proper dependencies, and real AWS API calls where needed.` return prompt } // Comprehensive EC2 Infrastructure func comprehensiveEC2Prompt() string { prompt := `Create an EC2 for hosting an Apache Server with a dedicated security group that allows inbound HTTP (port 80) and SSH (port 22) traffic.` return prompt } // Comprehensive VPC with EC2 Infrastructure func comprehensiveVPCwithEC2Prompt() string { prompt := `Create a production VPC with a CIDR block of 10.0.0.0/16 across two availability zones. Set up public subnets (10.0.1.0/24 and 10.0.2.0/24) for internet-facing load balancers. Create private subnets for application servers (10.0.11.0/24 and 10.0.12.0/24): Configure Internet Gateway and NAT Gateway for proper routing. Create an EC2 for hosting an Apache Server with a dedicated security group that allows inbound HTTP (port 80) and SSH (port 22) traffic in public subnets.` return prompt } // Comprehensive EC2 Infrastructure func comprehensiveEC2withALBPrompt() string { prompt := `I need to deploy a web application infrastructure on AWS with the following requirements: - Create an EC2 for hosting an Apache Server with a dedicated security group that allows inbound HTTP (port 80) and SSH (port 22) traffic. - Create an Application Load Balancer across public subnets in front of the EC2 instance with a security group that allows inbound HTTP (port 80) traffic from the internet.` return prompt } // Comprehensive Three-Tier Infrastructure func comprehensiveThreeLayerPrompt() string { prompt := `I need to deploy a complete production-ready three-tier web application infrastructure on AWS with the following requirements: Network Foundation (Phase 1): - Create a production VPC with a CIDR block of 10.0.0.0/16 across two availability zones. - Set up public subnets (10.0.1.0/24 and 10.0.2.0/24) for internet-facing load balancers. - Create private subnets for application servers (10.0.11.0/24 and 10.0.12.0/24). - Set up dedicated database subnets (10.0.21.0/24 and 10.0.22.0/24) - Configure Internet Gateway and NAT Gateway for proper routing. Security Architecture (Phase 2): - Create defense-in-depth security with tiered security groups - Load balancer security group allowing HTTP/HTTPS from internet (0.0.0.0/0) - Application server security group accepting traffic only from load balancer - Database security group allowing MySQL (port 3306) only from application servers Load Balancer Tier (Phase 3): - Deploy Application Load Balancer across public subnets in both AZs - Configure target group with health checks on /health endpoint - Set up HTTP listener (port 80) with proper health check thresholds - Health check: 30s interval, 5s timeout, 2 healthy/3 unhealthy thresholds Auto Scaling Application Tier (Phase 4): - Create launch template with t3.medium instances - Use Amazon Linux 2 AMI with Apache/PHP web server - Configure user data script to install web server and health check endpoint - Set up Auto Scaling Group: min 2, max 10, desired 4 instances - Deploy across private application subnets in both AZs - Integrate with load balancer target group for automatic registration - Use ELB health checks with 300s grace period Database Infrastructure (Phase 5): - Create RDS MySQL 8.0 database with Multi-AZ deployment - Use db.t3.medium instance class with 100GB GP3 storage - Enable encryption at rest and Performance Insights - Configure automated backups: 7-day retention, 3-4 AM backup window - Set maintenance window: Sunday 4-5 AM - Deploy across database subnets in both AZs Additional Requirements: - Tag all resources with Environment=production, Application=three-tier-web-app - Use consistent naming convention with environment and tier identifiers - Ensure high availability across multiple availability zones - Follow AWS Well-Architected Framework principles - Configure proper resource dependencies and creation order Please deploy this complete infrastructure stack and provide me with the key resource IDs and endpoints once deployment is complete.` return prompt } // Comprehensive Serverless Infrastructure func comprehensiveServerlessPrompt() string { prompt := `Deploy a complete serverless application infrastructure on AWS with the following specifications: API Layer: - Create an API Gateway REST API with regional endpoint - Define resources and methods: GET /items, POST /items, GET /items/{id} - Enable CORS for all methods - Set up usage plan with throttling: 100 requests/second burst, 50 requests/second steady Compute Layer: - Create three Lambda functions in Node.js 20.x runtime - Function 1: listItems - GET all items from DynamoDB - Function 2: createItem - POST new item to DynamoDB - Function 3: getItem - GET single item by ID - Configure 128MB memory, 10s timeout for each - Use environment variables for DynamoDB table name - Integrate each function with corresponding API Gateway methods - Enable Lambda function URLs for testing Database Layer: - Provision DynamoDB table named 'Items' with partition key 'id' (string) - Add global secondary index on 'category' attribute - Set provisioned capacity: 5 read/write capacity units - Enable point-in-time recovery and auto-scaling (min 5, max 100) - Encrypt with AWS-managed KMS key Security and Authentication: - Create Cognito User Pool for user authentication - Add app client with OAuth flows enabled - Configure API Gateway authorizer using Cognito - Apply authorizer to all API methods except public GET /items Monitoring and Logging: - Enable X-Ray tracing for API Gateway and Lambda - Create CloudWatch Log Groups for each Lambda with 7-day retention - Set up CloudWatch alarms for Lambda errors (>0) and API 5xx errors (>1%) Additional Requirements: - Deploy in us-east-1 region - Tag all resources with Environment=production, Application=serverless-app - Ensure IAM roles follow least privilege: Lambda role with DynamoDB access only - Provide API endpoint and test commands after deployment Create a step-by-step execution plan including all AWS API calls, resource dependencies, and validation steps.` return prompt } // Comprehensive EKS Infrastructure func comprehensiveEKSPrompt() string { prompt := `Set up a production-ready Kubernetes cluster on AWS EKS with these requirements: Cluster Foundation: - Create EKS cluster version 1.30 in us-west-2 - Enable public and private endpoint access - Configure cluster logging: api, audit, authenticator, controllerManager, scheduler Networking: - Use existing VPC or create new with CIDR 10.100.0.0/16 - Public subnets: 10.100.1.0/24, 10.100.2.0/24 - Private subnets: 10.100.11.0/24, 10.100.12.0/24 - Ensure proper route tables and security groups for cluster communication Node Groups: - Managed node group with t3.medium instances - Min 2, max 10, desired 3 nodes - Use Amazon Linux 2 EKS-optimized AMI - Enable auto-scaling and cluster autoscaler - Add labels: role=worker Add-ons: - Install CoreDNS, kube-proxy, VPC CNI - Add EBS CSI driver for persistent storage - Deploy AWS Load Balancer Controller Security: - Create IAM roles for cluster and nodes with least privilege - Enable IRSA (IAM Roles for Service Accounts) - Configure security groups to allow only necessary ports Monitoring: - Enable EKS Control Plane logging to CloudWatch - Install Prometheus and Grafana for cluster monitoring - Set up alerts for node CPU >80% and pod evictions Deployment Validation: - Deploy sample nginx deployment and service (type LoadBalancer) - Verify external access to the service - Check cluster health and node status Provide a detailed plan with sequential steps, AWS CLI commands where applicable, and resource verification.` return prompt } // Comprehensive S3 with CloudFront Infrastructure func comprehensiveS3CloudFrontPrompt() string { prompt := `Build a global static website hosting infrastructure on AWS: Storage Layer: - Create S3 bucket for website assets in us-east-1 - Enable versioning and server-side encryption (SSE-S3) - Set bucket policy for public read access - Upload sample index.html and error.html Distribution Layer: - Create CloudFront distribution with S3 as origin - Configure default root object: index.html - Enable HTTP/2 and IPv6 - Set price class: Use All Edge Locations - Configure error pages: 404 -> error.html (HTTP 200) Security: - Create Origin Access Control (OAC) for S3 - Update S3 bucket policy to allow only CloudFront - Enable WAF web ACL with AWS managed rules for common exploits Domain and SSL: - Assume domain example.com in Route 53 - Create ACM certificate for *.example.com - Configure CloudFront alternate domain names - Set up Route 53 A record alias to CloudFront Logging and Monitoring: - Enable CloudFront standard logging to S3 - Create CloudWatch alarms for BytesDownloaded > threshold - Set S3 access logging Additional Features: - Enable compression for text/* MIME types - Set cache behavior: TTL min 0, default 1 day, max 1 year - Add geo-restriction whitelist: US, CA Deploy the infrastructure and provide the CloudFront domain name, S3 bucket name, and test URLs.` return prompt } // Comprehensive ECS Infrastructure func comprehensiveECSPrompt() string { prompt := `Deploy a containerized application on AWS ECS with Fargate: Cluster Setup: - Create ECS cluster in us-east-1 - Enable Container Insights for monitoring Networking: - Use VPC with public and private subnets across 2 AZs - CIDR: 10.20.0.0/16 - Public: 10.20.1.0/24, 10.20.2.0/24 - Private: 10.20.11.0/24, 10.20.12.0/24 - Internet Gateway and NAT for outbound Task Definition: - Fargate launch type - Task: 0.5 vCPU, 1GB memory - Container: nginx:latest, port 80 - Add environment variables if needed - Enable AWS Logs driver Service: - Create ECS service with 2 desired tasks - Deploy in private subnets - Enable auto-scaling: min 2, max 10, CPU target 70% - Integrate with Application Load Balancer Load Balancer: - Internet-facing ALB in public subnets - HTTP listener port 80 - Target group with health check on / - Security group: allow 80 from 0.0.0.0/0 Database (Optional Integration): - RDS PostgreSQL in private subnets - Allow access from ECS security group on port 5432 Security: - ECS task role with S3 read access (if needed) - Security groups with least privilege Validation: - Verify service is running and accessible via ALB - Scale tasks and check auto-scaling Provide execution plan with all steps, dependencies, and final endpoints.` return prompt } // Comprehensive Monitoring and Logging Infrastructure func comprehensiveMonitoringPrompt() string { prompt := `Set up comprehensive monitoring and logging for an existing AWS infrastructure: Core Services: - Enable CloudWatch for all supported resources - Create CloudTrail trail for management events, multi-region - Configure S3 bucket for CloudTrail logs with lifecycle policy (30 days to Glacier) Alarms and Dashboards: - Create CloudWatch alarms: - EC2 CPU >80% for 5 minutes - ALB 5xx errors >5 in 1 minute - RDS free storage <20% - Build CloudWatch dashboard with widgets for CPU, network, errors Logging: - Set up centralized logging with CloudWatch Logs - Create log groups for EC2, Lambda, ECS with 14-day retention - Enable VPC Flow Logs to CloudWatch Logs group Advanced Monitoring: - Enable X-Ray for application tracing (API Gateway, Lambda, ECS) - Set up Synthetics canaries for endpoint monitoring (every 5 min) - Configure EventBridge rules for critical events (e.g., instance termination) Notifications: - Create SNS topic for alarms - Subscribe email endpoint - Integrate with alarms for notifications Security Monitoring: - Enable GuardDuty for threat detection - Configure Config rules for compliance (e.g., encrypted volumes) - Set up Security Hub with CIS benchmarks Deploy in us-west-2, tag resources with Monitoring=true, and provide dashboard URL and alarm names.` return prompt } // === Test Suites === // TestComprehensiveExecutionPipeline tests all aspects of the execution pipeline func TestComprehensiveExecutionPipeline(t *testing.T) { t.Run("RealAIWithComprehensiveEC2Prompt", func(t *testing.T) { testRealAIWithComprehensiveEC2Prompt(t) }) t.Run("RealAIWithComprehensiveVPCPrompt", func(t *testing.T) { testRealAIWithComprehensiveVPCPrompt(t) }) t.Run("RealAIWithComprehensiveVPCwithEC2Prompt", func(t *testing.T) { testRealAIWithComprehensiveVPCwithEC2Prompt(t) }) t.Run("RealAIWithComprehensiveThreeLayerPrompt", func(t *testing.T) { testRealAIWithComprehensiveThreeLayerPrompt(t) }) // == State Handling Test == t.Run("RealAIWithRealStateEC2AndALBPrompt", func(t *testing.T) { testRealAIWithRealStateEC2AndALBPrompt(t) }) } func testRealAIWithComprehensiveEC2Prompt(t *testing.T) { // Comprehensive VPC infrastructure prompt comprehensivePrompt := comprehensiveEC2Prompt() // Setup test configuration cfg, err := setupRealConfiguration() if err != nil { t.Fatalf("Failed to setup real configuration: %v", err) } // Setup real LLM client llmClient, err := setupRealLLMClient(cfg) if err != nil { t.Fatalf("Failed to setup real LLM client: %v", err) } // Setup test agent with real AI and comprehensive mock infrastructure agent, mockSuite, err := setupAgentWithRealAI(cfg, llmClient) if err != nil { t.Fatalf("Failed to setup test agent: %v", err) } // defer mockSuite.Reset() // Create decision context using mock state manager emptyState := &types.InfrastructureState{ Resources: make(map[string]*types.ResourceState), } decisionContext := &DecisionContext{ Request: comprehensivePrompt, CurrentState: emptyState, DiscoveredState: []*types.ResourceState{}, Conflicts: []*types.ConflictResolution{}, DeploymentOrder: []string{}, ResourceCorrelation: make(map[string]*ResourceMatch), } t.Logf("🚀 Starting comprehensive execution pipeline test with real AI integration and mock infrastructure...") // Step 1: Test AI Decision Making t.Logf("📡 Step 1: Making real AI API call to process comprehensive infrastructure request...") ctx, cancel := context.WithTimeout(context.Background(), time.Minute*3) defer cancel() decisionID := "test-comprehensive-decision" decision, err := agent.generateDecisionWithPlan(ctx, decisionID, comprehensivePrompt, decisionContext) if err != nil { t.Fatalf("❌ Real AI API call failed: %v", err) } t.Logf("✅ Step 1 Complete: AI generated decision with %d execution steps", len(decision.ExecutionPlan)) // Step 2: Validate AI-Generated Plan Structure t.Logf("🔍 Step 2: Validating AI-generated execution plan structure...") validateExecutionPlanStructure(t, agent, decision) t.Logf("✅ Step 2 Complete: Execution plan structure is valid") // Step 3: Execute Full Flow with Mock Infrastructure t.Logf("⚙️ Step 3: Executing full infrastructure plan using mock functions...") testExecuteFullPlanWithMocks(t, agent, mockSuite, decision) t.Logf("✅ Step 3 Complete: Full plan execution completed successfully") // Step 4: Validate Mock Integration t.Logf("🔬 Step 4: Validating mock infrastructure integration...") testValidateMockIntegration(t, mockSuite, decision) t.Logf("✅ Step 4 Complete: Mock integration validated") t.Logf("🎉 All tests completed successfully! AI + Mock infrastructure integration validated.") } func testRealAIWithComprehensiveVPCPrompt(t *testing.T) { // Comprehensive VPC infrastructure prompt comprehensivePrompt := comprehensiveVPCPrompt() // Setup test configuration cfg, err := setupRealConfiguration() if err != nil { t.Fatalf("Failed to setup real configuration: %v", err) } // Setup real LLM client llmClient, err := setupRealLLMClient(cfg) if err != nil { t.Fatalf("Failed to setup real LLM client: %v", err) } // Setup test agent with real AI and comprehensive mock infrastructure agent, mockSuite, err := setupAgentWithRealAI(cfg, llmClient) if err != nil { t.Fatalf("Failed to setup test agent: %v", err) } // defer mockSuite.Reset() // Create decision context using mock state manager emptyState := &types.InfrastructureState{ Resources: make(map[string]*types.ResourceState), } decisionContext := &DecisionContext{ Request: comprehensivePrompt, CurrentState: emptyState, DiscoveredState: []*types.ResourceState{}, Conflicts: []*types.ConflictResolution{}, DeploymentOrder: []string{}, ResourceCorrelation: make(map[string]*ResourceMatch), } t.Logf("🚀 Starting comprehensive execution pipeline test with real AI integration and mock infrastructure...") // Step 1: Test AI Decision Making t.Logf("📡 Step 1: Making real AI API call to process comprehensive infrastructure request...") ctx, cancel := context.WithTimeout(context.Background(), time.Minute*3) defer cancel() decisionID := "test-comprehensive-decision" decision, err := agent.generateDecisionWithPlan(ctx, decisionID, comprehensivePrompt, decisionContext) if err != nil { t.Fatalf("❌ Real AI API call failed: %v", err) } t.Logf("✅ Step 1 Complete: AI generated decision with %d execution steps", len(decision.ExecutionPlan)) // Step 2: Validate AI-Generated Plan Structure t.Logf("🔍 Step 2: Validating AI-generated execution plan structure...") validateExecutionPlanStructure(t, agent, decision) t.Logf("✅ Step 2 Complete: Execution plan structure is valid") // Step 3: Execute Full Flow with Mock Infrastructure t.Logf("⚙️ Step 3: Executing full infrastructure plan using mock functions...") testExecuteFullPlanWithMocks(t, agent, mockSuite, decision) t.Logf("✅ Step 3 Complete: Full plan execution completed successfully") // Step 4: Validate Mock Integration t.Logf("🔬 Step 4: Validating mock infrastructure integration...") testValidateMockIntegration(t, mockSuite, decision) t.Logf("✅ Step 4 Complete: Mock integration validated") t.Logf("🎉 All tests completed successfully! AI + Mock infrastructure integration validated.") } func testRealAIWithComprehensiveVPCwithEC2Prompt(t *testing.T) { // Comprehensive VPC infrastructure prompt comprehensivePrompt := comprehensiveVPCwithEC2Prompt() // Setup test configuration cfg, err := setupRealConfiguration() if err != nil { t.Fatalf("Failed to setup real configuration: %v", err) } // Setup real LLM client llmClient, err := setupRealLLMClient(cfg) if err != nil { t.Fatalf("Failed to setup real LLM client: %v", err) } // Setup test agent with real AI and comprehensive mock infrastructure agent, mockSuite, err := setupAgentWithRealAI(cfg, llmClient) if err != nil { t.Fatalf("Failed to setup test agent: %v", err) } // defer mockSuite.Reset() // Create decision context using mock state manager emptyState := &types.InfrastructureState{ Resources: make(map[string]*types.ResourceState), } decisionContext := &DecisionContext{ Request: comprehensivePrompt, CurrentState: emptyState, DiscoveredState: []*types.ResourceState{}, Conflicts: []*types.ConflictResolution{}, DeploymentOrder: []string{}, ResourceCorrelation: make(map[string]*ResourceMatch), } t.Logf("🚀 Starting comprehensive execution pipeline test with real AI integration and mock infrastructure...") // Step 1: Test AI Decision Making t.Logf("📡 Step 1: Making real AI API call to process comprehensive infrastructure request...") ctx, cancel := context.WithTimeout(context.Background(), time.Minute*3) defer cancel() decisionID := "test-comprehensive-decision" decision, err := agent.generateDecisionWithPlan(ctx, decisionID, comprehensivePrompt, decisionContext) if err != nil { t.Fatalf("❌ Real AI API call failed: %v", err) } t.Logf("✅ Step 1 Complete: AI generated decision with %d execution steps", len(decision.ExecutionPlan)) // Step 2: Validate AI-Generated Plan Structure t.Logf("🔍 Step 2: Validating AI-generated execution plan structure...") validateExecutionPlanStructure(t, agent, decision) t.Logf("✅ Step 2 Complete: Execution plan structure is valid") // Step 3: Enhanced Pre-Execution Validation t.Logf("🔬 Step 3: Enhanced pre-execution validation...") testEnhancedPreExecutionValidation(t, agent, mockSuite, decision) t.Logf("✅ Step 3 Complete: Pre-execution validation passed") // Step 4: Execute Full Flow with Mock Infrastructure t.Logf("⚙️ Step 4: Executing full infrastructure plan using mock functions...") testExecuteFullPlanWithMocks(t, agent, mockSuite, decision) t.Logf("✅ Step 4 Complete: Full plan execution completed successfully") // Step 5: Enhanced Post-Execution Validation t.Logf("🔍 Step 5: Enhanced post-execution validation...") testEnhancedPostExecutionValidation(t, agent, mockSuite, decision) t.Logf("✅ Step 5 Complete: Post-execution validation passed") // Step 6: Error Scenario Testing t.Logf("🚨 Step 6: Testing error scenarios...") testErrorScenarios(t, agent, mockSuite, decision) t.Logf("✅ Step 6 Complete: Error scenarios tested") // Step 7: Infrastructure Reality Checks t.Logf("🏗️ Step 7: Running infrastructure reality checks...") testInfrastructureRealityCheck(t, agent, mockSuite, decision) t.Logf("✅ Step 7 Complete: Infrastructure reality checks passed") // Step 8: Web UI Flow Simulation t.Logf("🌐 Step 8: Simulating Web UI flow...") testWebUIFlowSimulation(t, agent, mockSuite, decision) t.Logf("✅ Step 8 Complete: Web UI flow simulation passed") // Step 9: Validate Mock Integration t.Logf("🔬 Step 9: Validating mock infrastructure integration...") testValidateMockIntegration(t, mockSuite, decision) t.Logf("✅ Step 9 Complete: Mock integration validated") t.Logf("🎉 All tests completed successfully! Enhanced AI + Mock infrastructure integration validated.") } // === Test Function for EC2 with ALB Prompt with State Handling === func testRealAIWithRealStateEC2AndALBPrompt(t *testing.T) { // EC2 with ALB infrastructure prompt comprehensivePrompt := comprehensiveEC2withALBPrompt() // Setup test configuration cfg, err := setupRealConfiguration() if err != nil { t.Fatalf("Failed to setup real configuration: %v", err) } // Setup real LLM client llmClient, err := setupRealLLMClient(cfg) if err != nil { t.Fatalf("Failed to setup real LLM client: %v", err) } // Setup test agent with real AI and comprehensive mock infrastructure agent, mockSuite, err := setupAgentWithRealAI(cfg, llmClient) if err != nil { t.Fatalf("Failed to setup test agent: %v", err) } // Load existing infrastructure state from sample file t.Logf("📋 Loading existing infrastructure state from states/infrastructure-state-t01.json...") existingState, err := loadInfrastructureStateFromFile("states/infrastructure-state-t01.json") if err != nil { // If state file doesn't exist or can't be loaded, use empty state t.Fatalf("⚠️ Could not load existing state file (%v), using empty state for test", err) } else { t.Logf("✅ Successfully loaded existing state with %d resources", len(existingState.Resources)) // Log some of the existing resources to verify proper loading resourceCount := 0 for resourceID, resource := range existingState.Resources { if resourceCount < 3 { // Only log first 3 for brevity t.Logf("📦 Existing resource: %s (type: %s, status: %s)", resourceID, resource.Type, resource.Status) } resourceCount++ } if resourceCount > 3 { t.Logf("📦 ... and %d more existing resources", resourceCount-3) } // Load the state into mock infrastructure and populate resource mappings t.Logf("🔄 Loading state into mock infrastructure for dependency resolution...") if err := mockSuite.LoadExistingState(existingState.Resources, agent); err != nil { t.Fatalf("❌ Failed to load state into mock infrastructure: %v", err) } t.Logf("✅ State loaded into mock infrastructure with %d resource mappings", len(mockSuite.ResourceMappings)) } // Create decision context using the loaded state - this is key for testing state handling decisionContext := &DecisionContext{ Request: comprehensivePrompt, CurrentState: existingState, // Pass the loaded state here DiscoveredState: []*types.ResourceState{}, Conflicts: []*types.ConflictResolution{}, DeploymentOrder: []string{}, ResourceCorrelation: make(map[string]*ResourceMatch), } t.Logf("🚀 Starting comprehensive EC2 with ALB test with real AI and existing state context...") // Step 1: Test AI Decision Making with Existing State Context t.Logf("📡 Step 1: Making real AI API call with existing state context for EC2+ALB infrastructure...") ctx, cancel := context.WithTimeout(context.Background(), time.Minute*3) defer cancel() decisionID := "test-ec2-alb-decision-with-state" decision, err := agent.generateDecisionWithPlan(ctx, decisionID, comprehensivePrompt, decisionContext) if err != nil { t.Fatalf("❌ Real AI API call failed: %v", err) } t.Logf("✅ Step 1 Complete: AI generated decision with %d execution steps (with state context)", len(decision.ExecutionPlan)) // Log decision summary for verification t.Logf("📝 Decision Action: %s", decision.Action) t.Logf("🧠 Decision Reasoning: %s", decision.Reasoning) if decision.Resource != "" { t.Logf("📦 Primary Resource: %s", decision.Resource) } // Step 2: Validate AI-Generated Plan Structure for EC2+ALB t.Logf("🔍 Step 2: Validating AI-generated execution plan for EC2+ALB infrastructure...") validateExecutionPlanStructureForEC2ALB(t, decision, existingState) t.Logf("✅ Step 2 Complete: Execution plan structure validated for EC2+ALB") // Step 3: Test State-Aware Planning Logic t.Logf("🧠 Step 3: Testing AI state-aware planning logic...") testStateAwarePlanningLogic(t, decision, existingState, comprehensivePrompt) t.Logf("✅ Step 3 Complete: State-aware planning logic validated") // Step 4: Execute Full Flow with Mock Infrastructure t.Logf("⚙️ Step 4: Executing full EC2+ALB plan using mock functions...") testExecuteFullPlanWithMocks(t, agent, mockSuite, decision) t.Logf("✅ Step 4 Complete: Full plan execution completed successfully") // Step 5: Validate Mock Integration t.Logf("🔬 Step 5: Validating mock infrastructure integration...") testValidateMockIntegration(t, mockSuite, decision) t.Logf("✅ Step 5 Complete: Mock integration validated") // Step 6: Test Idempotency and State Consistency t.Logf("🔄 Step 6: Testing idempotency with existing state...") testIdempotencyWithExistingState(t, agent, mockSuite, decisionContext, comprehensivePrompt) t.Logf("✅ Step 6 Complete: Idempotency and state consistency validated") t.Logf("🎉 All EC2+ALB with state handling tests completed successfully!") } // === Helper Function === // loadInfrastructureStateFromFile loads an existing infrastructure state from a JSON file func loadInfrastructureStateFromFile(filePath string) (*types.InfrastructureState, error) { dir, _ := os.Getwd() // Navigate to project root by looking for go.mod file for { if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { break } parent := filepath.Dir(dir) if parent == dir { // Reached root directory, use current dir break } dir = parent } // Read state file data, err := os.ReadFile(filepath.Join(dir, filePath)) if err != nil { return nil, fmt.Errorf("failed to read state file %s: %w", filePath, err) } // Parse state var state types.InfrastructureState if err := json.Unmarshal(data, &state); err != nil { return nil, fmt.Errorf("failed to parse state file %s: %w", filePath, err) } return &state, nil } // validateExecutionPlanStructureForEC2ALB validates the plan structure specifically for EC2+ALB resources func validateExecutionPlanStructureForEC2ALB(t *testing.T, decision *types.AgentDecision, existingState *types.InfrastructureState) { if len(decision.ExecutionPlan) == 0 { t.Fatal("❌ AI generated empty execution plan") } // Validate basic plan structure planValidActions := map[string]bool{ "create": true, "query": true, // "update": true, // "delete": true, // "validate": true, } for _, planStep := range decision.ExecutionPlan { if !planValidActions[planStep.Action] { t.Fatalf("❌ Invalid plan action: %s", planStep.Action) } } // Check for EC2+ALB specific components foundComponents := make(map[string]bool) expectedEC2ALBComponents := []string{"ec2", "security", "load", "balancer", "target", "group"} for _, step := range decision.ExecutionPlan { // Check basic step structure if step.ID == "" { t.Errorf("❌ Step missing ID: %+v", step) } if step.Name == "" { t.Errorf("❌ Step missing Name: %+v", step) } if step.Action == "" { t.Errorf("❌ Step missing Action: %+v", step) } // Check for expected EC2+ALB components stepText := step.Name + " " + step.Description + " " + step.ResourceID for _, component := range expectedEC2ALBComponents { if strings.Contains(strings.ToLower(stepText), strings.ToLower(component)) { foundComponents[component] = true } } t.Logf("📋 Step: %s | Action: %s | Resource: %s", step.Name, step.Action, step.ResourceID) } // Verify we found key EC2+ALB components missingComponents := []string{} for _, component := range expectedEC2ALBComponents { if !foundComponents[component] { missingComponents = append(missingComponents, component) } } if len(missingComponents) > 0 { t.Logf("⚠️ Warning: Some expected EC2+ALB components not found in plan: %v", missingComponents) t.Logf("📝 This may be acceptable if AI structured the plan differently") } // Log analysis of existing state impact if len(existingState.Resources) > 0 { t.Logf("🔍 Plan generated with %d existing resources in context", len(existingState.Resources)) } else { t.Logf("🔍 Plan generated with empty state context") } } // testStateAwarePlanningLogic validates that the AI properly considered existing state func testStateAwarePlanningLogic(t *testing.T, decision *types.AgentDecision, existingState *types.InfrastructureState, prompt string) { // Check if AI decision mentions handling existing resources decisionText := decision.Reasoning + " " + decision.Action if len(existingState.Resources) > 0 { // AI should show awareness of existing infrastructure hasStateAwareness := strings.Contains(strings.ToLower(decisionText), "existing") || strings.Contains(strings.ToLower(decisionText), "current") || strings.Contains(strings.ToLower(decisionText), "already") || strings.Contains(strings.ToLower(decisionText), "present") if hasStateAwareness { t.Logf("✅ AI demonstrated awareness of existing infrastructure state") } else { t.Logf("⚠️ AI may not have explicitly mentioned existing state (this could still be acceptable)") } } // Check that the plan is reasonable given the prompt requirements promptLower := strings.ToLower(prompt) requiresEC2 := strings.Contains(promptLower, "ec2") requiresALB := strings.Contains(promptLower, "load balancer") || strings.Contains(promptLower, "alb") if requiresEC2 { hasEC2Plan := false for _, step := range decision.ExecutionPlan { stepText := strings.ToLower(step.Name + " " + step.Description) if strings.Contains(stepText, "ec2") || strings.Contains(stepText, "instance") { hasEC2Plan = true break } } if hasEC2Plan { t.Logf("✅ Plan includes EC2 components as required") } else { t.Logf("⚠️ Plan may not include explicit EC2 components") } } if requiresALB { hasALBPlan := false for _, step := range decision.ExecutionPlan { stepText := strings.ToLower(step.Name + " " + step.Description) if strings.Contains(stepText, "load") || strings.Contains(stepText, "balancer") || strings.Contains(stepText, "alb") { hasALBPlan = true break } } if hasALBPlan { t.Logf("✅ Plan includes ALB components as required") } else { t.Logf("⚠️ Plan may not include explicit ALB components") } } } // testIdempotencyWithExistingState tests that the AI handles idempotency correctly func testIdempotencyWithExistingState(t *testing.T, agent *StateAwareAgent, mockSuite *mocks.MockTestSuite, decisionContext *DecisionContext, prompt string) { t.Logf("🔄 Testing idempotency by running the same request again...") // Execute the same request again to test idempotency ctx, cancel := context.WithTimeout(context.Background(), time.Minute*2) defer cancel() secondDecisionID := "test-idempotency-decision" secondDecision, err := agent.generateDecisionWithPlan(ctx, secondDecisionID, prompt, decisionContext) if err != nil { t.Errorf("❌ Second AI API call for idempotency test failed: %v", err) return } // Compare decisions to check for consistency t.Logf("🔍 Comparing decisions for consistency...") t.Logf("📊 First decision had %d steps", len(decisionContext.CurrentState.Resources)) t.Logf("📊 Second decision has %d steps", len(secondDecision.ExecutionPlan)) // The AI should potentially recognize that resources may already exist // or provide a plan that handles the existing state appropriately if len(secondDecision.ExecutionPlan) == 0 { t.Logf("✅ AI recognized no additional changes needed (perfect idempotency)") } else { t.Logf("📝 AI generated %d steps for the repeat request", len(secondDecision.ExecutionPlan)) t.Logf("📝 This may indicate the AI is planning to create/update resources appropriately") } // Log the reasoning for the second decision if secondDecision.Reasoning != "" { t.Logf("🧠 AI reasoning for repeat request: %s", secondDecision.Reasoning) } } // testInfrastructureRealityCheck performs reality checks that simulate issues seen in actual AWS deployments func testInfrastructureRealityCheck(t *testing.T, agent *StateAwareAgent, mockSuite *mocks.MockTestSuite, decision *types.AgentDecision) { t.Logf("🏗️ Running infrastructure reality checks...") // Reality Check 1: VPC CIDR Block Validation t.Logf("🔍 Reality Check 1: VPC CIDR validation...") for _, step := range decision.ExecutionPlan { if step.Action == "create" && strings.Contains(strings.ToLower(step.Name), "vpc") { if cidr, exists := step.Parameters["cidrBlock"]; exists { if cidrStr, ok := cidr.(string); ok { if !isValidCIDR(cidrStr) { t.Errorf("❌ Invalid CIDR block in step %s: %s", step.ID, cidrStr) } } } } } // Reality Check 2: Subnet CIDR Overlap Detection t.Logf("🔍 Reality Check 2: Subnet CIDR overlap detection...") subnetCIDRs := make(map[string]string) for _, step := range decision.ExecutionPlan { if step.Action == "create" && strings.Contains(strings.ToLower(step.Name), "subnet") { if cidr, exists := step.Parameters["cidrBlock"]; exists { if cidrStr, ok := cidr.(string); ok { if existingStep, exists := subnetCIDRs[cidrStr]; exists { t.Errorf("❌ CIDR overlap detected: Step %s and %s both use %s", step.ID, existingStep, cidrStr) } subnetCIDRs[cidrStr] = step.ID } } } } // Reality Check 3: Availability Zone Distribution t.Logf("🔍 Reality Check 3: Availability zone distribution...") azUsage := make(map[string]int) for _, step := range decision.ExecutionPlan { if step.Action == "create" && strings.Contains(strings.ToLower(step.Name), "subnet") { if az, exists := step.Parameters["availabilityZone"]; exists { if azStr, ok := az.(string); ok { azUsage[azStr]++ } } } } if len(azUsage) < 2 { t.Logf("⚠️ Warning: Infrastructure should use multiple AZs for high availability") } // Reality Check 4: Security Group Rule Validation t.Logf("🔍 Reality Check 4: Security group rule validation...") for _, step := range decision.ExecutionPlan { if step.Action == "create" && strings.Contains(strings.ToLower(step.Name), "security") { if cidrIp, exists := step.Parameters["cidrIp"]; exists { if cidrIp == "0.0.0.0/0" { t.Logf("⚠️ Security Warning: Step %s allows access from anywhere (0.0.0.0/0)", step.ID) } } } } // Reality Check 5: Resource Naming Consistency t.Logf("🔍 Reality Check 5: Resource naming consistency...") namePatterns := make(map[string]int) for _, step := range decision.ExecutionPlan { if tags, exists := step.Parameters["tags"]; exists { if tagMap, ok := tags.(map[string]interface{}); ok { if name, exists := tagMap["Name"]; exists { if nameStr, ok := name.(string); ok { // Extract naming pattern parts := strings.Split(nameStr, "-") if len(parts) > 1 { pattern := parts[0] // e.g., "production" from "production-vpc" namePatterns[pattern]++ } } } } } } if len(namePatterns) > 1 { t.Logf("⚠️ Warning: Multiple naming patterns detected: %v", namePatterns) } t.Logf("✅ Infrastructure reality checks completed") } // isValidCIDR performs basic CIDR validation func isValidCIDR(cidr string) bool { // Basic validation - in real implementation would use net.ParseCIDR if !strings.Contains(cidr, "/") { return false } parts := strings.Split(cidr, "/") if len(parts) != 2 { return false } // Check for common valid patterns validPatterns := []string{ "10.", "172.", "192.168.", "0.0.0.0"} // Private IP ranges + default route for _, pattern := range validPatterns { if strings.HasPrefix(parts[0], pattern) { return true } } return false } // testWebUIFlowSimulation simulates the exact flow that would happen in the web UI func testWebUIFlowSimulation(t *testing.T, agent *StateAwareAgent, mockSuite *mocks.MockTestSuite, decision *types.AgentDecision) { t.Logf("🌐 Running Web UI flow simulation...") // Simulate Web UI Step 1: Process Request (already done in main test) t.Logf("✅ Step 1: Process Request - Already completed") // Simulate Web UI Step 2: Plan Validation (user reviews plan) t.Logf("🔍 Step 2: Simulating plan review and validation...") // Check if plan has reasonable number of steps (not too many, not too few) if len(decision.ExecutionPlan) < 5 { t.Logf("⚠️ Warning: Plan has very few steps (%d) - might be incomplete", len(decision.ExecutionPlan)) } if len(decision.ExecutionPlan) > 50 { t.Logf("⚠️ Warning: Plan has many steps (%d) - might be overly complex", len(decision.ExecutionPlan)) } // Simulate Web UI Step 3: Execution with progress updates t.Logf("⚙️ Step 3: Simulating execution with WebSocket progress updates...") // Create a channel to simulate WebSocket updates progressChan := make(chan *types.ExecutionUpdate, 100) defer close(progressChan) // Start a goroutine to consume progress updates (like WebSocket would) go func() { updateCount := 0 for update := range progressChan { updateCount++ if updateCount <= 5 { // Log first few updates to avoid spam t.Logf("📡 Progress Update %d: %s - %s", updateCount, update.Type, update.Message) } } t.Logf("📡 Total progress updates received: %d", updateCount) }() // Simulate execution with progress reporting ctx := context.Background() execution, err := agent.ExecuteConfirmedPlanWithDryRun(ctx, decision, progressChan, true) // dry run if err != nil { t.Errorf("❌ Simulated execution failed: %v", err) return } if execution.Status != "completed" { t.Errorf("❌ Execution did not complete successfully: %s", execution.Status) } // Simulate Web UI Step 4: Post-execution state verification t.Logf("🔍 Step 4: Simulating post-execution state verification...") // This would be called by the web UI to refresh the dashboard ctx2 := context.Background() _, err = mockSuite.MCPServer.CallTool(ctx2, "analyze-infrastructure-state", map[string]interface{}{ "include_drift_detection": true, "detailed_analysis": true, }) if err != nil { t.Errorf("❌ Post-execution state analysis failed: %v", err) } t.Logf("✅ Web UI flow simulation completed successfully") } func testRealAIWithComprehensiveThreeLayerPrompt(t *testing.T) { // Comprehensive Three-Tier infrastructure prompt comprehensivePrompt := comprehensiveThreeLayerPrompt() // Setup test configuration cfg, err := setupRealConfiguration() if err != nil { t.Fatalf("Failed to setup real configuration: %v", err) } // Setup real LLM client llmClient, err := setupRealLLMClient(cfg) if err != nil { t.Fatalf("Failed to setup real LLM client: %v", err) } // Setup test agent with real AI and comprehensive mock infrastructure agent, mockSuite, err := setupAgentWithRealAI(cfg, llmClient) if err != nil { t.Fatalf("Failed to setup test agent: %v", err) } // defer mockSuite.Reset() // Create decision context using mock state manager emptyState := &types.InfrastructureState{ Resources: make(map[string]*types.ResourceState), } decisionContext := &DecisionContext{ Request: comprehensivePrompt, CurrentState: emptyState, DiscoveredState: []*types.ResourceState{}, Conflicts: []*types.ConflictResolution{}, DeploymentOrder: []string{}, ResourceCorrelation: make(map[string]*ResourceMatch), } t.Logf("🚀 Starting comprehensive three-tier execution pipeline test with real AI integration and mock infrastructure...") // Step 1: Test AI Decision Making t.Logf("📡 Step 1: Making real AI API call to process comprehensive three-tier infrastructure request...") ctx, cancel := context.WithTimeout(context.Background(), time.Minute*5) // Extended timeout for complex infrastructure defer cancel() decisionID := "test-comprehensive-three-tier-decision" decision, err := agent.generateDecisionWithPlan(ctx, decisionID, comprehensivePrompt, decisionContext) if err != nil { t.Fatalf("❌ Real AI API call failed: %v", err) } t.Logf("✅ Step 1 Complete: AI generated decision with %d execution steps", len(decision.ExecutionPlan)) // Step 2: Validate AI-Generated Plan Structure t.Logf("🔍 Step 2: Validating AI-generated execution plan structure...") validateExecutionPlanStructure(t, agent, decision) t.Logf("✅ Step 2 Complete: Execution plan structure is valid") // Step 3: Execute Full Flow with Mock Infrastructure t.Logf("⚙️ Step 3: Executing full infrastructure plan using mock functions...") testExecuteFullPlanWithMocks(t, agent, mockSuite, decision) t.Logf("✅ Step 3 Complete: Full plan execution completed successfully") // Step 4: Validate Mock Integration t.Logf("🔬 Step 4: Validating mock infrastructure integration...") testValidateMockIntegration(t, mockSuite, decision) t.Logf("✅ Step 4 Complete: Mock integration validated") t.Logf("🎉 All tests completed successfully! Three-tier AI + Mock infrastructure integration validated.") } func validateExecutionPlanStructure(t *testing.T, agent *StateAwareAgent, decision *types.AgentDecision) { if len(decision.ExecutionPlan) == 0 { t.Fatal("❌ AI generated empty execution plan") } planValidActions := map[string]bool{ "create": true, "query": true, // "update": true, // "delete": true, // "validate": true, } // Get available MCP tools for validation agent.capabilityMutex.RLock() availableTools := make(map[string]bool) for toolName := range agent.mcpTools { availableTools[toolName] = true } agent.capabilityMutex.RUnlock() // Validate each plan step for i, planStep := range decision.ExecutionPlan { // Validate action type if !planValidActions[planStep.Action] { t.Fatalf("❌ Invalid plan action '%s' in step %d (%s)", planStep.Action, i+1, planStep.ID) } // Validate MCP tool exists if specified if planStep.MCPTool != "" { if !availableTools[planStep.MCPTool] { availableToolsList := make([]string, 0, len(availableTools)) for tool := range availableTools { availableToolsList = append(availableToolsList, tool) } t.Fatalf("❌ Invalid MCP tool '%s' in step %d (%s): tool not found in discovered capabilities. Available tools: %v", planStep.MCPTool, i+1, planStep.ID, availableToolsList) } } } // Validate plan has expected infrastructure components foundComponents := make(map[string]bool) expectedComponents := []string{"vpc", "subnet", "gateway", "route", "security"} for _, step := range decision.ExecutionPlan { // Check basic step structure if step.ID == "" { t.Errorf("❌ Step missing ID: %+v", step) } if step.Name == "" { t.Errorf("❌ Step missing Name: %+v", step) } if step.Action == "" { t.Errorf("❌ Step missing Action: %+v", step) } // Check for expected infrastructure components stepText := step.Name + " " + step.Description + " " + step.ResourceID for _, component := range expectedComponents { if strings.Contains(strings.ToLower(stepText), strings.ToLower(component)) { foundComponents[component] = true } } t.Logf("📋 Step: %s | Action: %s | Resource: %s", step.Name, step.Action, step.ResourceID) } // Verify we found key infrastructure components missingComponents := []string{} for _, component := range expectedComponents { if !foundComponents[component] { missingComponents = append(missingComponents, component) } } if len(missingComponents) > 0 { t.Logf("⚠️ Warning: Some expected components not found in plan: %v", missingComponents) t.Logf("📝 This may be okay if AI structured the plan differently") } } // testExecuteFullPlanWithMocks executes the AI-generated plan using mock infrastructure // This simulates the same flow as ExecuteConfirmedPlanWithDryRun but with mock tools func testExecuteFullPlanWithMocks(t *testing.T, agent *StateAwareAgent, mockSuite *mocks.MockTestSuite, decision *types.AgentDecision) { t.Logf("🚀 Executing %d plan steps with mock infrastructure...", len(decision.ExecutionPlan)) // Create mock execution tracking like the real ExecuteConfirmedPlanWithDryRun execution := &types.PlanExecution{ ID: "mock-execution-" + decision.ID, Name: fmt.Sprintf("Execute %s", decision.Action), Status: "running", StartedAt: time.Now(), Steps: []*types.ExecutionStep{}, Changes: []*types.ChangeDetection{}, Errors: []string{}, } t.Logf("📊 Created execution plan: ID=%s, Status=%s", execution.ID, execution.Status) // Execute each step like the real executeExecutionStep function for i, planStep := range decision.ExecutionPlan { t.Logf("⚙️ Step %d/%d: Executing %s action on %s", i+1, len(decision.ExecutionPlan), planStep.Action, planStep.ResourceID) startTime := time.Now() // Create execution step tracking (mirroring real executeExecutionStep) executionStep := &types.ExecutionStep{ ID: planStep.ID, Name: planStep.Name, Status: "running", Resource: planStep.ResourceID, Action: planStep.Action, StartedAt: &startTime, } // Execute step using mock infrastructure (mirroring the real action switch) var result map[string]interface{} var err error switch planStep.Action { case "create": result, err = agent.executeCreateAction(planStep, nil, execution.ID) case "update": result, err = testExecuteUpdateActionWithMocks(t, mockSuite, planStep) case "delete": result, err = testExecuteDeleteActionWithMocks(t, mockSuite, planStep) case "validate": result, err = testExecuteValidateActionWithMocks(t, mockSuite, planStep) case "query": result, err = agent.executeQueryAction(planStep, nil, execution.ID) default: err = fmt.Errorf("unknown action type: %s", planStep.Action) } // Complete step tracking (mirroring real execution) endTime := time.Now() executionStep.CompletedAt = &endTime executionStep.Duration = endTime.Sub(startTime) if err != nil { executionStep.Status = "failed" executionStep.Error = err.Error() execution.Errors = append(execution.Errors, err.Error()) // Check if this is a mock validation error that we can tolerate if strings.Contains(err.Error(), "invalid subnet ID format") || strings.Contains(err.Error(), "validation error for parameter") || strings.Contains(err.Error(), "mock MCP tool call failed") { t.Logf("⚠️ Step %d failed with mock validation error (expected): %v", i+1, err) } else { t.Errorf("❌ Step %d failed: %v", i+1, err) } } else { executionStep.Status = "completed" executionStep.Output = result t.Logf("✅ Step %d completed successfully in %v", i+1, executionStep.Duration) } execution.Steps = append(execution.Steps, executionStep) } // Complete execution tracking // completedAt := time.Now() // execution.CompletedAt = &completedAt // Count serious errors (non-mock validation errors) seriousErrorCount := 0 mockValidationErrorCount := 0 for _, errMsg := range execution.Errors { if strings.Contains(errMsg, "invalid subnet ID format") || strings.Contains(errMsg, "validation error for parameter") || strings.Contains(errMsg, "mock MCP tool call failed") { mockValidationErrorCount++ } else { seriousErrorCount++ } } if seriousErrorCount > 0 { execution.Status = "failed" t.Fatalf("❌ Execution completed with %d serious errors", seriousErrorCount) } else { execution.Status = "completed" if mockValidationErrorCount > 0 { t.Logf("✅ Execution completed successfully with %d steps (%d mock validation errors tolerated)", len(execution.Steps), mockValidationErrorCount) } else { t.Logf("✅ Execution completed successfully with %d steps", len(execution.Steps)) } } } // testExecuteUpdateActionWithMocks simulates update operations func testExecuteUpdateActionWithMocks(t *testing.T, mockSuite *mocks.MockTestSuite, planStep *types.ExecutionPlanStep) (map[string]interface{}, error) { t.Logf("🔄 Updating %s resource: %s", planStep.ResourceID, planStep.Name) // Mock update via state management testResource := &types.ResourceState{ ID: "mock-" + planStep.ResourceID, Type: planStep.ResourceID, Status: "updated", Properties: planStep.Parameters, } mockSuite.StateManager.AddResource(testResource) return map[string]interface{}{ "action": "update", "resource_id": testResource.ID, "status": "completed", }, nil } // testExecuteDeleteActionWithMocks simulates delete operations func testExecuteDeleteActionWithMocks(t *testing.T, mockSuite *mocks.MockTestSuite, planStep *types.ExecutionPlanStep) (map[string]interface{}, error) { t.Logf("🗑️ Deleting %s resource: %s", planStep.ResourceID, planStep.Name) return map[string]interface{}{ "action": "delete", "resource_id": "mock-" + planStep.ResourceID, "status": "completed", }, nil } // testExecuteValidateActionWithMocks simulates validation operations func testExecuteValidateActionWithMocks(t *testing.T, mockSuite *mocks.MockTestSuite, planStep *types.ExecutionPlanStep) (map[string]interface{}, error) { t.Logf("✅ Validating %s resource: %s", planStep.ResourceID, planStep.Name) return map[string]interface{}{ "action": "validate", "resource_id": "mock-" + planStep.ResourceID, "validation_result": "passed", }, nil } // testValidateMockIntegration validates that mock infrastructure components are working correctly func testValidateMockIntegration(t *testing.T, mockSuite *mocks.MockTestSuite, decision *types.AgentDecision) { t.Logf("🔍 Validating mock infrastructure integration...") // Test 1: Mock MCP Server Integration t.Logf("📡 Testing Mock MCP Server...") ctx := context.Background() testResult, err := mockSuite.MCPServer.CallTool(ctx, "describe_vpcs", map[string]interface{}{}) if err != nil { t.Errorf("❌ Mock MCP Server failed: %v", err) } else { t.Logf("✅ Mock MCP Server working: %v", testResult != nil) } // Test 2: Mock State Manager Integration t.Logf("💾 Testing Mock State Manager...") testResource := &types.ResourceState{ ID: "test-validation-resource", Type: "vpc", Status: "active", Properties: map[string]interface{}{ "cidr": "10.0.0.0/16", }, } mockSuite.StateManager.AddResource(testResource) // Verify resource was added resources := mockSuite.StateManager.GetResources() found := false for _, resource := range resources { if resource.ID == "test-validation-resource" { found = true break } } if !found { t.Error("❌ Mock State Manager failed to store resource") } else { t.Logf("✅ Mock State Manager working: stored %d resources", len(resources)) } // Test 3: Mock AWS Client Integration t.Logf("☁️ Testing Mock AWS Client...") mockSuite.AWSClient.AddDefaultTestData() // Just verify it doesn't panic - AWS client functionality is tested in its own unit tests t.Logf("✅ Mock AWS Client working") // Note: Retrieval registry tests removed - retrieval functions are deprecated // All resource queries now use MCP tools with "query" action t.Logf("✅ All mock integration tests passed!") } // testEnhancedPreExecutionValidation performs comprehensive validation before execution func testEnhancedPreExecutionValidation(t *testing.T, agent *StateAwareAgent, mockSuite *mocks.MockTestSuite, decision *types.AgentDecision) { t.Logf("🔍 Running enhanced pre-execution validation...") // Test 1: Validate Resource ID Uniqueness in Plan t.Logf("🔍 Test 1: Validating resource ID uniqueness...") resourceIDs := make(map[string]bool) for _, step := range decision.ExecutionPlan { if step.ResourceID == "" { t.Errorf("❌ Step %s has empty ResourceID", step.ID) continue } if resourceIDs[step.ResourceID] { t.Logf("⚠️ Warning: Duplicate ResourceID '%s' found in plan - this could cause state conflicts", step.ResourceID) } resourceIDs[step.ResourceID] = true } t.Logf("✅ Resource ID uniqueness check completed") // Test 2: Validate Dependency Resolution Logic t.Logf("🔍 Test 2: Validating dependency resolution...") for _, step := range decision.ExecutionPlan { // Check if step has dependency references if step.Parameters != nil { validateDependencyReferences(t, step, decision.ExecutionPlan) } } t.Logf("✅ Dependency resolution validation completed") // Test 3: Validate Parameter Completeness t.Logf("🔍 Test 3: Validating parameter completeness...") for _, step := range decision.ExecutionPlan { validateParameterCompleteness(t, step) } t.Logf("✅ Parameter completeness validation completed") // Test 4: Validate Tool Availability t.Logf("🔍 Test 4: Validating tool availability...") for _, step := range decision.ExecutionPlan { if step.Action == "create" && step.MCPTool != "" { // Simulate checking if tool exists in mock MCP server ctx := context.Background() _, err := mockSuite.MCPServer.CallTool(ctx, step.MCPTool, map[string]interface{}{}) if err != nil && !strings.Contains(err.Error(), "validation") { t.Errorf("❌ Tool '%s' not available in MCP server: %v", step.MCPTool, err) } } } t.Logf("✅ Tool availability validation completed") } // testEnhancedPostExecutionValidation performs comprehensive validation after execution func testEnhancedPostExecutionValidation(t *testing.T, agent *StateAwareAgent, mockSuite *mocks.MockTestSuite, decision *types.AgentDecision) { t.Logf("🔍 Running enhanced post-execution validation...") // Test 1: Validate State Consistency t.Logf("🔍 Test 1: Validating state consistency...") resources := mockSuite.StateManager.GetResources() // Create a map for quick lookup resourceMap := make(map[string]*types.ResourceState) for _, resource := range resources { resourceMap[resource.ID] = resource } // Check if all created resources are in state expectedResources := 0 for _, step := range decision.ExecutionPlan { if step.Action == "create" { expectedResources++ } } if len(resources) == 0 { t.Errorf("❌ No resources found in state after execution") } t.Logf("✅ Found %d resources in state (expected approximately %d)", len(resources), expectedResources) // Test 2: Validate Resource Dependencies in State t.Logf("🔍 Test 2: Validating resource dependencies in state...") for _, step := range decision.ExecutionPlan { if len(step.DependsOn) > 0 { // Verify dependencies exist in state for _, depID := range step.DependsOn { found := false for _, resource := range resources { if resource.ID == depID || strings.Contains(resource.ID, depID) { found = true break } } if !found { t.Logf("⚠️ Warning: Dependency '%s' for step '%s' not found in final state", depID, step.ID) } } } } t.Logf("✅ Resource dependency validation completed") // Test 3: Validate Resource Properties t.Logf("🔍 Test 3: Validating resource properties...") for _, resource := range resources { if resource.Type == "" { t.Errorf("❌ Resource %s has empty type", resource.ID) } if resource.Status == "" { t.Errorf("❌ Resource %s has empty status", resource.ID) } if resource.Properties == nil { t.Logf("⚠️ Warning: Resource %s has nil properties", resource.ID) } } t.Logf("✅ Resource properties validation completed") // Test 4: Simulate Web UI State Retrieval t.Logf("🔍 Test 4: Simulating web UI state retrieval...") ctx := context.Background() _, err := mockSuite.MCPServer.CallTool(ctx, "analyze-infrastructure-state", map[string]interface{}{ "include_drift_detection": true, "detailed_analysis": true, }) if err != nil { t.Errorf("❌ Failed to analyze infrastructure state: %v", err) } else { t.Logf("✅ Infrastructure state analysis successful") } } // testErrorScenarios tests various error scenarios that could occur in actual execution func testErrorScenarios(t *testing.T, agent *StateAwareAgent, mockSuite *mocks.MockTestSuite, decision *types.AgentDecision) { t.Logf("🚨 Running error scenario testing...") // Test 1: Simulate AWS API Errors t.Logf("🚨 Test 1: Simulating AWS API errors...") // Enable error simulation on mock client mockSuite.AWSClient.EnableErrorSimulation(0.3) // 30% error rate defer mockSuite.AWSClient.DisableErrorSimulation() // Try executing a simple step with error simulation if len(decision.ExecutionPlan) > 0 { firstStep := decision.ExecutionPlan[0] t.Logf("🚨 Testing error resilience with step: %s", firstStep.Name) // Create a mock execution context execution := &types.PlanExecution{ ID: "error-test-execution", Status: "running", Steps: []*types.ExecutionStep{}, } // Execute step with error simulation var result map[string]interface{} var err error if firstStep.Action == "create" { result, err = agent.executeCreateAction(firstStep, nil, execution.ID) } if err != nil { t.Logf("✅ Error simulation working: got expected error: %v", err) } else { t.Logf("✅ Step completed despite error simulation: %v", result != nil) } } // Test 2: Simulate Dependency Resolution Failures t.Logf("🚨 Test 2: Simulating dependency resolution failures...") // Create a step with invalid dependency reference invalidStep := &types.ExecutionPlanStep{ ID: "test-invalid-dependency", Name: "Test Invalid Dependency", Action: "create", ResourceID: "test-resource", Parameters: map[string]interface{}{ "vpcId": "{{non-existent-step.resourceId}}", }, DependsOn: []string{"non-existent-step"}, } // Try to resolve dependencies - should fail gracefully t.Logf("🚨 Testing invalid dependency: %s", invalidStep.Parameters["vpcId"]) // Test 3: Simulate State Corruption t.Logf("🚨 Test 3: Simulating state corruption scenarios...") // Add a resource with invalid data to state corruptedResource := &types.ResourceState{ ID: "corrupted-resource", Type: "", // Empty type should cause issues Status: "unknown", Properties: map[string]interface{}{ "invalid": make(chan int), // Non-serializable data }, } // Try adding corrupted resource (should handle gracefully) mockSuite.StateManager.AddResource(corruptedResource) // Test 4: Simulate Network/Timeout Scenarios t.Logf("🚨 Test 4: Simulating timeout scenarios...") // Create a context with very short timeout shortCtx, cancel := context.WithTimeout(context.Background(), time.Millisecond*1) defer cancel() // Try to make an API call with short timeout _, err := mockSuite.MCPServer.CallTool(shortCtx, "list-vpcs", map[string]interface{}{}) if err != nil { t.Logf("✅ Timeout handling working: %v", err) } t.Logf("✅ Error scenario testing completed") } // validateDependencyReferences validates dependency references in step parameters func validateDependencyReferences(t *testing.T, step *types.ExecutionPlanStep, allSteps []*types.ExecutionPlanStep) { // Create a map of all step IDs for validation stepMap := make(map[string]*types.ExecutionPlanStep) for _, s := range allSteps { stepMap[s.ID] = s } // Check parameters for dependency references for key, value := range step.Parameters { if strVal, ok := value.(string); ok { // Look for dependency references like {{step-id.resourceId}} if strings.HasPrefix(strVal, "{{") && strings.HasSuffix(strVal, "}}") { ref := strings.TrimPrefix(strings.TrimSuffix(strVal, "}}"), "{{") parts := strings.Split(ref, ".") if len(parts) > 0 { refStepID := parts[0] if _, exists := stepMap[refStepID]; !exists { t.Errorf("❌ Step %s parameter %s references non-existent step: %s", step.ID, key, refStepID) } } } } } } // validateParameterCompleteness validates that steps have required parameters func validateParameterCompleteness(t *testing.T, step *types.ExecutionPlanStep) { // Define required parameters for common actions requiredParams := map[string][]string{ "create-vpc": {"cidrBlock"}, "create-subnet": {"vpcId", "cidrBlock"}, "create-security-group": {"vpcId", "groupName"}, "create-ec2-instance": {"imageId", "instanceType"}, } if step.MCPTool != "" { if required, exists := requiredParams[step.MCPTool]; exists { for _, param := range required { // Check both Parameters and ToolParameters hasParam := false if _, exists := step.Parameters[param]; exists { hasParam = true } if step.ToolParameters != nil { if _, exists := step.ToolParameters[param]; exists { hasParam = true } } if !hasParam { t.Errorf("❌ Step %s missing required parameter: %s", step.ID, param) } } } } } ```