AWS Serverless Deployment — 101

AWS Lambda is the compute service under the AWS Serverless ecosystem. For development and deployment of Lambda function along with the infrastructure it needs, one tends to use development frameworks. Two of the most popular frameworks used for this purpose are —

  1. AWS Serverless Application Model (SAM)
  2. Serverless Framework

Assuming you are using AWS SAM, initializing a green field Hello World Lambda function with SAM CLI (tool that operates on an AWS SAM template and application code) is a three-step process:

Step 1 > sam init
sam init console output

The Hello World Function inside the template file looks as below:

Hello World Resource in Template File
Step 2 > sam package --s3-bucket <bucket name>
sam package console output
Step 3 > sam deploy --template-file package.yaml --stack-name hello-world --capabilities CAPABILITY_IAM
sam deploy console output

Every time the sam deploy command is issued, SAM template gets translated to CloudFormation template, and it eventually publishes the new version of the Hello World Function. This new version is tagged as $LATEST.

Hello World Lambda Function in AWS Console

With this deployment, any new request coming for the Hello World function is handled by the latest version of the lambda. And all existing running instances of Hello World function gets terminated. Cool!!!

But what if the new function has got some bug in it which could not be captured in the early stages of Unit testing and Integration testing. All your traffic will be impacted, and User Experience will go for a toss 😩.

We can handle such issues by following the Blue Green deployment strategy. It helps to increase the availability of the system and reduce risk associated with deployment.

In this strategy, we can have 2 versions of the function running at the same time and traffic can be diverted to the latest version in an incremental fashion.

AWS SAM supports multiple traffic dialing strategies out of box.

  1. Canary — Traffic is shifted in two increments from old version to new version
  2. Linear — Traffic is shifted from old version to new version in equal increments with an equal number of minutes between each increment.

To use the Blue/Green option, SAM template has two attributes which needs to be configured in the Lambda function —

  1. AutoPublishAlias — AWS SAM manages the traffic distribution by creating an Alias with the name specified and assigns the percentage of traffic to be distributed between new version and old version depending on the deployment preference type mentioned below.
  2. Deployment Preference Type — Dictates how distribution of traffic between new and old version is to be handled.

Some of the pre-configured deployment preference type are available out of box —


Let’s say we want to route 10 % of the production traffic incrementally to new Lambda version every 1 minute. To configure this, the Hello World Lambda Function will look something as below —

Hello World Lambda with Blue/Green Deployment Strategy

When sam deploy command is issued with the above changes, AWS SAM internally configures AWS Code Deploy (another AWS Serverless service for deploying the code and managing the traffic distribution using Blue/Green pattern) application which manages the traffic dialing.

This is how it looks like in the AWS Code Deploy console when the deploy command is issued —

AWS Code Deploy Console with Linear Blue/Green Deployment

You can also configure Cloud Watch Alarms which if triggered can roll back the deployment process.

As part 2 of this blog, will have an actual Serverless Micro service implemented with Lambda and configured with end to end CI/CD DevOps process using AWS Development tools — AWS Code Commit, AWS Code Build, AWS Code Deploy and AWS Code Pipeline.

Till then, Cheers!!!

#AWS #CloudArchitect #CloudMigration #Microservices #Mobility #IoT

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store