For a while now I’ve been working with various AWS solutions (Lambda, Data Pipelines, CloudWatch) through the console, and sometimes using homegrown scripts that take advantage of the CLI. This approach has many limitations, but I’d actually recommend it if you’re just getting started with AWS as I found it to be a great way to learn.
But if you’re ready to truly embrace the buzzy concept of serverless architecture and let your functions fly free in the rarefied air of ‘the cloud,’ well then you’ll want to make use of a framework that is designed to make development and deployment a whole heck of a lot easier. Here’s a short list of serverless frameworks:
There are many more, I’m sure, but these seem to be the popular choices. And each one has something to recommend it. Chalice is the official AWS client. Serverless is widely used. Zappa has some neat dependency packaging solutions. Apex is clearly at the apex of serverless framework technology.
I selected Serverless for a few reasons. It does seem to be used quite a bit, so there is a lot of discussion on Stackoverflow and quite a few code examples on Github. As I need all the help I can get, these are true benefits. Also, there are numerous plugins available for serverless, which seems to indicate there is an active developer community. And I knew right off the bat that I would take advantage of at least two of these plugins:
- Serverless Python Requirements
- Coping with Python dependencies when deploying a Lambda is one of the more challenging aspects for beginners (like me). I appreciate that someone figured out how to do it well and made that method available to me with a few extra lines in the config
- Serverless Step Functions
- I’m looking forward to making use of this relatively new service and none of the other frameworks had anything built in yet for Step Functions
The installation guide for Serverless is pretty good, actually, but I’ll call out a few things that might need some extra attention.
Once you’ve installed Serverless:
sudo npm install -g serverless
Your next concern will be authentication. Serverless provides some pretty good documentation on the subject, but as they describe a few different scenarios, here’s my recommendation.
Follow their instructions for generating your client key/secret, then authenticate using the CLI:
aws configure --profile serverless-user
This will walk you through entering your key, your secret, and your region. The reason I suggest authenticating using the CLI is that the CLI is darned useful. For example, you may want to ‘get-function’ just to see if serverless is doing what you think it is doing.
Also note that I have provided a profile to the command. I find profiles useful, you may not. But if you do like to use profiles, Serverless will let you take full advantage of them. For example, you can deploy with a particular profile:
serverless deploy --aws-profile serverless-user
Or check out this nice idea for per stage profiles.
I found the idea of stages in AWS a bit confusing at first. This blog post does a good job of explaining the concept and how to implement it.
Installing the plugins was dead simple:
npm install --save serverless-python-requirements
npm install --save serverless-step-functions
And setting up a new service environment ain’t much harder:
serverless create --template aws-python --path myAmazingService
Now we are ready to dig in and start writing our functions. In my next post I’ll write a bit about Python dependencies, unit testing, and anything else that occurs to me in the meantime.