Upgrade to Pro — share decks privately, control downloads, hide ads and more …

When to use a Lambda function? And when not?!

When to use a Lambda function? And when not?!

Jérôme Van Der Linden

June 07, 2023
Tweet

More Decks by Jérôme Van Der Linden

Other Decks in Technology

Transcript

  1. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Jerome Van Der Linden (@jeromevdl) When to use a Lambda function? And when not? Sr Solutions Architect Builder @ AWS Serverless Days Paris 2023
  2. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Who am I ? Jérôme Van Der Linden • Solutions Architect Builder @ AWS, Geneva (Switzerland) • Passionate about Serverless, automation & testing • Former architect, agile & devops coach, Java developer, Android tech lead • Husband and father of 3 @jeromevdl
  3. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark © 2023, Amazon Web Services, Inc. or its affiliates. You said AWS Lambda? 3
  4. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark You said AWS Lambda ? Serverless Compute Automatically respond to code execution requests at any scale, from a dozen events per day to hundreds of thousands per second. Save costs by paying only for the compute time you use— by per-millisecond—instead of provisioning infrastructure upfront for peak capacity. Run code without provisioning or managing infrastructure. Simply write and upload code as a .zip file or container image.
  5. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark You said AWS Lambda ? Event-driven functions Event source Services(anything) Database AWS Service 3rd party service Function Changes in data state Changes in resource state Request to endpoints Node.js Python Java C# Go Ruby Runtime API
  6. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark You said AWS Lambda ? Event-driven functions Anatomy of a Function export const handler = async function(event, context) { console.log('Hello world!'); } • Handler: function that will be triggered for each event received
  7. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark You said AWS Lambda ? Event-driven functions Anatomy of a Function export const handler = async function(event, context) { console.log('Hello world!'); } • Handler: function that will be triggered for each event received • Event: the incoming event that triggered the function (in JSON format)
  8. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark You said AWS Lambda ? Event-driven functions Anatomy of a Function export const handler = async function(event, context) { console.log('Hello world!'); } • Handler: function that will be triggered for each event received • Event: the incoming event that triggered the function (in JSON format) • Context: informations about the function configuration and invocation
  9. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark You said AWS Lambda ? Event-driven functions Anatomy of a Function export const handler = async function(event, context) { console.log('Hello world!'); } • Handler: function that will be triggered for each event received • Event: the incoming event that triggered the function (in JSON format) • Context: informations about the function configuration and invocation • Your code, anything, …
  10. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark You said AWS Lambda ? Use-cases Amazon API Gateway AWS Lambda AWS Lambda AWS AppSync APIs / microservices (REST / GraphQL) AWS Lambda AWS Step Functions Orchestration AWS Lambda AWS Config Operations/ Remediation AWS Lambda Amazon SNS AWS Lambda AWS Lambda Amazon EventBridge Amazon SQS Event-driven architectures File processing Stream processing Data processing (transformation , cleansing, …) Analytics IoT backend …
  11. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark © 2023, Amazon Web Services, Inc. or its affiliates. λ or not λ ? That is the question ! 11
  12. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark #1 - High-criticality API
  13. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark High-criticality API Do we need a Lambda function ? Amazon API Gateway Amazon SQS AWS Lambda Backend Requirements: • Users call an API to place orders • Orders are sent to a queue to be processed asynchronously by a backend • Incoming orders must not be lost ?
  14. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark High-criticality API NO, Lambda function is not required Amazon API Gateway Amazon SQS Backend Explanation: • We don’t want to loose any order, store them as quickly as possible in the queue • Having a λ function introduces code and risk of failures (risk of loosing orders) • This is called the Storage-first pattern*: store the data before any processing * https://aws.amazon.com/blogs/compute/building-storage-first-applications-with-http-apis-service-integrations/
  15. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark High-criticality API Implementation: leverage API Gateway Direct Integration REST APIs HTTP APIs • EventBridge-PutEvents • SQS-SendMessage • SQS-ReceiveMessage • SQS-DeleteMessage • SQS-PurgeQueue • AppConfig-GetConfiguration • Kinesis-PutRecord • StepFunctions-StartExecution • StepFunctions-StartSyncExecution • StepFunctions-StopExecution • Almost any AWS API • Using Mapping Template • Velocity Template Library (Apache) • Example: Action=SendMessage&MessageBody=$util.urlEncode("$input.body") @aws-solutions-constructs/aws-apigateway-sqs
  16. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark #2 - Queue & Workflow
  17. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Queue & Workflow Do we need a Lambda function ? Requirements: • The SQS Queue receives messages (eg. Orders) • The backend needs to perform multiple operations on these messages (using Step Functions) Amazon SQS AWS Lambda ? AWS Step Functions workflow
  18. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Queue & Workflow NO, Lambda function is not required Explanation : • EventBridge Pipes permit to create point-to-point integration between a source and a target • No code required • Use Lambda to transform data, not to transport data Amazon SQS AWS Step Functions workflow Amazon EventBridge Pipe
  19. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Queue & Workflow Implementation
  20. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark #3 - CQRS
  21. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark CQRS Do we need a Lambda function ? Requirements: • Different data access patterns (write- intensive / low & structured read) • Decouple writes from reads to use the best tool for the job è Implement the Command Query Responsibility Segregation pattern Amazon DynamoDB Amazon Aurora AWS Lambda ? DynamoDB Stream User Query Service Command Service Write Read Write Read Write
  22. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark CQRS YES, Lambda function is required Explanation: • DynamoDB Streams can only stream to Lambda or Kinesis Data Stream • EventBridge Pipes do not permit to write to Aurora • Some compute is required to do the insertion in Aurora • Using Lambda (with limited reserved concurrency) + RDS proxy also permits to avoid overloading the relational database Amazon DynamoDB Amazon Aurora AWS Lambda DynamoDB Stream User Query Service Command Service Write Read Write Read Write Amazon RDS proxy
  23. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark CQRS Implementation @aws-solutions-constructs/aws-dynamodbstreams-lambda Amazon DynamoDB AWS Lambda DynamoDB Stream Amazon Aurora AWS Lambda Write Amazon RDS proxy
  24. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark #4 – Choreography
  25. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Choreography Do we need a Lambda function ? Requirements: • Keep (µ)services independent and unaware of the others and the overall flow • Choreography between services for loose coupling and better resilience • Use EventBridge and events AWS Lambda ? Amazon EventBridge Service A Event AWS Step Functions Service B
  26. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Choreography NO, Lambda function is not required Explanation: • EventBridge provides direct integration with Step Functions • And many others: https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html Amazon EventBridge Service A Event AWS Step Functions Service B AWS Lambda Amazon SQS Amazon SNS AWS Step Functions Amazon Kinesis AWS Batch Amazon API Gateway Amazon ECS Task …
  27. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Choreography Implementation @aws-solutions-constructs/aws-eventbridge-stepfunctions
  28. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark #5 – AWS service orchestration
  29. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark AWS service orchestration Do we need a Lambda function ? ? AWS Step Functions workflow Amazon S3 Amazon Textract Requirements: • Orchestrate different operations within a Step Functions workflow • Analyze PDF documents (using Textract) • Extract meaningful information and perform others operations on it
  30. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark AWS service orchestration Do we need a Lambda function ? AWS Step Functions workflow Amazon S3 ? AWS Step Functions workflow Amazon S3 Amazon Textract Requirements: • Orchestrate different operations within a Step Functions workflow • Analyze PDF documents (using Textract) • Extract meaningful information and perform others operations on it OR
  31. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark AWS service Orchestration Most probably NO, but in this case YES AWS Step Functions workflow Amazon S3 Amazon Textract Explanation: • Step Functions provides direct integration with almost all AWS APIs* • Step Functions provides more & more Intrinsic functions to manipulate JSON and arrays • BUT Amazon Textract responses are very verbose and require a parser and therefore code: • https://github.com/aws-samples/amazon-textract-response-parser *: https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html
  32. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark #6 – GraphQL API triggering a workflow
  33. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark GraphQL API triggering a workflow Do we need a Lambda function ? AWS AppSync AWS Lambda ? User AWS Step Functions workflow Requirements: • Instead of a REST API (using API Gateway), we use a GraphQL API (using AppSync) • We don’t want to use a Pipeline Resolver but leverage a Step Functions workflow • Execution of the workflow must be synchronous
  34. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark GraphQL API triggering a workflow NO, Lambda function is not required Explanation: • Appsync does not integrate natively with Step Functions • Appsync provides HTTP Resolvers to perform HTTP calls • All AWS APIs are backed by an HTTP API* and callable by HTTP Resolvers HTTP Resolver https://sync-states.eu-west-3.amazonaws.com AWS AppSync User AWS Step Functions workflow *: https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html
  35. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark GraphQL API triggering a workflow Implementation https://aws.amazon.com/blogs/mobile/invoking-aws-step-functions-short-and-long-running-workflows-from-aws-appsync/
  36. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark #7 – Uploading big files to Amazon S3
  37. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Uploading big files to Amazon S3 Do we need a Lambda function ? Amazon S3 Amazon API Gateway AWS Lambda ? Requirements: • Users need to upload big files (> 10MB) • Files need to be stored as objects in S3 User
  38. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Uploading big files to Amazon S3 YES, Lambda function is required Amazon S3 Amazon API Gateway AWS Lambda User upload file (PUT) generate pre- signed URL Explanation: • API Gateway does not support payloads > 10MB (6MB for Lambda) è We need to generate a S3 pre-signed URL the user will use for the upload • Despite its multiple direct integrations, API Gateway cannot call the pre-signing API • Not part of the CLI s3api command, not part of the SDK @aws-sdk/client-s3 • Part of the CLI s3 command, part of the SDK @aws-sdk/s3-request-presigner
  39. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Uploading big files to Amazon S3 Implementation + allow s3:putObject to the function
  40. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark © 2023, Amazon Web Services, Inc. or its affiliates. Conclusion 40
  41. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark Conclusion • When available, privilegiate native direct integration between services • API Gateway / EventBridge / Step Functions • If not available, look for HTTP integrations (AWS services are just APIs) • AppSync HTTP Resolvers / (EventBridge API destinations) • If not available, too complex to implement / requires code, use λ • VTL mapping templates are not really ‘business-proof’ • Use Lambda to transform data, not to transport data
  42. © 2023, Amazon Web Services, Inc. or its Affiliates. All

    rights reserved. Amazon Confidential and Trademark © 2023, Amazon Web Services, Inc. or its affiliates. Thank you! 42 Jerome Van Der Linden @jeromevdl