Serverless for Developers

Serverless for Developers

Cloud Conf, Turin, March 16th, 2017

Tips for Your Next App.

7c9b8b368924556d8642bdaed3ded1f5?s=128

Danilo Poccia

March 16, 2017
Tweet

Transcript

  1. Serverless for Developers Tips for Your Next App Danilo Poccia

    @danilop danilop AWS Technical Evangelist
  2. Danilo Poccia With AWS Lambda, you write your code and

    upload it to the AWS cloud. AWS Lambda responds to the events triggered by your application or your users, and auto- matically manages the underlying computer resources for you. Back-end tasks like analyzing a new document or processing requests from a mobile app are easy to implement. Your ap- plication is divided into small functions, leading naturally to a reactive architecture and the adoption of microservices. AWS Lambda in Action is an example-driven tutorial that teaches you how to build applications that use an event-driven approach on the back-end. Starting with an overview of AWS Lambda, the book moves on to show you common examples and patterns that you can use to call Lambda functions from a web page or a mobile app. The second part of the book puts these smaller examples together to build larger applications. By the end, you’ll be ready to create applications that take advantage of the high availability, security, performance, and scalability of AWS. What’s Inside • Create a simple API • Create an event-driven media sharing application • Secure access to your application in the cloud • Use functions from different clients like web pages or mobile apps • Connect your application with external services Requires basic knowledge of JavaScript. Some examples are also provided in Python. No AWS experience is assumed. Danilo Poccia is a technical evangelist at Amazon Web Services and a frequent speaker at public events and workshops. To download their free eBook in PDF, ePub, and Kindle formats, owners of this book should visit www.manning.com/books/aws-lambda-in-action $49.99 / Can $57.99 [INCLUDING eBOOK] AWS Lambda IN ACTION SOFTWARE DEVELOPMENT/CLOUD Danilo Poccia M A N N I N G AWS Lambda IN ACTION MANNING “Clear and concise … the code samples are as well structured as the writing.” —From the Foreword by James Governor, RedMonk “A superb guide to an important aspect of AWS.” —Ben Leibert, VillageReach “Step-by-step examples and clear prose make this the go-to book for AWS Lambda!.” —Dan Kacenjar, Wolters Kluwer “Like Lambda itself, this book is easy to follow, concise, and very functional.” —Christopher Haupt, New Relic M A N N I N G SEE INSERT Danilo Poccia FOREWORD BY James Governor Event-driven serverless applications
  3. Function

  4. <demo> greetingsOnDemand </demo>

  5. Function

  6. Function

  7. Client Application Function invoke

  8. Client Application Function Database Files invoke read/write

  9. Client Application Function2 Database Files Function1 Function3 invoke event trigger

    event trigger read/write
  10. Business Logic Client Application Function2 Database Files This image cannot

    currently be displayed. Function1 Function3 invoke event trigger event trigger read/write
  11. Data Persistence Business Logic Client Application Function2 Database Files Function1

    Function3 invoke event trigger event trigger read/write
  12. Data Persistence Business Logic Client Application Functions Functions Functions Repositories

    Repositories Repositories API read/write event trigger
  13. Data Persistence Business Logic Client Application Functions Functions Functions Repositories

    Repositories Repositories API read/write event trigger read/write
  14. Data Persistence Business Logic Client Application Functions Functions Functions API

    Gateway Repositories Repositories Repositories API read/write event trigger read/write
  15. Request – Input Format { "resource": "Resource path", "path": "Path

    parameter", "httpMethod": "Incoming request's method name", "headers": { Incoming request headers }, "queryStringParameters": { Query string parameters }, "pathParameters": { Path parameters }, "stageVariables": { Applicable stage variables }, "requestContext": { Request context, including authorizer-returned key-value pairs }, "body": "A JSON string of the request payload", "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode" } Response – Output Format { "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "...” } Lambda Function Amazon API Gateway
  16. <demo> greetingsAPI </demo>

  17. How do I start?

  18. No Servers to Manage Continuous Scaling Subsecond Metering AWS Lambda

    1 Million requests per month 400,000 GB-seconds per month Free Tier
  19. https://github.com/awslabs/chalice $ pip install chalice $ chalice new-project helloworld &&

    cd helloworld $ cat app.py from chalice import Chalice app = Chalice(app_name="helloworld") @app.route("/") def index(): return {"hello": "world"} $ chalice deploy ... Your application is available at: https://endpoint/dev $ curl https://endpoint/dev {"hello": "world"}
  20. https://serverless.com

  21. https://github.com/awslabs/aws-serverless-auth-reference-app Serverless reference app and backend API, showcasing authentication and

    authorization patterns using Amazon Cognito, Amazon API Gateway, AWS Lambda, and AWS IAM
  22. Building An Infinitely Scalable Online Recording Campaign For David Guetta

    & UEFA
  23. Do I need to rebuild everything?

  24. https://github.com/awslabs/aws-serverless-express This library enables you to utilize AWS Lambda and

    Amazon API Gateway to respond to web and API requests using your existing Node.js application framework
  25. https://github.com/awslabs/aws-serverless-java-container A Java wrapper to run Jersey, Spark, and other

    apps inside AWS Lambda
  26. How to go beyond the timeout?

  27. function processList(itemList, context) { var item = itemList.shift(); processItem(item, ()

    => { if (itemList.length === 0) { console.log('Finished'); } else if (context.getRemainingTimeInMillis() > TIME_THRESHOLD) { // Process remaning items processList(itemList, context); } else { console.log('Not finished'); // Time is running out, // invoke self asynchrounously to process remaning items invokeSelf(itemList, context); } }); } For example…
  28. What about larger apps?

  29. https://github.com/awslabs/serverless-application-model

  30. </> Serverless Continuous Integration and Deployment GitHub Amazon S3 AWS

    CodeCommit AWS CodeBuild AWS CodeBuild third-party tools AWS CloudFormation Commit Build Test Deploy to Prod AWS CodePipeline + SAM
  31. AWS Step Functions Sequential Steps Branching Steps (Choice of Path)

    Parallel Steps
  32. https://states-language.net/spec.html

  33. Event-Driven Architecture

  34. Name Email Create New User Submit Check the “Name” syntax

    is right (only letters and spaces) Check the “Email” syntax is right (something@some.domain) Create the new user using provided Name and Email User Interface Actions
  35. Name Email Create New User Submit Check the “Name” syntax

    is right (only letters and spaces) Check the “Email” syntax is right (something@some.domain) Create the new user using provided Name and Email User Interface Actions Observers Target Action
  36. Generate thumbnails Keep another database in sync Process streaming data

    Services Functions Platform Target Action Kinesis Stream DynamoDB Table S3 Bucket
  37. area = length x width What do you see here?

  38. area = length x width Procedural Programming “This is a

    function!”
  39. area = length x width Procedural Programming “This is a

    function!” Reactive Programming “This is data binding!”
  40. To Leverage Even-Driven Architectures, You May Need to Take a

    Different Point of View
  41. A B Event-Driven Design For Services ”Service A triggers B"

    or better ”Service B is caused by A"
  42. A B C D E F ? ? What is

    causing services E and F?
  43. A B C D E F New services (E, F)

    are triggered caused by C
  44. A B C D E F It can be cyclic

    Think of acknowledgements
  45. Each service has local visibility A B C D E

    F
  46. What I need to know (input events) 1 A B

    C D E F
  47. What I need to do (internal logic) 2 A B

    C D E F
  48. Who I need to notify (output events) 3 A B

    C D E F
  49. Who I need to notify (output events) What I need

    to know (input events) What I need to do (internal logic) 1 2 3 B
  50. “…a diagram of two microservices and their shared database” Data

    should drive the boundaries
  51. Lambda Everywhere

  52. AWS Greengrass

  53. AWS Snowball Edge

  54. AWS Snowball Edge

  55. AWS Snowmobile

  56. Lambda@Edge

  57. Build Apps With Services, Not Servers

  58. https://aws.amazon.com/lambda https://github.com/awslabs/aws-serverless-auth-reference-app https://github.com/awslabs/aws-serverless-express https://github.com/awslabs/chalice https://github.com/awslabs/aws-serverless-java-container https://serverless.com https://github.com/awslabs/serverless-application-model https://states-language.net/spec.html https://github.com/danilop/AWS_Lambda_in_Action For

    Your Reference
  59. Serverless for Developers Tips for Your Next App Danilo Poccia

    @danilop danilop AWS Technical Evangelist