DevEx - Containerized Applications

A few notes from the session at AWS Loft 2019 regarding containerized application, in terms of tools and process that support the developre experience; slides are available online.

We had an overview of the process to manage and delivery containerized applications and the key elements in the development process; one practice that becomes rather relevant is Infrastructure as Code, this is however not specific of containerized applications but any application that is Cloud based.

When we practice Infrastructure as Code a key principle is to have a clean separation between the application and infratructure, this is, that we organize and manage resources separately, the idea is that the maintenance of neither should affect the other; this impacts directly:

DevEx

This comprises practices and tools for each of the areas shown in the table below, most of the tooling referred to are services offered by AWS.

Flow: Local development => IaC => Deployment safety => Continuous delivery

Element Description Tooling
Local Development This is mostly about getting to know some parts of the platform and gaining confidence that it will work in a deployed environment in the Cloud; to get as close as possible to a live environment. AWS ECS CLI or docker/docker-compose if not using ECS.
IaC Model our infrastructure as a combination of templates and code. AWS CDK.
Deployment safety Have fail-safe mechanisms to roll out new versions of the application without disruption. B/G deployments with AWS CodeDeploy, AWS ECS TaskSet API.
Continuous delivery Establish a strategy to conduct releases which factors in the lifecycle of application code and the underlying platform. The different models were exposed in the next section.

Releasing

We were walked through various models to handle releases:

A bit on the rationale about multiple source / multiple pipelines:

In a containerized solution, changes pertinent to the platform supporting the environment, i.e. scaling settings, etc. have nothing to do with the application code itself, therfore we’d continue to use the image considered latest and that is actively running.

Remarks

About CodeDeploy capabilities:

Concepts