AWS Lambda for Architects Given by Derek C. Ashmore June 7, 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 Supporting Lambda Lambda and Microservices 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
Agenda The “What” and “Why” of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 9
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 10
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 11
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 12
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 13
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 14
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 15
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 16
Gateway Lambda Integration ©2016 Derek C. Ashmore, All Rights Reserved 17 • Integrations do basic transformations – Map headers and parameters to Lambda request fields
Gateway Models ©2016 Derek C. Ashmore, All Rights Reserved 18
Gateway Models (con’t) • Jackson can generate the Json schema needed as a Model – No Mavin plugin for this – Example Java code to generate (here) – Example Mavin pom generating on build (here) ©2016 Derek C. Ashmore, All Rights Reserved 19
Lambdas and SNS Topics • Lambdas can subscribe to SNS Publish/subscribe topics • Request Message is type SNSEvent ©2016 Derek C. Ashmore, All Rights Reserved 20
Lambdas can be scheduled • Lambda executions can be scheduled through CloudWatch – Cron expressions supported ©2016 Derek C. Ashmore, All Rights Reserved 21
Tooling Gotchas • API Gateway requires client with Server Name Indication (SNI) support – Most recent SoapUI does not (reference) – Had to write my own test client using Httpclient 4.2 or above ©2016 Derek C. Ashmore, All Rights Reserved 22
Agenda The “What” and “Why” of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 23
Versioning Support • Lambda versioning and aliases – Aliases are labels (e.g. PROD, TEST, DEV) that can be reassigned to different versions. – Versions are unique an can’t be changed. • S3 versioning possible for Lambda Zip artifacts • You need a correlation between source control and Lambda version – Possibilities • Tag all Lambda versions in source control and include the Lambda version number • Breadcrumbs in the deployed Zip that describe the specific source control change number used for the build ©2016 Derek C. Ashmore, All Rights Reserved 24
Lifecycle Environment Support • Configuration Support – Baked into the deployment zip • You can’t just move the zips from environment to environment • Java Spring profiles not an option as you don’t control JVM parms – API Gateway does have staging variables • No Remote Debug Support ©2016 Derek C. Ashmore, All Rights Reserved 25
Automated Deployment Options • Nothing out of the box • One possibility – Load Lambda function from S3 bucket – Jenkins plugin to load build artifacts to S3 • https://wiki.jenkins-ci.org/display/JENKINS/S3+Plugin – Use AWS CLI to Manage lambda publishing and aliases ©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
Agenda The “What” and “Why” of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 28
Lambdas and Microservices ©2016 Derek C. Ashmore, All Rights Reserved 29
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 30
Back-ends for Front-ends ©2015 Derek C. Ashmore, All Rights Reserved 31
Retry Pattern ©2015 Derek C. Ashmore, All Rights Reserved 32 • Best for asynchronous tasks • Limit the number of tries • You must stay under your Lambda execution time limit! • Use sleep interval between tries • Only addresses temporary outages • Sample Retry Pattern implementation here. • Tooling Support: – Apache CXF supports Retry – Spring Batch RetryTemplate – Apache HttpClient (Example here)
Dispatch via Messaging ©2015 Derek C. Ashmore, All Rights Reserved 33 • Place work instruction on persistent queue • If receivers are down, work stacks in queue • Work throttled by number of receivers • Queue can be SES, JMS or AMQP • Tooling Support: – JMS Api (easy API – many use natively) – Spring JMSTemplate or RabbitTemplate (producer)
Custom Rollback ©2015 Derek C. Ashmore, All Rights Reserved 34
Custom Rollback (continued) • Reverses a transaction previously posted • Only use this for multi-service transactions – Keeping the transaction within one service is preferred • This pattern is completely custom – No special product support available • More information here ©2015 Derek C. Ashmore, All Rights Reserved 35
Contract Testing • Critical for MS architectures – Contract changes can break other services – Bulkhead for rogue developers – Makes individual services more disposable • Consumer-based testing • Tooling support – Apache HttpClient (4.2 or above) ©2015 Derek C. Ashmore, All Rights Reserved 36
Agenda The “What” and “Why” of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 37
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 38
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 39
Lambda and the Gartner Hype Cycle ©2016 Derek C. Ashmore, All Rights Reserved 40
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 41
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 42

AWS Lambda for Architects - Chicago Coder Conference -2016-06-07

  • 1.
    AWS Lambda forArchitects Given by Derek C. Ashmore June 7, 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 Supporting Lambda Lambda and Microservices 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.
    Agenda The “What” and “Why”of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 9
  • 10.
    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 10
  • 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 11
  • 12.
    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 12
  • 13.
    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 13
  • 14.
    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 14
  • 15.
    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 15
  • 16.
    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 16
  • 17.
    Gateway Lambda Integration ©2016Derek C. Ashmore, All Rights Reserved 17 • Integrations do basic transformations – Map headers and parameters to Lambda request fields
  • 18.
    Gateway Models ©2016 DerekC. Ashmore, All Rights Reserved 18
  • 19.
    Gateway Models (con’t) •Jackson can generate the Json schema needed as a Model – No Mavin plugin for this – Example Java code to generate (here) – Example Mavin pom generating on build (here) ©2016 Derek C. Ashmore, All Rights Reserved 19
  • 20.
    Lambdas and SNSTopics • Lambdas can subscribe to SNS Publish/subscribe topics • Request Message is type SNSEvent ©2016 Derek C. Ashmore, All Rights Reserved 20
  • 21.
    Lambdas can bescheduled • Lambda executions can be scheduled through CloudWatch – Cron expressions supported ©2016 Derek C. Ashmore, All Rights Reserved 21
  • 22.
    Tooling Gotchas • APIGateway requires client with Server Name Indication (SNI) support – Most recent SoapUI does not (reference) – Had to write my own test client using Httpclient 4.2 or above ©2016 Derek C. Ashmore, All Rights Reserved 22
  • 23.
    Agenda The “What” and “Why”of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 23
  • 24.
    Versioning Support • Lambdaversioning and aliases – Aliases are labels (e.g. PROD, TEST, DEV) that can be reassigned to different versions. – Versions are unique an can’t be changed. • S3 versioning possible for Lambda Zip artifacts • You need a correlation between source control and Lambda version – Possibilities • Tag all Lambda versions in source control and include the Lambda version number • Breadcrumbs in the deployed Zip that describe the specific source control change number used for the build ©2016 Derek C. Ashmore, All Rights Reserved 24
  • 25.
    Lifecycle Environment Support •Configuration Support – Baked into the deployment zip • You can’t just move the zips from environment to environment • Java Spring profiles not an option as you don’t control JVM parms – API Gateway does have staging variables • No Remote Debug Support ©2016 Derek C. Ashmore, All Rights Reserved 25
  • 26.
    Automated Deployment Options •Nothing out of the box • One possibility – Load Lambda function from S3 bucket – Jenkins plugin to load build artifacts to S3 • https://wiki.jenkins-ci.org/display/JENKINS/S3+Plugin – Use AWS CLI to Manage lambda publishing and aliases ©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.
    Agenda The “What” and “Why”of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 28
  • 29.
    Lambdas and Microservices ©2016Derek C. Ashmore, All Rights Reserved 29
  • 30.
    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 30
  • 31.
    Back-ends for Front-ends ©2015Derek C. Ashmore, All Rights Reserved 31
  • 32.
    Retry Pattern ©2015 DerekC. Ashmore, All Rights Reserved 32 • Best for asynchronous tasks • Limit the number of tries • You must stay under your Lambda execution time limit! • Use sleep interval between tries • Only addresses temporary outages • Sample Retry Pattern implementation here. • Tooling Support: – Apache CXF supports Retry – Spring Batch RetryTemplate – Apache HttpClient (Example here)
  • 33.
    Dispatch via Messaging ©2015Derek C. Ashmore, All Rights Reserved 33 • Place work instruction on persistent queue • If receivers are down, work stacks in queue • Work throttled by number of receivers • Queue can be SES, JMS or AMQP • Tooling Support: – JMS Api (easy API – many use natively) – Spring JMSTemplate or RabbitTemplate (producer)
  • 34.
    Custom Rollback ©2015 DerekC. Ashmore, All Rights Reserved 34
  • 35.
    Custom Rollback (continued) •Reverses a transaction previously posted • Only use this for multi-service transactions – Keeping the transaction within one service is preferred • This pattern is completely custom – No special product support available • More information here ©2015 Derek C. Ashmore, All Rights Reserved 35
  • 36.
    Contract Testing • Criticalfor MS architectures – Contract changes can break other services – Bulkhead for rogue developers – Makes individual services more disposable • Consumer-based testing • Tooling support – Apache HttpClient (4.2 or above) ©2015 Derek C. Ashmore, All Rights Reserved 36
  • 37.
    Agenda The “What” and “Why”of AWS Lambda Developing Lambda Supporting Lambda Lambda and Microservices Summary / Q&A ©2016 Derek C. Ashmore, All Rights Reserved 37
  • 38.
    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 38
  • 39.
    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 39
  • 40.
    Lambda and theGartner Hype Cycle ©2016 Derek C. Ashmore, All Rights Reserved 40
  • 41.
    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 41
  • 42.
    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 42