node withoutservers aws-lambda
TRANSCRIPT
![Page 1: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/1.jpg)
Node Without Servers: Event-Driven Computing with AWS LambdaBrian Klaas Johns Hopkins Bloomberg School of Public Health
[email protected] @brian_klaas www.iterateme.com
![Page 2: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/2.jpg)
Events
![Page 3: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/3.jpg)
![Page 4: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/4.jpg)
![Page 5: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/5.jpg)
![Page 6: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/6.jpg)
![Page 7: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/7.jpg)
![Page 8: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/8.jpg)
![Page 9: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/9.jpg)
![Page 10: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/10.jpg)
![Page 11: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/11.jpg)
What is and how does it work?
What good can do for me?
![Page 12: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/12.jpg)
+ =
![Page 13: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/13.jpg)
Code Memory setting Timeout setting
![Page 14: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/14.jpg)
Event
![Page 15: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/15.jpg)
Full AWS Linux AMI (ami-dfc39aef, Linux Kernel 3.14.35-28.38.amzn1.x86_64)
Node v0.10.33 ImageMagick AWS JS SDK v2.1.22
Up to 1024MB RAM and 512MB of ephemeral disk storage
![Page 16: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/16.jpg)
*
* May not actually be Docker
![Page 17: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/17.jpg)
Every event Every config change Every code change
= new ( )
![Page 18: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/18.jpg)
![Page 19: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/19.jpg)
Lambda = one function
![Page 20: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/20.jpg)
exports.handler = function(event, context) {console.log('Hello', event);// more JS goes herecontext.done(null, 'Success');
}
![Page 21: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/21.jpg)
Initialization code
Handler code
Code terminatesTimeoutcontext.done context.success context.failAll callbacks finished
Event
Context
?
![Page 22: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/22.jpg)
Never assume Lambda will re–use a container.
![Page 23: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/23.jpg)
Pricing: Charged by Compute TimeFree TierFirst million requests are free
400,000 GB-seconds of compute time
220 hours of free compute time per month @ 512MB of RAM
Paid Tier$0.20 per 1 million requests thereafter
$0.00001667 for every GB-second
http://aws.amazon.com/lambda/pricing
* You also have to pay for in/out data transfer fees
![Page 24: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/24.jpg)
Event–Driven Computing
![Page 25: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/25.jpg)
Event notification Run a compute cycle Shut down
![Page 26: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/26.jpg)
Where do events come from?
![Page 27: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/27.jpg)
DynamoDB
S3 AWS SDK
Kinesis
Cognito
SNS
Custom EventsCloudFormation
![Page 28: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/28.jpg)
S3Fast, durable, cheap storage Events on file put/post, copy
![Page 29: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/29.jpg)
Many AWS services can post to SNS
GitHub has a post-commit hookSNS
![Page 30: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/30.jpg)
All SDKs support Lambda function invocation
Java, Ruby, Node, Python, JavaScript, PHP, .NET, iOS, Android, and the CLI
AWS SDK
Custom Events
![Page 31: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/31.jpg)
Lambda in Action
![Page 32: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/32.jpg)
1Template Example
![Page 33: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/33.jpg)
IAM Identity Access Management
![Page 34: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/34.jpg)
IAMUsers Groups Roles
AccessKey + SecretKey
![Page 35: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/35.jpg)
IAM
![Page 36: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/36.jpg)
IAM
Roles = JSON{ "Version":"2008-10-17", "Id":"http referrer policy example", "Statement":[ { "Sid":"Allow get requests referred by www.mysite.com and mysite.com", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::example-bucket/*", "Condition":{ "StringLike":{ "aws:Referer":[ "http://www.mysite.com/*", "http://mysite.com/*" ] } } } ] }
![Page 37: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/37.jpg)
How do we know it’s done?
![Page 38: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/38.jpg)
When responding to events from within AWS, we don’t.
![Page 39: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/39.jpg)
4Notifying that It’s Done
![Page 40: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/40.jpg)
Options for notifying that work is completeSQS SNS (http, SMS, email) DynamoDB table File updating in S3
![Page 41: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/41.jpg)
Only one Lambda function per S3 bucket.
![Page 42: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/42.jpg)
5Custom Events
![Page 43: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/43.jpg)
AWS SDK
Custom Events
AWS CLI
![Page 44: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/44.jpg)
Event body [Event context]
![Page 45: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/45.jpg)
Custom events are synchronous calls
Default invocation-type: RequestResponse invocation-type: Event for async events
![Page 46: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/46.jpg)
Invoking via the CLI using ColdFusion
![Page 47: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/47.jpg)
Invoking via the CLI aws lambda invoke --function-name myFunctionName --payload '{"key1":"value1", "key2":"value2", "key3":"value3"}' outfile.txt
Name of your Lambda function
Response is written to a file. This is the name of that file.
JSON passed in to the Lambda function as the “event” structure.
Note you can specify --payload file://input.txt to use a file instead.
![Page 48: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/48.jpg)
On–demand Node functionality
![Page 49: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/49.jpg)
What Good is Lambda Anyway?
![Page 50: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/50.jpg)
Asynchronous task server Background job processor
![Page 51: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/51.jpg)
S3 Event Handler
![Page 52: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/52.jpg)
Media conversion serviceImageMagick Native modules AWS Elastic Transcoder
![Page 53: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/53.jpg)
Real–time analytics aggregator
![Page 54: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/54.jpg)
Microservice backend?
![Page 55: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/55.jpg)
Lambda is great when every event is independent and can be processed incrementally.
![Page 56: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/56.jpg)
Beyond JS/Node
![Page 57: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/57.jpg)
Statically compile on an Amazon Linux AMI Install the module as part of your Node app on the same AMI ZIP up the function, binary, and the node_modules folder
Native Node Modules
https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/
![Page 58: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/58.jpg)
Make sure it’s compiled for the Linux AMD64 architecture Make sure it can run standalone or is visible to /bin/bash/ or /usr/bin/python
Use child_process.spawnSync() to make sure the child process finishes
before context.success/done() executes
Include the executable in the ZIP file you upload to Lambda
Any Compiled Executable
https://aws.amazon.com/blogs/compute/running-executables-in-aws-lambda/
![Page 59: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/59.jpg)
Native Java support announced April 9
Java
![Page 60: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/60.jpg)
Go Do!
![Page 61: Node withoutservers aws-lambda](https://reader031.vdocuments.net/reader031/viewer/2022031903/55b678acbb61eb8e788b4615/html5/thumbnails/61.jpg)
Code at github.com/brianklaas
Session evaluation!Brian Klaas Johns Hopkins Bloomberg School of Public Health
[email protected] @brian_klaas www.iterateme.com