+ All Categories
Home > Technology > AWS Lambda and Serverless framework: lessons learned while building a serverless company

AWS Lambda and Serverless framework: lessons learned while building a serverless company

Date post: 08-Feb-2017
Category:
Upload: luciano-mammino
View: 184 times
Download: 1 times
Share this document with a friend
82
AWS Lambda & Serverless framework Lessons learned while building a serverless company 26/01/2017 @Podgeypoos79 - @loige
Transcript
Page 1: AWS Lambda and Serverless framework: lessons learned while building a serverless company

AWS Lambda &Serverless framework Lessons learned while building a serverless company

26/01/2017@Podgeypoos79 - @loige

Page 3: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Padraig O’Brien (a.k.a “Podge”)

● @podgeypoos79 on Twitter

● Does not have a book (yet…)

● Organiser of Nodeschool Dublin and Dun Laoghaire

● Organiser of Dublin Serverless meetup

● He is writing his own database, unicorndb �

Page 4: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Agenda

● Planet 9 Energy● Serverless● Security● Quality● Developer Experience● Costs● Lessons learned

Page 6: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 7: AWS Lambda and Serverless framework: lessons learned while building a serverless company

17.520 * * 24

Meter readings Customer size Data versions

≈4 billion data pts / year (tot.)

SMALL customer ≈3 mln data pts / year MEDIUM customer ≈20 mln data pts / year BIG customer ≈110 mln data pts / year

( Per customer / year )

Page 8: AWS Lambda and Serverless framework: lessons learned while building a serverless company

● Limited number of “Full stack” engineers

● Write & deploy quality code as fast as possible

● Adopt hot and relevant technologies

● No servers... or more to the point, NO CALLS AT 2 AM!

Our requirements

Page 9: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Early experiments

Page 10: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Current Technology

Page 11: AWS Lambda and Serverless framework: lessons learned while building a serverless company

“Serverless”Meaning

Serverless frameworkAWS Lambda

Page 12: AWS Lambda and Serverless framework: lessons learned while building a serverless company

What does “serverless” mean?

Page 13: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Why Serverless framework?

Page 14: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Anatomy of Serverless.yml

Serverless.yml header

Page 15: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Defining functions and events

Page 16: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Why?

Page 17: AWS Lambda and Serverless framework: lessons learned while building a serverless company

What is a lambda?

● Function as a service (FAAS)

● Pay for invocation / processing time

● Virtually “infinite” auto-scaling

● Focus on business logic, not on serversdaaaa!

Page 18: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Lambda as micro-services

● Events are first-class citizens● Every lambda scales independently● Agility (develop features quick and in an isolated fashion)

Classic micro-services concerns:

● Granularity (how to separate features? BDD? Bounded Contexts?)● Orchestration (dependencies between lambdas, service discovery…)

Page 19: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Anatomy of a Lambda in Node.js

Page 20: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Some use cases

● REST over HTTP (API Gateway)

● SNS messages

● Schedule/Cron

● DynamoDB data changes

● S3 files changes

● IoT

Page 21: AWS Lambda and Serverless framework: lessons learned while building a serverless company

HTTP REQUEST - API Call

POST /hello/Elvis?foo=bar

{ “test”: “body”}

Page 22: AWS Lambda and Serverless framework: lessons learned while building a serverless company

SecurityAuthentication AuthorizationSensitive data

Page 23: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Authentication

(JWT tokens) Custom“authorizer lambda”

“Who is the current user?”

Page 24: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Users

API 1

Authentication

AuthorizerAPI 2

API 3

CredentialsAPI

Request

JWT token

JWT tokenVerify credentials

Validate token& extract userId

User: Podge Pass: Unicorns

Page 25: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Authorization

“Can Podge trade for Account23 ?”

User Action Resource

Page 26: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Authorization

● Custom ACL library imported by every lambda

● Built on top of:

○ node-acl

○ Knex.js

● Persistence in Postgres

User Action Resource

Podge trade Account23

Podge changeSettings Account23

Luciano delete *

... ... ...

Page 27: AWS Lambda and Serverless framework: lessons learned while building a serverless company

ACL Lib Example

Page 28: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Environment variables

Page 29: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 30: AWS Lambda and Serverless framework: lessons learned while building a serverless company

QualityTesting

Continuous IntegrationDeployment

Page 32: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Unit Testing

● Split business logic into small testable modules

● Use dependency injection for external resources

(DB, Filesystem, etc.)

● Mock dependencies with Sinon

● Aim for 100% coverage

Page 33: AWS Lambda and Serverless framework: lessons learned while building a serverless company

● Use child_process.exec to launch “serverless invoke local”

● Use node-tap to make assertions on the output

● Test environment recreated locally with docker (e.g. Postgres test DB).

● Cannot always test locally (Redshift, SNS, SQS…)

Functional Testing

Page 34: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Functional test with sls invoke local

Page 35: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Building the project

Page 36: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Babel custom preset (transpile to Node 4.3.2)

Page 37: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Build process

JSdoc

Up to 90% code size reductionUsing Webpack 2 “tree-shaking”

Page 38: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Continuous Integration

Git-Flow● Check code style (ESLint)

● Run unit tests

● Build the project

● Run functional tests

● If commit is on “master”:

Create deployable artifact

● Develop features/fixes locally

using git branches

● Push to GitHub

Page 39: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Deployments

local test dev qa production

Deploy lambdas and React apps

Page 40: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 41: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 42: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Downloading the artifact from CircleCI

Page 43: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Deploying the code using Serverless

Page 44: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Developer ExperienceLocal development

DebuggingMonitoring

Page 45: AWS Lambda and Serverless framework: lessons learned while building a serverless company

● Develop locally - Invoke local.

● Deploy to AWS.

● Invoke on AWS and stream the logs.

● This is a SLOW feedback loop.

● Lots of requests to improve local dev.

● Plugins are helping to improve this.

Local development

Page 46: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Serverless Plugins

Page 47: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Serverless Offline

Page 48: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Serverless Api Gateway Logs

Page 49: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Serverless Mocha

Page 50: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Monitoring

Page 51: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 52: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 53: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 54: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 55: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 56: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 57: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 58: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 59: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 60: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 61: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 62: AWS Lambda and Serverless framework: lessons learned while building a serverless company

CostThe formula

Cost forecasts

Page 63: AWS Lambda and Serverless framework: lessons learned while building a serverless company

$ = Time * Memory * Invocation

Page 64: AWS Lambda and Serverless framework: lessons learned while building a serverless company

http://serverlesscalc.com

Page 65: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Our current Lambda costs

Page 66: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Lessons learned( we found out…)

Page 67: AWS Lambda and Serverless framework: lessons learned while building a serverless company

DEBUGGING

Page 68: AWS Lambda and Serverless framework: lessons learned while building a serverless company

How do we do debug then...

● console.log … �

● Using debug module

● Enabling detailed logs only when needed (per feature)

Page 69: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 70: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Learn Cloudformation

Page 71: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 72: AWS Lambda and Serverless framework: lessons learned while building a serverless company
Page 73: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Api GatewayCustom domain mapping

It is a manual step…

Page 74: AWS Lambda and Serverless framework: lessons learned while building a serverless company

With Api Gateway...You have 10 30 seconds!

Page 75: AWS Lambda and Serverless framework: lessons learned while building a serverless company

AWS Lambda limitations

● 512 MB of TMP space

● Lambdas can only execute for 300 seconds

● Request Response size of 6 MB

● Event size of 128 Kb

● Max 50 MB for deployment package

Page 76: AWS Lambda and Serverless framework: lessons learned while building a serverless company

AWS Soft limits

http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html

Page 77: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Cold starts...

☃�

Page 79: AWS Lambda and Serverless framework: lessons learned while building a serverless company

serverlessbeer.com

is a real thing!

Well… it’s not, but it’s a good idea!

(read the tutorial)

Page 80: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Recap

● Serverless architectures are COOL!

○ Infinite scalability at low cost

○ Managed service

○ Still has some limitations

● Managing a project might be hard but:

○ Technology progress and open source projects (Serverless.com) will make things easier

Page 81: AWS Lambda and Serverless framework: lessons learned while building a serverless company

Planet 9 Energy tech-team

We are hiring :)

Peter Saŝa Podge Luciano YOU?

Alberto Joe DomagojHugh Gus Ruth

Check outLoki.js

Page 82: AWS Lambda and Serverless framework: lessons learned while building a serverless company

THANK YOU

Planet9energy.com - [email protected]

Special Thanks to @johnbrett_

Use the , Luke!


Recommended