AWS Lambda Deployments
Best Practices and Common Mistakes
Given by Derek C. Ashmore
November 14, 2016
©2016 Derek C. Ashmore, All Rights Reserved 1
Who am I?
• Professional Geek
since 1987
• Java/J2EE/Java EE
since 1999
• Cloud since 2012
• Roles include:
• Architect
• Developer
• Project Manager
• DBA
• System Admin
©2016 Derek C. Ashmore, All Rights Reserved 2
Discussion Resources
• This slide deck
– http://www.slideshare.net/derekashmore
• Sample code on my Github
– https://github.com/Derek-Ashmore/
• Sample Java AWS Lambda Source
– https://github.com/Derek-Ashmore/AWSLambdaExamples
• Slide deck has hyper-links!
– Don’t bother writing down URLs
©2016 Derek C. Ashmore, All Rights Reserved 3
Agenda
The
“What”
and “Why”
of AWS
Lambda
Developing
Lambda
Deploying
Lambda
Tales from
the Field
Summary /
Q&A
©2016 Derek C. Ashmore, All Rights Reserved 4
What are AWS Lambdas?
• You provide custom code -> AWS runs it
– Java, Node.js, Python
• Computing power with less management
– AWS manages the hardware
– AWS autoscales that hardware
– AWS maintains that hardware
• Lambdas are event driven
– API Gateway (e.g. RESTful Web Service call)
– Many more
• Lambdas are stateless
• Not to be confused with “Lambda Expressions” in Java 8
©2016 Derek C. Ashmore, All Rights Reserved 5
Lambda Event Sources
• API Gateway
• SNS Messaging
Subscriptions
• Schedule
• Storage writes
– S3, DynamoDB, Kenesis
©2016 Derek C. Ashmore, All Rights Reserved 6
• SES Email receipt
• Cloudwatch
– Schedule, Events, log entries
• Cognito (Security)
• CloudFormation
– Creation script
What’s the Business Benefit
• Less Maintenance Hassle
• Unlimited Parallelism
• Current cost advantage
– Don’t pay for idle
– CPU cost currently lower
• Free tier
– 1 M executions and 400K compute seconds per month
– Memory allocated determines allowed free-tier runtime
• 20 cents per 1 M executions + memory/runtime cost
– Administration cost
• No O/S upgrades, server backups, etc.
©2016 Derek C. Ashmore, All Rights Reserved 7
There’s no free lunch
• Less control over environment
– Harder to tune
– Memory and time limits on execution
• Few Environment amenities
– No connection pooling, session support, caching
• Proprietary Interface
– Potential Technical Lock-in
• No Guarantee that AWS cost will be constant
– Potential Business Risk
• Modern version of CGI
©2016 Derek C. Ashmore, All Rights Reserved 8
Lambda Competitors
• Azure Functions (here)
– Closest matching feature set
• Large number of event types
• Node.js and C# Language Support
– Claim to support more, but not documented
• Pricing Model Similar
• Better developer support (IDE integrated with portal)
• Google Cloud Functions (here)
– Still Alpha
– Fewer event types
– Node.js language support
©2016 Derek C. Ashmore, All Rights Reserved 9
Agenda
The
“What”
and “Why”
of AWS
Lambda
Developing
Lambda
Deploying
Lambda
Tales from
the Field
Summary /
Q&A
©2016 Derek C. Ashmore, All Rights Reserved 10
Lambda API
• Create a Request Handler
– Inputs are
• Event input (user input arguments)
• Context input (info about execution environment)
– Outputs are user decided
• JSON marshalling of Request and Response
• Execution Context
• Deployment Zip Artifact
– Typically one RequestHandler per Zip artifact
©2016 Derek C. Ashmore, All Rights Reserved 11
Lambda Request / Response Sample
• Expose REST API that collects email addresses
for a mailing list
– https://scrubbed/prod/EmailCollector
• Sample request/response
©2016 Derek C. Ashmore, All Rights Reserved 12
Java Request Handler Example
• RequestHandler interface is generic.
– POJOs represent the request and response
– POJOs determine JSON request/response format
– Execution Context class provided by AWS
• This class specified when Lambda defined
• Note the wrapping try/catch
– Portion of the Context provided by AWS -> need more
– AWS Does marshalling
– ContextedRuntimeException from Apache Commons Lang3
• Note that the Lambda is thin -> Business logic is elsewhere
• Sample is on GitHub (here)
• Node.js and Python similar
©2016 Derek C. Ashmore, All Rights Reserved 13
What’s in the Context?
• Execution Context provided by AWS
• Contains:
– AWS Request ID -> Get logs for specific request
– Function name, version, arn
– Cognito identity
– Remaining time/memory
– Mobile client information (AWS Mobile SDK)
• Environment name/value map
• Custom name/value map
©2016 Derek C. Ashmore, All Rights Reserved 14
Resource Support
• Runtime Support
– you can configure memory and max run time available
– Java  Java 8; AWS SDK jar must be included in your deployment
– Node.js  AWS SDK for Node.js preinstalled
– Python  AWS SDK for Python preinstalled
• All logging viewable/searchable in Cloudwatch logs
– Node.js and Python log to the console
– Java uses customer Log4J Appender
• Third party jars/libraries can be included
– Including AWS SDK for AWS Tasks (executing other Lambdas)
– Database Drivers
– Web service libraries
• Keep in Mind
– You create/destroy all database connections
• No connection pooling (Lambdas are stateless)
– Caching APIs have limited benefit (Lambdas are stateless)
– No Remote Debug capability
©2016 Derek C. Ashmore, All Rights Reserved 15
Agenda
The
“What”
and “Why”
of AWS
Lambda
Developing
Lambda
Deploying
Lambda
Tales from
the Field
Summary /
Q&A
©2016 Derek C. Ashmore, All Rights Reserved 16
Lambda Deployment Package
• Zip Organization (Java example)
– Root is in the classpath
– Lib contains 3rd party jars
• Maven example here
– Need maven-dependency-plugin, maven-antrun-plugin
©2016 Derek C. Ashmore, All Rights Reserved 17
API Gateway
• Exposes Lambdas as a RESTful Web Service
– Can be publicly available or part of a secured
private microservice library
©2016 Derek C. Ashmore, All Rights Reserved 18
Gateway Lambda Integration
©2016 Derek C. Ashmore, All Rights Reserved 19
• Integrations do basic transformations
– Map headers and parameters to Lambda request
fields
Gateway Integration Example
©2016 Derek C. Ashmore, All Rights Reserved 20
Lambdas and SNS Topics
• Lambdas can subscribe to SNS Publish/subscribe
topics
• Request Message is type SNSEvent
©2016 Derek C. Ashmore, All Rights Reserved 21
Lambdas can be scheduled
• Lambda executions can be scheduled through
CloudWatch
– Cron expressions supported
©2016 Derek C. Ashmore, All Rights Reserved 22
Agenda
The
“What”
and “Why”
of AWS
Lambda
Developing
Lambda
Deploying
Lambda
Tales from
the Field
Summary /
Q&A
©2016 Derek C. Ashmore, All Rights Reserved 23
Chief Complaints
• Documentation leaves a lot to be desired
– This is an understatement.
– For Java Lambdas, you are almost on your own.
• Lambda start-up time not consistent
– Sometimes long start-up time for JVM
– Python is the fastest
• Optimizations that depend on state aren’t as easy
– You would have to persist that state
• This would have it’s own concurrency and performance issues
©2016 Derek C. Ashmore, All Rights Reserved 24
Implementation Tips
• Separation of Concerns
– Keep Lambda code separate from business logic
• Might want to change vendors someday
– Keep AWS SDK code separate from business logic
• Same reason
– Invoke other Lambdas through the API Gateway, not directly through the AWS SDK
• Same reason
– Keep Business Logic locally runnable/debuggable
• Remote debug isn’t yet possible
• Ensure you can always tie AWS Request Id to your business transaction
– Need a way to gather logs from a complete business transactions and the many services it might use
– All invocations get unique AWS request Ids
• For example, lambda invokes other lambdas
– Configure log4j layout (Java) to include AWS Request Id (example)
– Node.js and Python logs have request id automatically
©2016 Derek C. Ashmore, All Rights Reserved 25
Common Use Cases
• Processing for uploaded data
– Image processing
• Low-volume web site features
– Paying for idle cost prohibitive
• Scheduled Batch Work
– Break up batch by invoking other Lambdas
– The resulting scaling is delegated to AWS
©2016 Derek C. Ashmore, All Rights Reserved 26
Performance
• Start-up Time – Python, Node.js, Java
– Berezovsky performance test
• Throughput – Java and Node.js
– Both have a JIT
– DZone comparison here
– Close enough that other factors would likely guide your language
choice
©2016 Derek C. Ashmore, All Rights Reserved 27
Lambdas and Microservices
©2016 Derek C. Ashmore, All Rights Reserved 28
Using Lambdas as Microservices
• Lambda / API Gateway is a deployment option for microservices
– No differences in design principles
• Single purpose
• Self-contained
– Still design for failure
• Don’t “assume” that Lambda outages can’t happen
– A Lambda might need external resources that aren’t available
• Off Limits: Coding patterns that use state
– Lambdas must be stateless
– Fail fast patterns
• Service Call Mediator
• Circuit Breaker
– Performance Patterns
• Expiring Cache (API Gateway allows request caching)
©2016 Derek C. Ashmore, All Rights Reserved 29
Lambda and the Gartner Hype Cycle
©2016 Derek C. Ashmore, All Rights Reserved 30
Further Reading
• This slide deck
– http://www.slideshare.net/derekashmore
• AWS Lambda Reading List
– http://www.derekashmore.com/2016/04/aws-lambda-reading-list.html
©2016 Derek C. Ashmore, All Rights Reserved 31
Questions?
• Derek Ashmore:
– Blog: www.derekashmore.com
– LinkedIn: www.linkedin.com/in/derekashmore
– Twitter: https://twitter.com/Derek_Ashmore
– GitHub: https://github.com/Derek-Ashmore
– Book: http://dvtpress.com/
©2016 Derek C. Ashmore, All Rights Reserved 32

AWS Lambda Deployments: Best Practices and Common Mistakes O'Reilly Software Architect's Conference 2016-11-14

  • 1.
    AWS Lambda Deployments BestPractices and Common Mistakes Given by Derek C. Ashmore November 14, 2016 ©2016 Derek C. Ashmore, All Rights Reserved 1
  • 2.
    Who am I? •Professional Geek since 1987 • Java/J2EE/Java EE since 1999 • Cloud since 2012 • Roles include: • Architect • Developer • Project Manager • DBA • System Admin ©2016 Derek C. Ashmore, All Rights Reserved 2
  • 3.
    Discussion Resources • Thisslide deck – http://www.slideshare.net/derekashmore • Sample code on my Github – https://github.com/Derek-Ashmore/ • Sample Java AWS Lambda Source – https://github.com/Derek-Ashmore/AWSLambdaExamples • Slide deck has hyper-links! – Don’t bother writing down URLs ©2016 Derek C. Ashmore, All Rights Reserved 3
  • 4.
    Agenda The “What” and “Why” of AWS Lambda Developing Lambda Deploying Lambda Talesfrom the Field Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 4
  • 5.
    What are AWSLambdas? • You provide custom code -> AWS runs it – Java, Node.js, Python • Computing power with less management – AWS manages the hardware – AWS autoscales that hardware – AWS maintains that hardware • Lambdas are event driven – API Gateway (e.g. RESTful Web Service call) – Many more • Lambdas are stateless • Not to be confused with “Lambda Expressions” in Java 8 ©2016 Derek C. Ashmore, All Rights Reserved 5
  • 6.
    Lambda Event Sources •API Gateway • SNS Messaging Subscriptions • Schedule • Storage writes – S3, DynamoDB, Kenesis ©2016 Derek C. Ashmore, All Rights Reserved 6 • SES Email receipt • Cloudwatch – Schedule, Events, log entries • Cognito (Security) • CloudFormation – Creation script
  • 7.
    What’s the BusinessBenefit • Less Maintenance Hassle • Unlimited Parallelism • Current cost advantage – Don’t pay for idle – CPU cost currently lower • Free tier – 1 M executions and 400K compute seconds per month – Memory allocated determines allowed free-tier runtime • 20 cents per 1 M executions + memory/runtime cost – Administration cost • No O/S upgrades, server backups, etc. ©2016 Derek C. Ashmore, All Rights Reserved 7
  • 8.
    There’s no freelunch • Less control over environment – Harder to tune – Memory and time limits on execution • Few Environment amenities – No connection pooling, session support, caching • Proprietary Interface – Potential Technical Lock-in • No Guarantee that AWS cost will be constant – Potential Business Risk • Modern version of CGI ©2016 Derek C. Ashmore, All Rights Reserved 8
  • 9.
    Lambda Competitors • AzureFunctions (here) – Closest matching feature set • Large number of event types • Node.js and C# Language Support – Claim to support more, but not documented • Pricing Model Similar • Better developer support (IDE integrated with portal) • Google Cloud Functions (here) – Still Alpha – Fewer event types – Node.js language support ©2016 Derek C. Ashmore, All Rights Reserved 9
  • 10.
    Agenda The “What” and “Why” of AWS Lambda Developing Lambda Deploying Lambda Talesfrom the Field Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 10
  • 11.
    Lambda API • Createa Request Handler – Inputs are • Event input (user input arguments) • Context input (info about execution environment) – Outputs are user decided • JSON marshalling of Request and Response • Execution Context • Deployment Zip Artifact – Typically one RequestHandler per Zip artifact ©2016 Derek C. Ashmore, All Rights Reserved 11
  • 12.
    Lambda Request /Response Sample • Expose REST API that collects email addresses for a mailing list – https://scrubbed/prod/EmailCollector • Sample request/response ©2016 Derek C. Ashmore, All Rights Reserved 12
  • 13.
    Java Request HandlerExample • RequestHandler interface is generic. – POJOs represent the request and response – POJOs determine JSON request/response format – Execution Context class provided by AWS • This class specified when Lambda defined • Note the wrapping try/catch – Portion of the Context provided by AWS -> need more – AWS Does marshalling – ContextedRuntimeException from Apache Commons Lang3 • Note that the Lambda is thin -> Business logic is elsewhere • Sample is on GitHub (here) • Node.js and Python similar ©2016 Derek C. Ashmore, All Rights Reserved 13
  • 14.
    What’s in theContext? • Execution Context provided by AWS • Contains: – AWS Request ID -> Get logs for specific request – Function name, version, arn – Cognito identity – Remaining time/memory – Mobile client information (AWS Mobile SDK) • Environment name/value map • Custom name/value map ©2016 Derek C. Ashmore, All Rights Reserved 14
  • 15.
    Resource Support • RuntimeSupport – you can configure memory and max run time available – Java  Java 8; AWS SDK jar must be included in your deployment – Node.js  AWS SDK for Node.js preinstalled – Python  AWS SDK for Python preinstalled • All logging viewable/searchable in Cloudwatch logs – Node.js and Python log to the console – Java uses customer Log4J Appender • Third party jars/libraries can be included – Including AWS SDK for AWS Tasks (executing other Lambdas) – Database Drivers – Web service libraries • Keep in Mind – You create/destroy all database connections • No connection pooling (Lambdas are stateless) – Caching APIs have limited benefit (Lambdas are stateless) – No Remote Debug capability ©2016 Derek C. Ashmore, All Rights Reserved 15
  • 16.
    Agenda The “What” and “Why” of AWS Lambda Developing Lambda Deploying Lambda Talesfrom the Field Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 16
  • 17.
    Lambda Deployment Package •Zip Organization (Java example) – Root is in the classpath – Lib contains 3rd party jars • Maven example here – Need maven-dependency-plugin, maven-antrun-plugin ©2016 Derek C. Ashmore, All Rights Reserved 17
  • 18.
    API Gateway • ExposesLambdas as a RESTful Web Service – Can be publicly available or part of a secured private microservice library ©2016 Derek C. Ashmore, All Rights Reserved 18
  • 19.
    Gateway Lambda Integration ©2016Derek C. Ashmore, All Rights Reserved 19 • Integrations do basic transformations – Map headers and parameters to Lambda request fields
  • 20.
    Gateway Integration Example ©2016Derek C. Ashmore, All Rights Reserved 20
  • 21.
    Lambdas and SNSTopics • Lambdas can subscribe to SNS Publish/subscribe topics • Request Message is type SNSEvent ©2016 Derek C. Ashmore, All Rights Reserved 21
  • 22.
    Lambdas can bescheduled • Lambda executions can be scheduled through CloudWatch – Cron expressions supported ©2016 Derek C. Ashmore, All Rights Reserved 22
  • 23.
    Agenda The “What” and “Why” of AWS Lambda Developing Lambda Deploying Lambda Talesfrom the Field Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 23
  • 24.
    Chief Complaints • Documentationleaves a lot to be desired – This is an understatement. – For Java Lambdas, you are almost on your own. • Lambda start-up time not consistent – Sometimes long start-up time for JVM – Python is the fastest • Optimizations that depend on state aren’t as easy – You would have to persist that state • This would have it’s own concurrency and performance issues ©2016 Derek C. Ashmore, All Rights Reserved 24
  • 25.
    Implementation Tips • Separationof Concerns – Keep Lambda code separate from business logic • Might want to change vendors someday – Keep AWS SDK code separate from business logic • Same reason – Invoke other Lambdas through the API Gateway, not directly through the AWS SDK • Same reason – Keep Business Logic locally runnable/debuggable • Remote debug isn’t yet possible • Ensure you can always tie AWS Request Id to your business transaction – Need a way to gather logs from a complete business transactions and the many services it might use – All invocations get unique AWS request Ids • For example, lambda invokes other lambdas – Configure log4j layout (Java) to include AWS Request Id (example) – Node.js and Python logs have request id automatically ©2016 Derek C. Ashmore, All Rights Reserved 25
  • 26.
    Common Use Cases •Processing for uploaded data – Image processing • Low-volume web site features – Paying for idle cost prohibitive • Scheduled Batch Work – Break up batch by invoking other Lambdas – The resulting scaling is delegated to AWS ©2016 Derek C. Ashmore, All Rights Reserved 26
  • 27.
    Performance • Start-up Time– Python, Node.js, Java – Berezovsky performance test • Throughput – Java and Node.js – Both have a JIT – DZone comparison here – Close enough that other factors would likely guide your language choice ©2016 Derek C. Ashmore, All Rights Reserved 27
  • 28.
    Lambdas and Microservices ©2016Derek C. Ashmore, All Rights Reserved 28
  • 29.
    Using Lambdas asMicroservices • Lambda / API Gateway is a deployment option for microservices – No differences in design principles • Single purpose • Self-contained – Still design for failure • Don’t “assume” that Lambda outages can’t happen – A Lambda might need external resources that aren’t available • Off Limits: Coding patterns that use state – Lambdas must be stateless – Fail fast patterns • Service Call Mediator • Circuit Breaker – Performance Patterns • Expiring Cache (API Gateway allows request caching) ©2016 Derek C. Ashmore, All Rights Reserved 29
  • 30.
    Lambda and theGartner Hype Cycle ©2016 Derek C. Ashmore, All Rights Reserved 30
  • 31.
    Further Reading • Thisslide deck – http://www.slideshare.net/derekashmore • AWS Lambda Reading List – http://www.derekashmore.com/2016/04/aws-lambda-reading-list.html ©2016 Derek C. Ashmore, All Rights Reserved 31
  • 32.
    Questions? • Derek Ashmore: –Blog: www.derekashmore.com – LinkedIn: www.linkedin.com/in/derekashmore – Twitter: https://twitter.com/Derek_Ashmore – GitHub: https://github.com/Derek-Ashmore – Book: http://dvtpress.com/ ©2016 Derek C. Ashmore, All Rights Reserved 32