Slide 1

Slide 1 text

Fun With Serverless Apps Lorna Mitchell, IBM

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

The Serverless Revolution Faas: Functions As A Service You focus only on: • the inputs • the outputs • the logic in between Charges are usually per GBsec @lornajane

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Getting Started @lornajane

Slide 6

Slide 6 text

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 JS, and zip it (for me: index.js -> hello.zip) @lornajane

Slide 7

Slide 7 text

Amazon Lambda Create your lambda function by supplying the zip file and some options: aws lambda create-function \ --function-name hello1 \ --runtime nodejs6.10 \ --role "arn:aws:iam::283476131276:role/service-role/Alexa" --description "A demo first Lambda function" \ --handler index.handler \ --zip-file fileb://hello.zip @lornajane

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Hello World Lambda exports.handler = function(event, context) { context.succeed("Hello, World!"); }; @lornajane

Slide 10

Slide 10 text

Hello World OpenWhisk exports.main = function(args) { return({"message": "Hello, World!"}); }; @lornajane

Slide 11

Slide 11 text

Bluemix OpenWhisk Get the wsk CLI tool, and log it in using copied command from web interface Zip and deploy/update your code zip hello.zip index.js wsk action update --kind nodejs:6 demo/hello1 hello.zip demo is the package name @lornajane

Slide 12

Slide 12 text

Bluemix OpenWhisk Run your action from the CLI: wsk action invoke --blocking demo/hello1 Enable web access, and web request your action: wsk action update demo/hello1 --web true curl https://openwhisk.ng.bluemix.net/api/v1/web/ \ Lorna.Mitchell_Working/demo/hello1.json @lornajane

Slide 13

Slide 13 text

Serverless + HTTP FaaS + HTTP = Microservices! @lornajane

Slide 14

Slide 14 text

Microservices @lornajane

Slide 15

Slide 15 text

The Fun Part @lornajane

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Example: Project Codename https://www.npmjs.com/package/project-name-generator "Alexa, ask Project Codename for a new project name" @lornajane

Slide 18

Slide 18 text

Example: Project Codename https://www.npmjs.com/package/project-name-generator "Alexa, ask Project Codename for a new project name" @lornajane

Slide 19

Slide 19 text

Example: Project Codename https://www.npmjs.com/package/project-name-generator "Alexa, ask Project Codename for a new project name" @lornajane

Slide 20

Slide 20 text

Example: Project Codename https://www.npmjs.com/package/project-name-generator "Alexa, ask Project Codename for a new project name" @lornajane

Slide 21

Slide 21 text

Project Codename: the Setup Use the Alexa dashboard to create your "skill" • Skill name: appears in the dashboard • Language: Your skill must be enabled for your region • Endpoint: a Lambda ARN or an HTTP endpoint @lornajane

Slide 22

Slide 22 text

Project Codename: the Setup Utterances - what the user can say to get this to work Format: [intent] [words the user can say] NewCodename for a new name NewCodename for a new project name NewCodename for a new project codename RecentCodenames about recent codenames RecentCodenames to say that again RecentCodenames to repeat codenames There is also an Interaction Builder @lornajane

Slide 23

Slide 23 text

Project Codename: the Code function main(args) { var generate = require('project-name-generator'); var random = generate().spaced; var response = { "version": "1.0", "response" :{ "shouldEndSession": true, "outputSpeech": { "type": "PlainText", "text": "project codename. " + random } } } return(response); } exports.main = main; @lornajane

Slide 24

Slide 24 text

Project Codename: invoke wsk action invoke --blocking alexa/project-codename ... random 2-word responses appear. @lornajane

Slide 25

Slide 25 text

Project Codename: voice Let's ask Alexa! @lornajane

Slide 26

Slide 26 text

A Fun Conversation @lornajane

Slide 27

Slide 27 text

Quiz: the Setup This skill asks the user a simple maths question • Intent: Quiz • Slots: Number (there are predefined data types) The "dialog" feature helps to prompt the user for input There is a "session" to store data between requests @lornajane

Slide 28

Slide 28 text

Quiz: the Conversation Human Alexa, ask Lorna for a quiz Alexa Ready? What is three plus five? Human Eight! Alexa Well done! Eight is correct. OR Human Fourty-two! Alexa You said fourty-two, but the correct answer is eight. @lornajane

Slide 29

Slide 29 text

Quiz: Step by Step Human Alexa, ask Lorna for a quiz { "version":"1.0", "session":{ "new":true }, "request":{ "type":"IntentRequest", "intent":{"name":"Quiz", "confirmationStatus":"NONE", "slots":{ "Number":{ "name":"Number", "confirmationStatus":"NONE" } } }, "dialogState":"STARTED" } } @lornajane

Slide 30

Slide 30 text

Quiz: Step by Step Alexa Ready? What is three plus five? { "outputSpeech":{ "type":"PlainText", "text":"Ready? What is 3 plus 5?" }, "directives":[ { "type":"Dialog.ElicitSlot", "slotToElicit":"Number" } ], "shouldEndSession":"false" } @lornajane

Slide 31

Slide 31 text

Quiz: Step by Step Human Eight! { "version": "1.0", "session": { "new": false }, "request": { "type": "IntentRequest", "intent": { "name": "Quiz", "confirmationStatus": "NONE", "slots": { "Number": { "name": "Number", "value": "8", "confirmationStatu } }, "dialogState": "IN_PROGRESS" } } @lornajane

Slide 32

Slide 32 text

Quiz: Step by Step Alexa Well done! Eight is correct. { "outputSpeech":{ "type":"PlainText", "text":"Well done! 8 is correct" }, "shouldEndSession":"true" } @lornajane

Slide 33

Slide 33 text

The Serverless Revolution @lornajane

Slide 34

Slide 34 text

Resources • Project codename skill: https://github.com/lornajane/alexa-project-codename • Serverless framework: https://github.com/serverless/serverless • OpenWhisk on Bluemix: https://www.ibm.com/cloud-computing/bluemix/openwhisk • My blog: https://lornajane.net @lornajane