PortingyourNode.jsappto serverlessin 30...

22
Alex Casalboni Technical Evangelist, AWS @alex_casalboni @ 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved Porting your Node.js app to serverless in 30 minutes

Transcript of PortingyourNode.jsappto serverlessin 30...

Page 1: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Alex CasalboniTechnical Evangelist, AWS

@alex_casalboni

@ 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved

Porting your Node.js app to serverless in 30 minutes

Page 2: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

About me

• Software Engineer & Web Developer• Startupper for 4.5 years• Serverless Lover & AI Enthusiast• ServerlessDays Organizer• AWS Customer since 2013

Page 3: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Agenda

1. Why serverless computing2. AWS Lambda & Node.js3. Live coding

Page 4: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Why serverless computing

Page 5: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Serverless Computing in a nutshell

No servers to provision or manage

Scales with usage

Never pay for idle Built-in availability and fault tolerance

Page 6: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Event-driven architectures

Services (anything)

Changes in data state

Requests to endpoints

Changes in resource state

Event source Serverless Function

Node.js (6.10, 8.10)Python (2.7, 3.6)Java (8)Go (1.x).NET core (1.0, 2.0, 2.1)C#, F#, PowerShell

Page 7: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Object storage

NoSQL Database

Real-time data ingestion

IaC provisioning & automation

Auditing & Compliance

Platform Events

User Authentication

Pub/SubTopics

Email hooks (in/out-bound)

Crojobs(scheduled)

Data stores Endpoints

Configuration repositories Event/message services

Event Sources

Source Control (Git)

HTTP interface(RESTful)

Chatbots and voice-apps

MQTT interface

Functions orchestration

Message Queues

Page 8: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Amazon S3 Amazon DynamoDB

Amazon Kinesis

AWS CloudFormation

AWS CloudTrail

Amazon CloudWatch

Amazon Cognito

Amazon SNSAmazonSES

Cron events

Data stores Endpoints

Configuration repositories Event/message services

Event Sources (AWS)

AWS CodeCommit

AmazonAPI Gateway

AmazonAlexa

AWS IoT AWS Step Functions

AmazonSQS

Page 9: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Common Use Cases

Web apps

• Static websites

• Complex web apps

• Packages for Flask and Express

Data processing

• Real time

• MapReduce

• Batch

• Machine learning inference

Chatbots

• Powering chatbot logic

Backends

• Apps and services

• Mobile

• IoT

</></>

Amazon Alexa

• Powering voice-enabled apps

• Alexa Skills Kit

IT automation

• Policy engines

• Extending AWS services

• Infrastructure management

Page 10: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.
Page 11: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.
Page 12: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Who’s using AWS Lambda?

Page 13: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

AWS Serverless Application Model (SAM)

Simplified template-driven deployment model for serverless applications

New serverless resource types

An extension (Macro) of AWS CloudFormation

Open specification (Apache 2.0)

github.com/awslabs/serverless-application-model

Page 14: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

AWSTemplateFormatVersion: '2010-09-09'Resources:

GetHtmlFunctionGetHtmlPermissionProd:Type: AWS::Lambda::PermissionProperties:

Action: lambda:invokeFunctionPrincipal: apigateway.amazonaws.comFunctionName:

Ref: GetHtmlFunctionSourceArn:

Fn::Sub: arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/Prod/ANY/*ServerlessRestApiProdStage:

Type: AWS::ApiGateway::StageProperties:

DeploymentId:Ref: ServerlessRestApiDeployment

RestApiId:Ref: ServerlessRestApi

StageName: ProdListTable:

Type: AWS::DynamoDB::TableProperties:

ProvisionedThroughput:WriteCapacityUnits: 5ReadCapacityUnits: 5

AttributeDefinitions:- AttributeName: id

AttributeType: SKeySchema:- KeyType: HASH

AttributeName: idGetHtmlFunction:

Type: AWS::Lambda::FunctionProperties:

Handler: index.gethtmlCode:

S3Bucket: flourish-demo-bucketS3Key: todo_list.zip

Role:Fn::GetAtt:- GetHtmlFunctionRole- Arn

Runtime: nodejs4.3GetHtmlFunctionRole:

Type: AWS::IAM::RoleProperties:

ManagedPolicyArns:

- arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRoleAssumeRolePolicyDocument:

Version: '2012-10-17'Statement:- Action:

- sts:AssumeRoleEffect: AllowPrincipal:

Service:- lambda.amazonaws.com

ServerlessRestApiDeployment:Type: AWS::ApiGateway::DeploymentProperties:

RestApiId:Ref: ServerlessRestApi

Description: 'RestApi deployment id: 127e3fb91142ab1ddc5f5446adb094442581a90d'StageName: Stage

GetHtmlFunctionGetHtmlPermissionTest:Type: AWS::Lambda::PermissionProperties:

Action: lambda:invokeFunctionPrincipal: apigateway.amazonaws.comFunctionName:

Ref: GetHtmlFunctionSourceArn:

Fn::Sub: arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/*/ANY/*ServerlessRestApi:

Type: AWS::ApiGateway::RestApiProperties:

Body:info:

version: '1.0'title:

Ref: AWS::StackNamepaths:

"/{proxy+}":x-amazon-apigateway-any-method:

x-amazon-apigateway-integration:httpMethod: ANYtype: aws_proxyuri:

Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetHtmlFunction.Arn}/invocations

responses: {}swagger: '2.0'

CloudFormation template

Page 15: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

SAM Template

Tells AWS CloudFormation this is a SAM template it needs to transform

Creates a Lambda function with the referenced managed IAM policy, runtime, code at the referenced zip location, and handler as defined. Also creates an API Gateway and takes care of all mapping and permissions necessary

AWSTemplateFormatVersion: '2010-09-09’

Transform: AWS::Serverless-2016-10-31

Resources:

GetHtmlFunction:

Type: AWS::Serverless::Function

Properties:

CodeUri: s3://sam-demo-bucket/todo_list.zip

Handler: index.gethtml

Runtime: nodejs4.3

Policies: AmazonDynamoDBReadOnlyAccess

Events:

GetHtml:

Type: Api

Properties:

Path: /{proxy+}

Method: ANY

Page 16: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

github.com/awslabs/aws-sam-cli

AWS SAM CLI

CLI tool for local testing of serverless apps

Works with Lambda functions and “proxy-style” APIs

Response object and function logs available on your local machine

Uses open-source Docker-Lambda images to mimic Lambda’s execution environment (timeout, memory limits, runtimes)

Page 17: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

AWS Lambda & Node.js

Page 18: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Nov 2014

Node.js 0.10.4

Apr 2016

Node.js 4.3.2

Mar 2017

Node.js 6.10

Apr 2018

Node.js 8.10

???

???

Node.js support for AWS Lambda

Page 19: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Porting a Node.js appto AWS Lambda

Page 20: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Coding time!

Page 21: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

github.com/alexcasalboni/express-app-serverless-porting

Page 22: PortingyourNode.jsappto serverlessin 30 minutesaws-decks-alex-casalboni.s3-website-eu-west-1.amazonaws.com/nodejs... · 2.AWS Lambda & Node.js 3.Live coding. Why serverless computing.

Alex CasalboniTechnical Evangelist, AWS

Thank you!

@alex_casalboni

@ 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved

joind.in/talk/90d09