Weaponizing Haskell - Part One

T4LLBERG - "Weapons"

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

Links