A full-stack cloud-native application demonstrating modern software development practices with Spring Boot, Angular, and AWS services.
AWS Cloud Full Stack Architecture and Demo
Swagger Demo for Documentation
Live Demo: https://d3eohu6f5v8xz9.cloudfront.net/
API Documentation: http://cloud-task-manager-env.eba-jrrbb8xa.us-east-1.elasticbeanstalk.com/swagger-ui/index.html#/
Instead of triggering an EventBridge event on task completion, an alternative approach could have been to use Amazon SQS to enqueue completed task events. This would allow downstream services to consume the messages reliably, with built-in retry and dead-letter queue support for fault tolerance. Such a design is well-suited when guaranteed processing of every completed task is critical, and broad event distribution is not required.
Another option would be to use Amazon SNS, which is ideal when multiple services need to react in parallel to a completed task. For example, one subscriber could update analytics, another could send notifications, and a third could archive historical data. This event-driven, decoupled architecture ensures scalability, flexibility, and aligns with AWS best practices for building resilient cloud-native systems.
This project consists of three main components:
- Spring Boot REST API - Backend service for task management
- Angular Frontend - Responsive web application
- AWS Lambda Function - Event-driven serverless task processing, used API Gateway as HTTPS proxy
Home Page Served via CloudFront
New Task Form
S3 Objects stored by EventBridge events and Lambda Excecution
Swagger REST API Documentation
- User authentication and authorization
- Mobile application with React Native
- Adding a VPC, public and private subnets where I will store the public serving applications in public subnet and the RDS Aurora (it will be better if application is globally scaled) or PostgreSQL database in a private subnet for security.
- I will automate the Infrastrucure using IaC best practises with Terraform, SAM and CloudFormation for all resources.
- I will also add AWS CodeBuild and Pipeline flow for automated CI/CD.
cloud-native-task-manager/
├── springboot-task-api/ # Java Spring Boot backend
├── angular-task-ui/ # Angular frontend application
├── aws-lambda-task-handler/ # Python Lambda function
├── deployment/ # Deployment configurations
└── README.md # Project documentation
- RESTful API with full CRUD operations
- Input validation and error handling
- Pagination and filtering capabilities
- Swagger/OpenAPI documentation
- Comprehensive unit tests
- CORS configuration for frontend integration
- Responsive user interface with Angular Material
- Reactive forms with validation
- Task management CRUD (create, read, update, delete)
- Pagination and status filtering
- Real-time validation feedback
- Success/error message handling
- Event-driven task completion processing
- AWS SDK integration with S3
- Structured logging and error handling
- Simulated cloud-native workflow
- Backend: Java 17, Spring Boot 3.x, Spring Data JPA, Maven
- Frontend: Angular 16+, Angular Material, TypeScript, RxJS
- Cloud: AWS Lambda, S3, EC2/Elastic Beanstalk, CloudFront
- Database: H2 (development), PostgreSQL (production)
- Testing: JUnit 5, Mockito, Jasmine, Karma
cd springboot-task-api
mvn clean install
mvn spring-boot:runThe API will be available at http://localhost:8080
- Swagger UI:
http://localhost:8080/swagger-ui.html - API Docs:
http://localhost:8080/v3/api-docs
cd angular-task-ui
npm install
ng serveThe application will be available at http://localhost:4200
cd aws-lambda-task-handler
pip install -r requirements.txt
# Deploy using AWS CLI or SAM CLI (see deployment section)| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tasks |
Get all tasks with pagination |
| GET | /api/tasks/{id} |
Get task by ID |
| POST | /api/tasks |
Create new task |
| PUT | /api/tasks/{id} |
Update existing task |
| DELETE | /api/tasks/{id} |
Delete task |
page: Page number (default: 0)size: Page size (default: 10)status: Filter by status (TODO, IN_PROGRESS, COMPLETED)sort: Sort field and direction (e.g.,dueDate,desc)
cd springboot-task-api
mvn testcd angular-task-ui
npm test
npm run e2e- Frontend: Deployed to S3 with CloudFront distribution
- Backend: Deployed to EC2/Elastic Beanstalk with RDS
- Lambda: Event-driven processing with S3 integration
cd angular-task-ui
npm run build
aws s3 sync dist/ s3://your-bucket-name
aws cloudfront create-invalidation --distribution-id YOUR_ID --paths "/*"cd springboot-task-api
mvn clean package
eb init
eb create
eb deploycd aws-lambda-task-handler
sam build
sam deploy --guidedserver.port=5000, // I have given this port after nginx 502 bad gateway debug for Elastic Beanstalk.
spring.datasource.url=${DATABASE_URL:jdbc:h2:mem:taskdb}
aws.region=${AWS_REGION:us-east-1}
cors.allowed.origins=${CORS_ORIGINS:http://localhost:4200}export const environment = {
production: true,
apiUrl: 'https://my-elastic-beanstak-domain/api'
};
The apiUrl is my Elastic Beanstalk backend URL that will serve content to front endimport os
S3_BUCKET = os.environ.get('S3_BUCKET', 'task-completion-logs')
AWS_REGION = os.environ.get('AWS_REGION', 'us-east-1')- Backend: Actuator endpoints for health checks and metrics
- Frontend: Angular DevTools and performance budgets
- Lambda: CloudWatch logs and X-Ray tracing enabled
- CORS configuration for secure cross-origin requests
- Input validation and sanitization
- AWS IAM roles and policies while following the princple of least privilege
- Environment-based configuration management
- Local Development: Use H2 database and mock AWS services
- Testing: Comprehensive unit tests implemented with 88% test coverage for service class
- Monitoring: CloudWatch dashboards and alerts implemented




