Architecture Overview

The Todos application demonstrates modern cloud-native architecture patterns with complete Infrastructure as Code deployment.

πŸ—οΈ System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    AWS Cloud Environment                   β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                   Private VPC                       β”‚   β”‚
β”‚  β”‚                 (No Public Access)                  β”‚   β”‚
β”‚  β”‚                                                     β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚   β”‚
β”‚  β”‚  β”‚  Private Subnet β”‚    β”‚  Private Subnet β”‚       β”‚   β”‚
β”‚  β”‚  β”‚    (AZ-1)       β”‚    β”‚    (AZ-2)       β”‚       β”‚   β”‚
β”‚  β”‚  β”‚                 β”‚    β”‚                 β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ECS Fargateβ”‚  β”‚    β”‚  β”‚ECS Fargateβ”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚           β”‚  β”‚    β”‚  β”‚ (Standby) β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚    β”‚  β”‚           β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ β”‚Native β”‚ β”‚  β”‚    β”‚  β”‚           β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ β”‚Image  β”‚ β”‚  β”‚    β”‚  β”‚           β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ β”‚       β”‚ β”‚  β”‚    β”‚  β”‚           β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ β”‚Todos  β”‚ β”‚  β”‚    β”‚  β”‚           β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ β”‚API    β”‚ β”‚  β”‚    β”‚  β”‚           β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚    β”‚  β”‚           β”‚  β”‚       β”‚   β”‚
β”‚  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚       β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚   β”‚
β”‚  β”‚                                                     β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚              Security Groups                β”‚   β”‚   β”‚
β”‚  β”‚  β”‚        (Internal Traffic Only)              β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚               Amazon Keyspaces                      β”‚   β”‚
β”‚  β”‚            (Managed Cassandra)                      β”‚   β”‚
β”‚  β”‚                                                     β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚   β”‚
β”‚  β”‚  β”‚ Checklist   β”‚    β”‚    Todo     β”‚                β”‚   β”‚
β”‚  β”‚  β”‚   Table     β”‚    β”‚   Table     β”‚                β”‚   β”‚
β”‚  β”‚  β”‚             β”‚    β”‚             β”‚                β”‚   β”‚
β”‚  β”‚  β”‚ - id (PK)   β”‚    β”‚ - checklist_id (PK)         β”‚   β”‚
β”‚  β”‚  β”‚ - name      β”‚    β”‚ - id (CK)   β”‚                β”‚   β”‚
β”‚  β”‚  β”‚ - created   β”‚    β”‚ - task      β”‚                β”‚   β”‚
β”‚  β”‚  β”‚ - updated   β”‚    β”‚ - completed β”‚                β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                CloudWatch Logs                      β”‚   β”‚
β”‚  β”‚              (Application Logs)                     β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ Application Architecture

Hexagonal Architecture (Ports & Adapters)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  Application                        β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                Domain Layer                 β”‚   β”‚
β”‚  β”‚              (Pure Business Logic)          β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚   β”‚
β”‚  β”‚  β”‚  Checklist  β”‚    β”‚      Todo       β”‚    β”‚   β”‚
β”‚  β”‚  β”‚   Entity    β”‚    β”‚     Entity      β”‚    β”‚   β”‚
β”‚  β”‚  β”‚             β”‚    β”‚                 β”‚    β”‚   β”‚
β”‚  β”‚  β”‚ - id        β”‚    β”‚ - id            β”‚    β”‚   β”‚
β”‚  β”‚  β”‚ - name      β”‚    β”‚ - task          β”‚    β”‚   β”‚
β”‚  β”‚  β”‚ - todos[]   β”‚    β”‚ - completed     β”‚    β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚           Value Objects             β”‚   β”‚   β”‚
β”‚  β”‚  β”‚                                     β”‚   β”‚   β”‚
β”‚  β”‚  β”‚ - ChecklistId                       β”‚   β”‚   β”‚
β”‚  β”‚  β”‚ - ChecklistName                     β”‚   β”‚   β”‚
β”‚  β”‚  β”‚ - TodoId                            β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚             Application Layer               β”‚   β”‚
β”‚  β”‚              (Use Cases)                    β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚         Services (Ports)            β”‚   β”‚   β”‚
β”‚  β”‚  β”‚                                     β”‚   β”‚   β”‚
β”‚  β”‚  β”‚ - CreateChecklistService            β”‚   β”‚   β”‚
β”‚  β”‚  β”‚ - RetrieveChecklistService          β”‚   β”‚   β”‚
β”‚  β”‚  β”‚ - CreateTodoService                 β”‚   β”‚   β”‚
β”‚  β”‚  β”‚ - RetrieveTodoService               β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚           Infrastructure Layer              β”‚   β”‚
β”‚  β”‚              (Adapters)                     β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚   β”‚
β”‚  β”‚  β”‚     Web     β”‚    β”‚   Persistence   β”‚    β”‚   β”‚
β”‚  β”‚  β”‚   Adapter   β”‚    β”‚    Adapter      β”‚    β”‚   β”‚
β”‚  β”‚  β”‚             β”‚    β”‚                 β”‚    β”‚   β”‚
β”‚  β”‚  β”‚ REST API    β”‚    β”‚   Cassandra     β”‚    β”‚   β”‚
β”‚  β”‚  β”‚ WebFlux     β”‚    β”‚   Reactive      β”‚    β”‚   β”‚
β”‚  β”‚  β”‚ HATEOAS     β”‚    β”‚   Driver        β”‚    β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🌐 Network Architecture

Security-First Design

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  AWS Region                         β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              Todos VPC                      β”‚   β”‚
β”‚  β”‚            10.0.0.0/16                      β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚ Private Subnet  β”‚ β”‚ Private Subnet  β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  10.0.1.0/24    β”‚ β”‚  10.0.2.0/24    β”‚   β”‚   β”‚
β”‚  β”‚  β”‚     AZ-A        β”‚ β”‚     AZ-B        β”‚   β”‚   β”‚
β”‚  β”‚  β”‚                 β”‚ β”‚                 β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  β”‚    ECS    β”‚  β”‚ β”‚  β”‚    ECS    β”‚  β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  β”‚   Task    β”‚  β”‚ β”‚  β”‚   Task    β”‚  β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  β”‚(Primary)  β”‚  β”‚ β”‚  β”‚(Standby)  β”‚  β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚          Security Group             β”‚   β”‚   β”‚
β”‚  β”‚  β”‚                                     β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  Inbound Rules:                     β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  βœ… Self-reference (all traffic)    β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  ❌ No external ingress             β”‚   β”‚   β”‚
β”‚  β”‚  β”‚                                     β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  Outbound Rules:                    β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  βœ… All traffic (for AWS APIs)      β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  Network Features:                          β”‚   β”‚
β”‚  β”‚  ❌ No Internet Gateway                     β”‚   β”‚
β”‚  β”‚  ❌ No NAT Gateway                          β”‚   β”‚   β”‚
β”‚  β”‚  ❌ No Public Subnets                       β”‚   β”‚
β”‚  β”‚  βœ… Private DNS Resolution                  β”‚   β”‚
β”‚  β”‚  βœ… VPC Endpoints (AWS Services)            β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ—ƒοΈ Data Architecture

Amazon Keyspaces Schema

-- Keyspace
CREATE KEYSPACE todos
WITH REPLICATION = {
  'class': 'SimpleStrategy',
  'replication_factor': 3
};

-- Checklist Table
CREATE TABLE todos.checklist (
    id text PRIMARY KEY,
    name text,
    created_at timestamp,
    updated_at timestamp
) WITH point_in_time_recovery = true;

-- Todo Table (Clustered by checklist)
CREATE TABLE todos.todo (
    checklist_id text,      -- Partition Key
    id text,                -- Clustering Key
    task text,
    completed boolean,
    created_at timestamp,
    updated_at timestamp,
    PRIMARY KEY (checklist_id, id)
) WITH CLUSTERING ORDER BY (id ASC)
AND point_in_time_recovery = true;

Data Access Patterns

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Query Patterns                       β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              Checklist Queries              β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ GET /checklists                          β”‚   β”‚
β”‚  β”‚    β†’ SCAN todos.checklist                   β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ GET /checklists/{id}                     β”‚   β”‚
β”‚  β”‚    β†’ SELECT * FROM todos.checklist          β”‚   β”‚
β”‚  β”‚      WHERE id = {id}                        β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ POST /checklists                         β”‚   β”‚
β”‚  β”‚    β†’ INSERT INTO todos.checklist            β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                Todo Queries                 β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ GET /tasks?checklist={id}                β”‚   β”‚
β”‚  β”‚    β†’ SELECT * FROM todos.todo               β”‚   β”‚
β”‚  β”‚      WHERE checklist_id = {id}              β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ POST /tasks                              β”‚   β”‚
β”‚  β”‚    β†’ INSERT INTO todos.todo                 β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ PUT /tasks/{id}                          β”‚   β”‚
β”‚  β”‚    β†’ UPDATE todos.todo                      β”‚   β”‚
β”‚  β”‚      WHERE checklist_id = ? AND id = ?     β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Container Architecture

Native Image Container

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Docker Container                       β”‚
β”‚           todos-application:native                  β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚            Base Layer                       β”‚   β”‚
β”‚  β”‚        (Ubuntu Jammy Tiny)                  β”‚   β”‚
β”‚  β”‚             ~20MB                           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚          Native Executable                  β”‚   β”‚
β”‚  β”‚  net.ssimmie.todos.application.TodosApp    β”‚   β”‚
β”‚  β”‚             ~119MB                          β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  Features:                                  β”‚   β”‚
β”‚  β”‚  βœ… Ahead-of-time compilation              β”‚   β”‚
β”‚  β”‚  βœ… No JVM overhead                        β”‚   β”‚
β”‚  β”‚  βœ… Fast startup (~50ms)                   β”‚   β”‚
β”‚  β”‚  βœ… Low memory usage (~64MB)               β”‚   β”‚
β”‚  β”‚  βœ… Optimized for cloud deployment         β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚        Configuration Layer                  β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  Environment Variables:                     β”‚   β”‚
β”‚  β”‚  β€’ SPRING_PROFILES_ACTIVE=aws              β”‚   β”‚
β”‚  β”‚  β€’ CASSANDRA_KEYSPACE=todos                β”‚   β”‚
β”‚  β”‚  β€’ CASSANDRA_ENDPOINTS=keyspaces           β”‚   β”‚
β”‚  β”‚  β€’ CASSANDRA_PORT=9142                     β”‚   β”‚
β”‚  β”‚  β€’ CASSANDRA_SSL=true                      β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  Health Check:                              β”‚   β”‚
β”‚  β”‚  β€’ curl -f /actuator/health                β”‚   β”‚
β”‚  β”‚  β€’ 30s interval, 5s timeout               β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  Total Container Size: ~237MB                       β”‚
β”‚  (vs ~520MB for JVM-based container)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”’ Security Architecture

Defense in Depth

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Security Layers                      β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚            Network Security                 β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  βœ… Private VPC (No public access)          β”‚   β”‚
β”‚  β”‚  βœ… Security Groups (Restrictive)           β”‚   β”‚
β”‚  β”‚  βœ… NACLs (Network ACL default)             β”‚   β”‚
β”‚  β”‚  βœ… No Internet Gateway                     β”‚   β”‚
β”‚  β”‚  βœ… No NAT Gateway                          β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚         Application Security                β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  βœ… No hardcoded secrets                    β”‚   β”‚
β”‚  β”‚  βœ… Environment-based config                β”‚   β”‚
β”‚  β”‚  βœ… Non-root container user                 β”‚   β”‚
β”‚  β”‚  βœ… Health check endpoints only             β”‚   β”‚
β”‚  β”‚  βœ… Minimal attack surface                  β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚           Data Security                     β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  βœ… Encryption at rest (Keyspaces)          β”‚   β”‚
β”‚  β”‚  βœ… Encryption in transit (TLS)             β”‚   β”‚
β”‚  β”‚  βœ… AWS IAM authentication                  β”‚   β”‚
β”‚  β”‚  βœ… Point-in-time recovery                  β”‚   β”‚
β”‚  β”‚  βœ… Automatic backups                       β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚            IAM Security                     β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  βœ… Least privilege principle               β”‚   β”‚
β”‚  β”‚  βœ… Task-specific roles                     β”‚   β”‚
β”‚  β”‚  βœ… No long-term credentials                β”‚   β”‚
β”‚  β”‚  βœ… AWS service authentication              β”‚   β”‚
β”‚  β”‚  βœ… Audit trail (CloudTrail)               β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“Š Performance Architecture

Reactive Non-Blocking Design

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Request Flow                           β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚               Load Balancer                 β”‚   β”‚
β”‚  β”‚            (ECS Service)                    β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                β”‚                                   β”‚
β”‚                β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚            Netty Server                     β”‚   β”‚
β”‚  β”‚         (Spring WebFlux)                    β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  Event Loop Threads: 2-4                   β”‚   β”‚
β”‚  β”‚  Non-blocking I/O                           β”‚   β”‚
β”‚  β”‚  Reactive Streams                           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                β”‚                                   β”‚
β”‚                β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚          WebFlux Router                     β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ Functional routing                       β”‚   β”‚
β”‚  β”‚  β€’ Request validation                       β”‚   β”‚
β”‚  β”‚  β€’ Content negotiation                      β”‚   β”‚
β”‚  β”‚  β€’ HATEOAS links                           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                β”‚                                   β”‚
β”‚                β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚         Application Services                β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ Reactive composition                     β”‚   β”‚
β”‚  β”‚  β€’ Error handling                           β”‚   β”‚
β”‚  β”‚  β€’ Business logic                           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                β”‚                                   β”‚
β”‚                β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚       Cassandra Driver                     β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ Async/reactive driver                    β”‚   β”‚
β”‚  β”‚  β€’ Connection pooling                       β”‚   β”‚
β”‚  β”‚  β€’ Load balancing                           β”‚   β”‚
β”‚  β”‚  β€’ Retry logic                              β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                β”‚                                   β”‚
β”‚                β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚          Amazon Keyspaces                   β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  β€’ Serverless scaling                       β”‚   β”‚
β”‚  β”‚  β€’ Multi-AZ replication                     β”‚   β”‚
β”‚  β”‚  β€’ Consistent performance                   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Performance Characteristics

Metric Native Image JVM
Startup Time ~50ms 2-3s
Memory Usage ~64MB 256MB+
CPU Usage Lower at startup Higher initially
Container Size 237MB 520MB+
First Request <10ms 100ms+
Steady State <5ms <5ms

πŸ”„ Deployment Architecture

Infrastructure as Code Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Developer Workflow                     β”‚
β”‚                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚           Local Development                 β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  1. Code changes                            β”‚   β”‚
β”‚  β”‚  2. ./mvnw test                             β”‚   β”‚
β”‚  β”‚  3. ./mvnw clean install                    β”‚   β”‚
β”‚  β”‚  4. Native image build                      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                β”‚                                   β”‚
β”‚                β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚        Infrastructure Deployment           β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  1. cd infrastructure                       β”‚   β”‚
β”‚  β”‚  2. cdk diff                                β”‚   β”‚
β”‚  β”‚  3. cdk deploy --all                        β”‚   β”‚
β”‚  β”‚  4. Verify deployment                       β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                β”‚                                   β”‚
β”‚                β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚             AWS Services                    β”‚   β”‚
β”‚  β”‚                                             β”‚   β”‚
β”‚  β”‚  CloudFormation β†’ Creates resources         β”‚   β”‚
β”‚  β”‚  ECR β†’ Pulls container image               β”‚   β”‚
β”‚  β”‚  ECS β†’ Deploys application                 β”‚   β”‚
β”‚  β”‚  Keyspaces β†’ Database ready                β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Next Steps