Introduction to Serverless Computing for Pythonistas
Piotr Grzesik
What I do ?
What I will be talking about ?
- What is serverless computing?
- What are the pros and cons of serverless computing?
- What are the available platforms and frameworks?
- How to create my first serverless Python app?
- What is and how to use Serverless framework?
Serverless model
- Small, stateless functions that do one thing (FaaS)
- Cloud provider is responsible for managing infrastructure
- Execution triggered by events
- HTTP Request
- Message from Queue
- Timer
- File upload
- Per invocation billing
- Integration with other services like DBs, Auth0 (BaaS)
Pros of serverless
- No servers to provision and maintain manually
- "Infinite" scalability
- High availability
- Quicker time to market, increased velocity
- Smaller total cost of ownership
- More focused on delivering business logic
Cons/challenges of serverless
- Vendor lock-in
- Ephemeral nature of runtime
- Cold starts
- Increased complexity with growing number of separate functions
- Execution duration, limited CPU and RAM
- More challenging testing, debugging and monitoring
Example uses for serverless
- Multimedia processing (e.g. in response to image upload)
- Reacting to database changes (e.g. auditing changes)
- IoT sensors message processing (e.g. processing incoming temperature readings)
- Stream processing (e.g. processing a stream of messages)
- Scheduled or batch jobs (e.g. performing backups)
- REST or GraphQL APIs (e.g. web applications)
Serverless is not a silver bullet
Providers/platforms
- AWS Lambda
- Azure Functions
- Google Cloud Functions
- Knative
- OpenFaaS
- IBM OpenWhisk
- CloudFlare Workers
- Auth0 Webtask
- and many more...
AWS Lambda
- Serverless computing platform, introduced in 2014 by Amazon Web Services
- Out of the box support for Java, .NET Core, Go, Ruby, Python, Node.js. Virtually supports every runtime via custom runtimes introduced in 2018
- Easy integration with S3, Kinesis, CloudWatch, API Gateway
- Execution time limit - 15 minutes
- Up to 3,008 MB of memory per invocation
- Support for layers
- Lambda@Edge - running code on Edge Locations
Creating our first serverless function!
Available frameworks
- Serverless Framework
- AWS SAM
- Zappa
- Chalice
Serverless framework
- Written in Node.js
- Provider agnostic, supports AWS, Azure, Google Cloud and many more
- Supports multiple programming languages
- Rich plugin ecosystem
- Supports application lifecycle management
- Configuration via single yaml file
Serverless framework - useful commands
Installation
Project initialization
Deployment
Function invocation
npm install -g serverless
serverless create --template aws-python3 --path hello-lambda
serverless deploy function -f hello
serverless invoke -f hello
Cleanup
serverless remove
Example serverless.yml
service: example
provider:
name: aws
runtime: python3.6
region: us-east-1
iamRoleStatements:
- Effect: "Allow"
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
Resource:
- "arn:aws:logs:*:*:*"
environment:
STAGE: ${self:custom.stage}
functions:
example:
handler: handler.example
events:
- schedule: rate(1 day)
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: 'non-linux'
stage: ${opt:stage, self:provider.stage}
Building app with Serverless Framework
- Integrates with GitHub
- When new PR is created, it checks if PR description contains a Trello card attached
- Sends status to GitHub
- Sends status information to subscribers (SNS integration)
- Saves statuses to DynamoDB
- Users can retrieve previous checks
Application diagram
Key points
- No servers to manage
- Per invocation billing
- Scalability and availability
- Quicker time to market
- Serverless Framework is great
Recommended readings
- https://github.com/cncf/wg-serverless/tree/master/whitepapers/serverless-overview
- https://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-3.pdf
- https://theburningmonk.com/
Thanks!
@p_grzesik
pj.grzesik@gmail.com
piotrgrzesik.pl
Introduction to Serverless Computing for Pythonistas
By progressive
Introduction to Serverless Computing for Pythonistas
- 588