multiple languages • Uses Node, Python and Chocolatey (alternative Windows Package Manager) • Deploys the serverless infrastructure in the cloud. Compatible with Amazon Web Services, Google Cloud, Microsoft Azure and others • Simplifies configuration and application updates • Configuration files written in YAML • https://www.serverless.com/
But we don’t have to keep it running • We don’t have to update it frequently • We can have more as we need them (autoscaling) • We only pay if we use them (per call, memory and run time) • So, it is an industry term to say somebody else is taking care of the server for you.
of new systems • It antagonizes the traditional monolithic architecture that deploys the full system in a single application • Microservices means we should split our systems into smaller ones • Smaller parts are easy to understand, can be deployed independently • Share no database with other parts • Share data and services via a well-defined API • Can be rewritten one by one (less coupling)
by Amazon Web Services (AWS) • We will be using AWS as our example provider • You need to have an account to test the code shown in this presentation • You can create a free account on their web site: https://aws.amazon.com/ • If it is your first time on AWS, I strongly suggest you check their web site and documentation, as you will be paying for the resources used beyond the free tier. • To start using AWS with Python, install their command-line client: pip install awscli
we use AWS Lambdas, FaaS, serverless • And we would divide each API call in a different lambda, grouped in a domain, following the directives of Microservices and Domain-Driven Design (DDD). Check these books for more info:
the Serverless Application Framework: npm install –g serverless • Let’s created the application stub type: serverless • Try to answer the questions as in the image below:
our simple function. • It says we are going to deploy a Python 3.8 Lambda Function • It defines the handler (the module and function name) • It also specifies the URL path to use and the http method
all parameters passed to your function • Copy and paste it to your preferred text editor that supports JSON. Reformat the code to make it easier to read. • You get user location with IP and country information • The URL and path used on this call • Any parameter used (query string and path) if any • You can access all these values as in simple Python dictionary
available to our lambda, let’s display a simple page with the callers IP and country. • We need to return a html page now. • Better use templates to offload the work to Jinja2 pip install jinja2 • We also must tell serverless to deploy or modules with the lambda function sls plugin install -n serverless-python- requirements
domain name :-D • Simple service Get URL Return link with short code When the short code is accessed: - Count access (increment database field) - Redirect user to the URL - Codes will be deleted after 2 days
function to process GET and POST requests • GET will show a simple form with a field to enter the URL • POST will process the user input, create a record in the database and return a page with the links created. • Another function will get the code and redirect to the user url, incrementing the counter.
a key value database in AWS • It is also serverless and we pay for the storage and requests made • Super fast • Scalable • Does not support SQL • Really odd at the beginning
create that handles GETs and POST • Another one that handles GETs • Look how their urls are different. The function is chosen by pattern matching • In the useURL, the {short_key} is a parameter passed to the lambda in the event • We are using layers for dependencies • And a role to have access to the database
very simple function deployed to the cloud • You choose the batteries • You can combine multiple Python libraries depending on your needs • Leverage the cloud provider services like databases, api gateways, queues, etc
to bottom, no hidden magic code • Cheap, millions of invocations for less than 1 euro • Pays as you go (no upfront costs, if you don’t use, you won’t pay either) • Functions can be deployed independently • No downtime, old version keeps running until the new one is deployed
Cognito to support authenticated users • Read about lambda layers • Other frameworks to help with Lambdas and Python: AWS Chalice https://github.com/aws/chalice AWS SAM https://aws.amazon.com/serverless/sam/
https://github.com/lskbr/pyconse2020 • You may find this presentation on SpeakerDeck https://speakerdeck.com/lskbr • If you have any questions, do not hesitate to contact me: nilo@logikraft.be @lskbr on Twitter and Telegram