Slide 1

Slide 1 text

© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Danilo Poccia, Technical Evangelist @danilop Serverless beyond Functions Jeff

Slide 2

Slide 2 text

What is Serverless?

Slide 3

Slide 3 text

Lambda Function Do whatever you want: It’s Your Code! Trigger

Slide 4

Slide 4 text

Lambda Function Trigger Do whatever you want: It’s Your Code! S3 Bucket Amazon API Gateway DynamoDB Table AWS IoT Rule Much More! Amazon CloudWatch

Slide 5

Slide 5 text

Lambda Function You can “chain” events to build Event-Driven Applications S3 Bucket DynamoDB Table Lambda Function

Slide 6

Slide 6 text

Serverless Case Studies PhotoVogue is an online photography platform. Launched in 2011 and part of Vogue Italia - which is owned by Condé Nast Italia - it allows upcoming photographers to showcase their work. The Benefits Quicker provisioning, from days to hours 90% faster Cut IT costs by around 30% Seamless scalability Amazon S3 AWS Lambda Amazon API Gateway Amazon CloudFront “With Amazon API Gateway and AWS Lambda, the user experience is up to 90% faster. That's for both photographers uploading images and the editorial team processing them.” Marco Viganò Head of Digital Development

Slide 7

Slide 7 text

Serverless Case Studies F-Secure Increases Customer Insight and Speeds Up Activation Using AWS “We’ve shown the rest of the company that we can put our ideas into action faster and save 70% on infrastructure costs by using AWS compared to running hardware on- premises…. We’re inspiring a shift toward the cloud, and microservices in particular, because of these great benefits.” Niina Ojala Service Lead

Slide 8

Slide 8 text

Serverless Case Studies UK Driver and Vehicle Licensing Agency Supports Secure, Data-Driven Innovation “We are decomposing our applications into smaller, discrete components so we can choose the most appropriate technology” An API-First Approach “We stood up a working prototype in just a few days using Amazon API Gateway. The speed with which we were able to deliver it was unprecedented” Matt Lewis Chief Architect, Driver and Vehicle Licensing Agency AWS Lambda Amazon API Gateway

Slide 9

Slide 9 text

Serverless by Design

Slide 10

Slide 10 text

Serverless by Design A visual approach to serverless development. Event-driven. Think. Build. Repeat.

Slide 11

Slide 11 text

Serverless by Design

Slide 12

Slide 12 text

Serverless by Design

Slide 13

Slide 13 text

Serverless by Design

Slide 14

Slide 14 text

Serverless by Design

Slide 15

Slide 15 text

Deploying SAM templates aws cloudformation package --template-file template.yaml --output-template-file template-output.yaml --s3-bucket --s3-prefix aws cloudformation deploy --template-file ./template-output.yaml --stack-name --capabilities CAPABILITY_IAM

Slide 16

Slide 16 text

Serverless by Design https://sbd.danilop.net https://github.com/danilop/ServerlessByDesign

Slide 17

Slide 17 text

AWS SAM Local https://github.com/awslabs/aws-sam-local

Slide 18

Slide 18 text

“Where” is Serverless?

Slide 19

Slide 19 text

Client Back End AWS Lambda

Slide 20

Slide 20 text

CDN Client Back End Devices Sensors Actuators AWS Lambda Gateway

Slide 21

Slide 21 text

AWS Greengrass

Slide 22

Slide 22 text

Lambda Functions on a Raspberry Pi AWS Greengrass Lambda Function

Slide 23

Slide 23 text

AWS Snowball Edge 100TB + Greengrass Core (≃ EC2 m4.4xlarge instance)

Slide 24

Slide 24 text

Snowball Edge Use Cases “Snowball Edge enables us to extend the innovative capabilities of HealthSuite, our cloud- enabled connected health ecosystem of devices, applications and digital tools supported by AWS, even when there is no network support.” Embedded Applications —Dale Wiggins, Business Leader, HealthSuite digital platform, Philips

Slide 25

Slide 25 text

Snowball Edge Use Cases “With AWS Snowball Edge, we can now collect 100 TB of data with no intermediate steps, and we can also analyze the images immediately using the onboard compute capabilities.” Remote Locations for data collection and analysis — Bob Cowen, Director of Hatfield Marine Research Center, Oregon State University

Slide 26

Slide 26 text

AWS Lambda@Edge Customize content delivery while reducing load on the origin Events / Triggers Take serverless to your users

Slide 27

Slide 27 text

Lambda@Edge Use Cases Demo build of a CloudFront+S3 distribution, using Lambda@Edge to secure its HTTP headers

Slide 28

Slide 28 text

Lambda@Edge Use Cases These processes include applying transactional labels to purchases so Blockbuster can track customer activity, and providing personalized recommendations based on previous purchases. Blockbuster runs serverless compute processes across AWS Regions and Amazon CloudFront edge locations (using Lambda@Edge) without provisioning or managing servers.

Slide 29

Slide 29 text

Let’s build a Web Chat…

Slide 30

Slide 30 text

Web Browser

Slide 31

Slide 31 text

Web Browser CloudFront Edge Location S3 Bucket HTTPS Static Content (HTML, CSS, JS)

Slide 32

Slide 32 text

Web Browser CloudFront Edge Location S3 Bucket HTTPS Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS)

Slide 33

Slide 33 text

Web Browser CloudFront Edge Location S3 Bucket Amazon API Gateway Lambda Function(s) DynamoDB Table(s) HTTPS Dynamic Content Database Access Execute Functions Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS)

Slide 34

Slide 34 text

Let’s make it more interactive…

Slide 35

Slide 35 text

Web Browser CloudFront Edge Location S3 Bucket Amazon API Gateway Lambda Function(s) DynamoDB Table(s) AWS IoT Topic(s) HTTPS Dynamic Content Database Access MQTT over Secure WebSockets (Publish, Subscribe) Execute Functions Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS)

Slide 36

Slide 36 text

Web Browser CloudFront Edge Location S3 Bucket Amazon API Gateway Lambda Function(s) DynamoDB Table(s) AWS IoT Topic(s) AWS IoT Rule(s) HTTPS Dynamic Content Database Access MQTT over Secure WebSockets (Publish, Subscribe) Subscribe Republish Execute Functions Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS)

Slide 37

Slide 37 text

Web Browser CloudFront Edge Location S3 Bucket Amazon API Gateway Lambda Function(s) DynamoDB Table(s) AWS IoT Topic(s) AWS IoT Rule(s) HTTPS Dynamic Content Database Access MQTT over Secure WebSockets (Publish, Subscribe) Subscribe Republish Execute Functions Execute Functions Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS) Publish

Slide 38

Slide 38 text

Web Browser CloudFront Edge Location S3 Bucket Amazon API Gateway Lambda Function(s) DynamoDB Table(s) AWS IoT Topic(s) AWS IoT Rule(s) HTTPS Dynamic Content Database Access MQTT over Secure WebSockets (Publish, Subscribe) Subscribe Republish Execute Functions Write to DynamoDB Execute Functions Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS) Publish

Slide 39

Slide 39 text

Web Browser CloudFront Edge Location S3 Bucket Amazon API Gateway Lambda Function(s) DynamoDB Table(s) AWS IoT Topic(s) AWS IoT Rule(s) Kinesis Stream(s) HTTPS Dynamic Content Database Access MQTT over Secure WebSockets (Publish, Subscribe) Subscribe Republish Execute Functions Streaming Data Write to DynamoDB Execute Functions Execute Functions (Micro-Batches) Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS) Publish

Slide 40

Slide 40 text

Web Browser CloudFront Edge Location S3 Bucket Amazon API Gateway Lambda Function(s) DynamoDB Table(s) AWS IoT Topic(s) AWS IoT Rule(s) Kinesis Stream(s) HTTPS Dynamic Content Database Access MQTT over Secure WebSockets (Publish, Subscribe) Subscribe Republish Execute Functions Streaming Data Write to DynamoDB Execute Functions Execute Functions (Micro-Batches) Amazon Cognito Authentication (AWS Temporary Credentials) Static Content (HTML, CSS, JS) Publish

Slide 41

Slide 41 text

What about Topics & Rules?

Slide 42

Slide 42 text

Web Browser AWS IoT Topics chat/in/${iot:ClientId} chat/out chat/pub/${room} chat/stream $aws/events/# Each client has a secure “input” topic to receive content from the back end All client can publish on an “output” topic, they are recognizable by their clientId All client can subscribe and receive from “public” topics Another “output” topic optimized for high volumes AWS IoT Lifecycle Events

Slide 43

Slide 43 text

Web Browser AWS IoT Topics AWS IoT Rules chat/in/${iot:ClientId} chat/out chat/pub/${room} chat/stream $aws/events/# Each client has a secure “input” topic to receive content from the back end All client can publish on an “output” topic, they are recognizable by their clientId All client can subscribe and receive from “public” topics Another “output” topic optimized for high volumes AWS IoT Lifecycle Events Lambda function to process important messages, such as a new client connection Republish rule to send messages to the corresponding room public topic Lambda function to process high volume dreaming data Kinesis Stream to manage high volume streaming data Lambda function to process AWS IoT Lifecycle Events Store all messages in a database, to be sent to the client on connection

Slide 44

Slide 44 text

Web Browser AWS IoT Topics AWS IoT Rules chat/in/${iot:ClientId} chat/out chat/pub/${room} chat/stream $aws/events/# Each client has a secure “input” topic to receive content from the back end All client can publish on an “output” topic, they are recognizable by their clientId All client can subscribe and receive from “public” topics Another “output” topic optimized for high volumes AWS IoT Lifecycle Events Lambda function to process important messages, such as a new client connection Republish rule to send messages to the corresponding room public topic Lambda function to process high volume dreaming data Kinesis Stream to manage high volume streaming data Lambda function to process AWS IoT Lifecycle Events Store all messages in a database, to be sent to the client on connection You can use this topic to inject JavaScript code in the browser

Slide 45

Slide 45 text

So how does the flow look like?

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

Demo https://chat.danilop.net/JeffConf

Slide 54

Slide 54 text

Code https://github.com/danilop/serverless-chat More Info http://docs.aws.amazon.com/iot/latest/developerguide/protocols.html http://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html

Slide 55

Slide 55 text

From Event-Driven Architectures…

Slide 56

Slide 56 text

…To Functional Programming?

Slide 57

Slide 57 text

Functional Programming Transforming Data Using Expressions (Functions) Without Side Effects Immutable Data Pure Functions Higher-Order Functions From “Research Topics in Functional Programming” ed. D. Turner, Addison-Wesley, 1990, pp 17–42. 1 Why Functional Programming Matters John Hughes The University, Glasgow Abstract As software becomes more and more complex, it is more and more important to structure it well. Well-structured software is easy to write and to debug, and provides a collection of modules that can be reused to reduce future programming costs. In this paper we show that two fea- tures of functional languages in particular, higher-order functions and lazy evaluation, can contribute significantly to modularity. As examples, we manipulate lists and trees, program several numerical algorithms, and im- plement the alpha-beta heuristic (an algorithm from Artificial Intelligence used in game-playing programs). We conclude that since modularity is the key to successful programming, functional programming o↵ers important advantages for software development. 1 Introduction This paper is an attempt to demonstrate to the larger community of (non- functional) programmers the significance of functional programming, and also to help functional programmers exploit its advantages to the full by making it clear what those advantages are. Functional programming is so called because its fundamental operation is the application of functions to arguments. A main program itself is written as a function that receives the program’s input as its argument and delivers the program’s output as its result. Typically the main function is defined in terms of other functions, which in turn are defined in terms of still more functions, until at the bottom level the functions are language primitives. All of these functions are much like ordinary mathematical functions, and in this paper they will be 1 An earlier version of this paper appeared in the The Computer Journal, 32(2):98–107, April 1989. Copyright belongs to The British Computer Society, who grant permission to copy for educational purposes only without fee provided the copies are not made for direct commercial advantage and this BCS copyright notice appears. https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

Slide 58

Slide 58 text

Let’s build a “Tag Cloud” from Your Pictures images

Slide 59

Slide 59 text

getLabels groupBy + renderHtml images Amazon Rekognition browser Event-Driven Architecture Let’s build a “Tag Cloud” from Your Pictures

Slide 60

Slide 60 text

renderHtml(groupBy(getLabels([images])), htmlParams) Functional View Let’s build a “Tag Cloud” from Your Pictures

Slide 61

Slide 61 text

renderHtml(groupBy(getLabels([images])), htmlParams) Functional View Let’s build a “Tag Cloud” from Your Pictures

Slide 62

Slide 62 text

renderHtml(groupBy(getLabels([images])), htmlParams) Functional View Let’s build a “Tag Cloud” from Your Pictures

Slide 63

Slide 63 text

renderHtml(groupBy(getLabels([images])), htmlParams) Functional View Let’s build a “Tag Cloud” from Your Pictures

Slide 64

Slide 64 text

map(f, [x1, x2, …, xn]) = [f(x1), f(x2), …, f(xn)] Higher-Order Functions filter(f, [x1, x2, …, xn]) = [xi if f(xi) is true] count([a, b, a, c, a, b]) = {a: 3, b: 2, c: 1}

Slide 65

Slide 65 text

renderHtml(groupBy(getLabels([images])), htmlParams) ⇩ renderHtml(count(map(getLabel, [images]))), htmlParams) Reusable More reusable

Slide 66

Slide 66 text

Lambda Functions + Step Functions Lambda Function Input State Machine Output translate create execute Tasks State passing (Immutable Data) Tasks are performed only if required (Lazy Evaluation) A Lambda Function dynamically creating a State Machine executing the logic

Slide 67

Slide 67 text

Event-Driven Architectures + Functional Programming + Standard Serverless Library Happy to get your feedback on this!

Slide 68

Slide 68 text

What is Serverless? “Build and run applications without thinking about servers”

Slide 69

Slide 69 text

© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Danilo Poccia, Technical Evangelist @danilop Serverless beyond Functions Jeff