• Two Go routines: • serving static assets and API for Web app • metadata extraction • Using Go stdlb only • Deployed directly as a binary along with static assets (e.g. Terraform on a VM)
C • Two containers: • serving static assets and API for Web app • metadata extraction • Using Minio as shared storage • Deployed using Kubernetes primitives
• lift and shift (aka: put monolith into a container) • both app containers in one pod, share data via local volume • app containers in different pods, share data via persistent volume
• Three functions: • upload an image • list images along with metadata • metadata extraction • Using S3 as shared storage (also: static assets served from bucket) • Deployed using Lambda, API Gateway, and CloudWatch
to containers: pretty straight-forward • Functions requires different way of thinking • Both containers & functions increase dev/deploy velocity but also introduce new challenges: • containers: how to build/maintain images, routing • functions: how to debug and orchestrate Lessons learned
advantage is due to Kubernetes you now have portability and avoid lock-in (but also: do containers make sense here?) • Functions: big advantage is devs don’t need to bother with the infra bits but low-level CLI unusable (need CF, SAM, Serverless framework) • Ratio of “code to config” (deployment descriptors, etc.) Lessons learned