Fun With Serverless Python

A presentation at PyCon UK in October 2017 in Cardiff, UK by Lorna Jane Mitchell

Slide 1

Slide 1

Fun With Serverless Python Lorna Mitchell, IBM https://speakerdeck.com/lornajane

Slide 2

Slide 2

The Serverless Revolution @lornajane The big secret is: there ARE servers!

Slide 3

Slide 3

What is Serverless? Backend functions, deployed to the cloud, scaling on demand. Pay as you go. @lornajane

Slide 4

Slide 4

The Serverless Revolution @lornajane

Slide 5

Slide 5

The Serverless Revolution FaaS: Functions as a Service Developer focus: • the outputs • the inputs • the logic in between Charges are usually per GBsec @lornajane

Slide 6

Slide 6

When To Go Serverless • For occasional server needs (contact form on static site) • For very variable traffic levels (millions of browsers requesting update) • To provide extra compute resource without extending existing platform (classic example: PDF generation) @lornajane

Slide 7

Slide 7

Serverless Platforms • Amazon Lambda • IBM Cloud Functions (aka Apache OpenWhisk) • Google Cloud Functions • Azure Functions • …. and more. Every day there are more. @lornajane

Slide 8

Slide 8

Getting Started @lornajane

Slide 9

Slide 9

Amazon Lambda • Install awscli command line tool (there is also a web interface) • Set up permissions via IAM and then use aws configure to get that set up • Write some code, then zip it (e.g. hello.py -> hello.zip) @lornajane

Slide 10

Slide 10

Amazon Lambda Create your lambda function by supplying the zip file and some options: aws lambda create-function \ —function-name hipy \ —runtime python3.6 \ —role arn:aws:iam::283476131276:role/service-role/Alexa —description “Hello World in Python” \ —handler hello.main \ —zip-file fileb://hello.zip @lornajane

Slide 11

Slide 11

Amazon Lambda (if you want to edit your code and redeploy it) aws lambda update-function-code \ —function-name hipy \ —zip-file fileb://hello.zip Run your lambda function: aws lambda invoke —function-name hipy output.txt @lornajane

Slide 12

Slide 12

Hello World Lambda def main(event, context): return { ‘message’:’Hello World’ } @lornajane

Slide 13

Slide 13

Hello World OpenWhisk def main(args): return { ‘message’:’Hello World’ } @lornajane

Slide 14

Slide 14

IBM Cloud Functions Get the wsk CLI tool or the bx tool with wsk plugin, then log in Zip and deploy/update your code like this: zip hello.zip main.py bx wsk action update —kind python:3 pydemo/hipy hello.zip pydemo is the package name @lornajane

Slide 15

Slide 15

IBM Cloud Functions To handle dependencies, add more files to your zip e.g to include the virtualenv: zip -r hello.zip main.py virtualenv @lornajane

Slide 16

Slide 16

IBM Cloud Functions Run your action from the CLI: bx wsk action invoke —blocking pydemo/hipy Enable web access and web request your action: bx wsk action update pydemo/hipy —web true curl https://openwhisk.eu-gb.bluemix.net/api/v1/web/ \ Lorna.Mitchell_dev/pydemo/hipy.json @lornajane

Slide 17

Slide 17

The Fun Part @lornajane

Slide 18

Slide 18

Alexa: Amazon Echo You speak, the device sends the sound to the cloud and speaks back the response @lornajane

Slide 19

Slide 19

Invoking Alexa @lornajane

Slide 20

Slide 20

Invoking Alexa @lornajane

Slide 21

Slide 21

Invoking Alexa @lornajane

Slide 22

Slide 22

Invoking Alexa @lornajane

Slide 23

Slide 23

Example: Airport Codes Skill code on GitHub: https://github.com/lornajane/alexa-airport-codes “Alexa, ask Airporter which airport has code CWL” @lornajane

Slide 24

Slide 24

Airport Codes: Code 1 import redis 2 3 def main(args): 4 redis_client = redis.StrictRedis(…) 5 code = args[‘request’][‘intent’][‘slots’][‘Code’][‘value’]; 6 a = redis_client.hgetall(“code:” + code) 7 airport_info = “Airport code ” + code 8 airport_info += ” is for ” + a[‘name’] 9 airport_info += ” in ” + a[‘country’] 10 11 speech = {“type”: “PlainText”, “text”: airport_info} 12 response = {“shouldEndSession”: “true”, “outputSpeech”: spe 13 return {“version”: “1.0”, “response”: response} @lornajane

Slide 25

Slide 25

Serverless In The Real World Beyond the trivial example, many things are possible: • connect to a datastore • make an API call • trigger other actions • … your imagination is the limit @lornajane

Slide 26

Slide 26

The Serverless Revolution @lornajane

Slide 27

Slide 27

Resources • IBM Cloud Functions: https://www.ibm.com/cloud-computing/bluemix/openwhisk • GitHub repo for Airport Codes skill: https://github.com/lornajane/alexa-airport-codes • OpenWhisk: https://openwhisk.incubator.apache.org/ • Redis: https://redis.io/ • My blog: https://lornajane.net @lornajane