Estimated Time: 4–8 hours Level: Intermediate Focus Areas: Dockerization · Infrastructure as Code · CI/CD · AWS
You will be working from a pre-built Express.js + TypeScript starter application. Your task is to:
- Containerize the application and create a local dev environment
- Define a production-ready cloud deployment using CDK for Terraform
- Automate deployment via GitHub Actions
You may deploy to your own AWS account for testing, but your solution must be fully portable and documented so we can deploy it into our AWS environment.
Fork or clone the starter repository:
🔗 https://github.com/TurboVets/tv-devops-assessment
This contains the basic Express app you’ll be building on.
You must submit one GitHub repository with the following folder structure in the root:
Contains the application code and:
Dockerfiledocker-compose.yml- GitHub Actions workflows
README.mdwith local setup and CI/CD instructions
Contains the infrastructure code and:
- CDK for Terraform (in TypeScript)
- Configuration templates
README.mdwith deployment instructions for our AWS account
- Create a production-optimized
Dockerfile(multi-stage build, minimal layers, small image) - Create a
docker-compose.ymlto orchestrate the app - Add a
.dockerignoreto reduce build context size - App must respond to
http://localhost:3000/health
Use CDK for Terraform (TypeScript) to define:
- ECR repository
- ECS service (Fargate or EC2)
- VPC, subnets, security groups
- IAM roles (least privilege)
- (Optional) Load Balancer or API Gateway
- You may deploy to your own AWS account for validation
- DO NOT hardcode account IDs, regions, or credentials
- All infrastructure must be configurable using:
cdktf.json.envor config files- Environment variables
- Include clear instructions on how to:
- Override variables to use our AWS account
- Deploy and destroy the stack
- The final deployment must produce a publicly accessible
/healthendpoint
Set up GitHub Actions to:
- Trigger on push to
main - Build and tag a Docker image
- Push to ECR
- Deploy via
cdktf deploy
- Use GitHub Secrets to store:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY- Any other required env vars
- Parameterize everything (ECR URI, region, etc.)
- Include instructions for configuring secrets
- Add a CI badge to the
README.md
Record a screen-share video where you walk through:
- Your Docker and Compose setup
- CDKTF constructs and structure
- GitHub Actions workflows
- How we can configure and deploy it in our AWS account
- Any challenges or decisions worth noting
You do not need to appear on camera.
| Area | Expectation |
|---|---|
| Docker Setup | Clean, production-ready image; Compose works locally |
| IaC Quality | CDKTF code is modular, portable, and secure |
| CI/CD Flow | GitHub Actions runs cleanly; secrets handled properly |
| Portability | Can be deployed in our AWS account without code changes |
| Documentation | Detailed, step-by-step usage and setup instructions |
| Security | No hardcoded secrets or account info; uses IAM and GitHub Secrets |
| Communication | Clear, concise walkthrough video explaining design and deployment |
- Add Route53 and HTTPS
- CloudWatch logs and alerts
- Support multiple environments (dev/staging/prod)
- Use remote Terraform backend (S3 + DynamoDB)
Submit a single GitHub repository containing both app/ and iac/.
Then share:
- ✅ GitHub repo link
- ✅ Video walkthrough link (Loom, Google Drive, YouTube, etc.)
- ✅ (Optional) Any extra notes or setup info we should know
Please add the following as Admin Collaborators to your GitHub repository:
ana@turbovets.comdean@turbovets.comcharishma@turbovets.com
- Open your repo on GitHub
- Go to Settings → Collaborators and teams
- Click Invite a collaborator
- Enter the emails above
- Set access level to Admin
This gives us access to CI history, secrets, and workflow configurations for review.