Weaponizing Haskell - Part One
This is a set of notes summarizing the trials and tribulations involved in getting a small Haskell application building, running, and scaling in the cloud on a budget!
The outcome is that the app still isn’t running, but we are on the bring of having it running on AWS through Elastic Beanstalk. Stay tuned for Part-Two, where I’ll speak in more detail about the final step, and guide you down the happy-path towards building and running your own Haskell services in the cloud…
What I Want
Simple
- Conceptually clear architecture
- Separation of responsibilities by service
Builds
- Automated builds in the cloud
- For cheap!
- With limited access to my accounts
Deployments
- Dockerized
- Deployable with multi-container support
- Ideally platform agnostic
- Running on AWS for now
Scalable
- Expand the capability of the platform
- Grow users
- Grow services
- Grow volume
Where I am Now
- Pre-Prod
- CI pipeline is working fine
- Still having issues with Elastic Beanstalk
- HALP
Timeline
- Prototype App
- Dockerized
- Run on Elastic Beanstalk
- Integrated into Slack
- Alpha App
- Database Issues
- Postgrest
- Multi-Containerized (Suits Services Model)
- Build Pipeline
- CI Services Trials
- Docker-Hub BitBucket-Proxy
- Elastic-Beanstalk
How I Got There
- Docker
- Multi-Stage Containers
- Proxy Version Control Accounts
Problems I Encountered
- Credential Greed
- Build Times
- Beanstalk Errors
What’s Left
Production Services
- AWS Beanstalk Deployment
- or AWS ECS
- or AWS EC2 manual deploys
App Changes Left
- Subscriptions
- Web-Interface
- Email gateway
- Privileged Use-cases
Ops Changes Left
- HTTPS
- Zero-Downtime Deploys
- Ansible Ops
- VPCs