[{"data":1,"prerenderedAt":402},["ShallowReactive",2],{"content-svc-lambda-guides-effectively-running-java-on-serverless-1-introduction":3},{"markdown":4,"frontMatterAttributes":5,"bodyRaw":17,"menu":18,"menuType":392,"isCollapseableMenu":21,"nextDocItem":35,"previousDocItem":393,"contributorPaths":394,"contentName":401,"slug":30,"readingTime":27},"\u003Cp>This guide will walk you through the best practices of using Java on AWS Lambda.\nTo understand and implement these best practices, you will go over the history of Java, evolution of computing, \nand the challenges we face building serverless Java applications on AWS Lambda.\u003C\u002Fp>\n\u003Ch4>Simple Java Lambda function\u003C\u002Fh4>\n\u003Cp>A simple Java Lambda function would look like the following:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">package com.example;\n\npublic class HelloHandler {\n  public HelloResponse handleRequest(HelloRequest request) {\n    String message = &quot;Hello &quot; + request.getName();\n    \n    HelloResponse response = new HelloResponse();\n    response.setMessage(message);\n    \n    return response;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Advanced usage of a Lambda function would involve additional dependencies which you would normally use for production\ngrade applications.\nHere are some of those core dependencies:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>com.amazonaws:aws-lambda-java-core\u003C\u002Fcode> which provides the handler interfaces, and context object.\u003C\u002Fli>\n\u003Cli>\u003Ccode>com.amazonaws:aws-lambda-java-events\u003C\u002Fcode> which provides input types for events from AWS services.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Here is an example using \u003Ccode>handler\u003C\u002Fcode> interface:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">public class App implements RequestHandler&lt;RequestEvent, ResponseEvent&gt; {\n  \n  public ResponseEvent handleRequest(RequestEvent event, Context context) {\n    \u002F\u002F Process incoming event payload\n    \n    return ResponseEvent().builder()\n      .withStatusCode(200)\n      .withBody(&quot;Hello World&quot;)\n      .build();\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Here is an example\nof using \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faws\u002Faws-lambda-java-libs\u002Fblob\u002Fmain\u002Faws-lambda-java-events\u002FREADME.md\">\u003Ccode>aws-lambda-java-events\u003C\u002Fcode>\u003C\u002Fa> \nlibrary to serialize incoming events from Amazon API Gateway, Amazon SQS, and Amazon S3:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Amazon API Gateway\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;\n\npublic class UnicornRequestHandler implements RequestHandler&lt;APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent&gt; {\n  \n  @Override\n  public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) { }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Amazon SQS\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">import com.amazonaws.services.lambda.runtime.events.SQSEvent;\nimport com.amazonaws.services.lambda.runtime.events.SQSBatchResponse;\n\npublic class UnicornQueueProcessor implements RequestHandler&lt;SQSEvent, SQSBatchResponse&gt; {\n  \n  @Override\n  public SQSBatchResponse handleRequest(SQSEvent event, Context context) { }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Amazon S3\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">import com.amazonaws.services.lambda.runtime.events.S3Event;\n\npublic class UnicornDocumentHandler implements RequestHandler&lt;S3Event, String&gt; {\n  \n  @Override\n  public String handleRequest(S3Event event, Context context) { }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Before we dive deeper into best practices, let&#39;s take a look at the history of Java and computing which will help\nunderstand why AWS Lambda specific best practices are necessary.\u003C\u002Fp>\n",{"title":6,"order":7,"authors":8,"callout":10,"prerequisite":14},"Getting Started",1,[9],"Dhiraj Mahapatro",{"title":11,"description":12,"link":13},"Watch this video","This Devoxx Belgium 2023 presentation shows effectively running Java on Serverless","https:\u002F\u002Fyoutu.be\u002Fu3tgOE8qFjI?t=5549",[15,16],"Understanding of Java","Understanding of AWS Lambda","This guide will walk you through the best practices of using Java on AWS Lambda.\nTo understand and implement these best practices, you will go over the history of Java, evolution of computing, \nand the challenges we face building serverless Java applications on AWS Lambda.\n\n#### Simple Java Lambda function\nA simple Java Lambda function would look like the following:\n\n```java\npackage com.example;\n\npublic class HelloHandler {\n  public HelloResponse handleRequest(HelloRequest request) {\n    String message = \"Hello \" + request.getName();\n    \n    HelloResponse response = new HelloResponse();\n    response.setMessage(message);\n    \n    return response;\n  }\n}\n```\n\nAdvanced usage of a Lambda function would involve additional dependencies which you would normally use for production\ngrade applications.\nHere are some of those core dependencies:\n\n- `com.amazonaws:aws-lambda-java-core` which provides the handler interfaces, and context object.\n- `com.amazonaws:aws-lambda-java-events` which provides input types for events from AWS services.\n\nHere is an example using `handler` interface:\n\n```java\npublic class App implements RequestHandler\u003CRequestEvent, ResponseEvent> {\n  \n  public ResponseEvent handleRequest(RequestEvent event, Context context) {\n    \u002F\u002F Process incoming event payload\n    \n    return ResponseEvent().builder()\n      .withStatusCode(200)\n      .withBody(\"Hello World\")\n      .build();\n  }\n}\n```\n\nHere is an example\nof using [`aws-lambda-java-events`](https:\u002F\u002Fgithub.com\u002Faws\u002Faws-lambda-java-libs\u002Fblob\u002Fmain\u002Faws-lambda-java-events\u002FREADME.md) \nlibrary to serialize incoming events from Amazon API Gateway, Amazon SQS, and Amazon S3:\n\n**Amazon API Gateway**\n\n```java\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;\n\npublic class UnicornRequestHandler implements RequestHandler\u003CAPIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {\n  \n  @Override\n  public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) { }\n}\n```\n\n**Amazon SQS**\n\n```java\nimport com.amazonaws.services.lambda.runtime.events.SQSEvent;\nimport com.amazonaws.services.lambda.runtime.events.SQSBatchResponse;\n\npublic class UnicornQueueProcessor implements RequestHandler\u003CSQSEvent, SQSBatchResponse> {\n  \n  @Override\n  public SQSBatchResponse handleRequest(SQSEvent event, Context context) { }\n}\n```\n\n**Amazon S3**\n\n```java\nimport com.amazonaws.services.lambda.runtime.events.S3Event;\n\npublic class UnicornDocumentHandler implements RequestHandler\u003CS3Event, String> {\n  \n  @Override\n  public String handleRequest(S3Event event, Context context) { }\n}\n```\n\nBefore we dive deeper into best practices, let's take a look at the history of Java and computing which will help\nunderstand why AWS Lambda specific best practices are necessary.\n",[19,31,58,187,240,297,313,352,374],{"title":20,"collapsible":21,"isCollapsed":21,"content":22},"Introduction",false,[23],{"title":6,"order":7,"authors":24,"callout":25,"prerequisite":26,"time":27,"path":28,"id":29,"link":30},[9],{"title":11,"description":12,"link":13},[15,16],"2 min","1-introduction","1-introduction.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002F1-introduction",{"title":32,"collapsible":21,"isCollapsed":33,"content":34},"History",true,[35,43,50],{"title":36,"order":37,"authors":38,"time":39,"path":40,"id":41,"link":42},"Evolution of Java",3,[9],"1 min","history","history.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fhistory",{"title":44,"order":45,"authors":46,"time":27,"path":47,"id":48,"link":49},"Evolution of Compute",4,[9],"compute","compute.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcompute",{"title":51,"order":52,"authors":53,"time":27,"path":55,"id":56,"link":57},"Challenges",5,[9,54],"Maximilian Schellhorn","challenge","challenge.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fchallenge",{"title":59,"collapsible":21,"isCollapsed":33,"content":60},"Best Practices",[61,79,89,95,112,129,147,163,177],{"title":62,"order":63,"youtubeVideoID":64,"authors":65,"callout":67,"resources":70,"time":75,"path":76,"id":77,"link":78},"Lambda Snapstart",6,"ZbnAithBNYY",[66,9],"Vipan Kumar",{"title":11,"description":68,"link":69},"This serverless office hours session dives deeper into Lambda SnapStart.","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Y5b8_KToeDY",[71],{"link":72,"text":73,"type":74},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=IIKe2dx9Ag0","Spring IO (Barcelona)","video","8 min","snapstart","snapstart.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fsnapstart",{"title":80,"order":63,"authors":81,"callout":82,"time":39,"path":86,"id":87,"link":88},"Tiered Compilation",[66],{"title":83,"description":84,"link":85},"Read this blog","This AWS blog explains Tiered compilation in details","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fincreasing-performance-of-java-aws-lambda-functions-using-tiered-compilation\u002F","tiered-compilation","tiered-compilation.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ftiered-compilation",{"title":90,"order":63,"authors":91,"time":39,"path":92,"id":93,"link":94},"Utilize initialization phase",[9],"init-heavy-lifting","init-heavy-lifting.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Finit-heavy-lifting",{"title":96,"order":63,"authors":97,"youtubeVideoID":99,"resources":100,"time":108,"path":109,"id":110,"link":111},"Using RDS Proxy",[98,9],"Sonali Jena","ZQOqmMn_8jw",[101,105],{"link":102,"text":103,"type":104},"https:\u002F\u002Faws.amazon.com\u002Fgetting-started\u002Fhands-on\u002Fset-up-shared-database-connection-amazon-rds-proxy\u002F","Shared DB connections with RDS Proxy","user guide",{"link":106,"type":104,"text":107},"https:\u002F\u002Fdocs.aws.amazon.com\u002FAmazonRDS\u002Flatest\u002FAuroraUserGuide\u002Frds-proxy.html","RDS Proxy","4 min","rds-proxy","rds-proxy.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Frds-proxy",{"title":113,"order":63,"authors":114,"callout":115,"prerequisite":119,"resources":121,"time":27,"path":126,"id":127,"link":128},"Choice of HTTP Clients",[66,9],{"title":116,"description":117,"link":118},"Read this Blog","This blog explains how AWS CRT HTTP Client offers faster startup time and small memory footprint","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdeveloper\u002Fannouncing-availability-of-the-aws-crt-http-client-in-the-aws-sdk-for-java-2-x\u002F",[120],"Before moving on to HTTP clients, the first and foremost requirement to improve performance in Lambda functions is to upgrade from AWS SDK Java v1 to AWS SDK Java v2 as soon as possible. Version 2 of the AWS SDK was released in Nov 2018 with a lot of performance upgrades.",[122],{"link":123,"type":124,"text":125},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdeveloper\u002Faws-sdk-for-java-2-x-released\u002F","blog","AWS SDK for Java v2","http-clients","http-clients.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fhttp-clients",{"title":130,"order":63,"authors":131,"youtubeVideoID":132,"resources":133,"time":108,"path":144,"id":145,"link":146},"Hexagonal Architecture",[66],"kRFg6fkVChQ",[134,138,141],{"link":135,"text":136,"type":137},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fprescriptive-guidance\u002Flatest\u002Fhexagonal-architectures\u002Fwelcome.html","Hexagonal architecture","guidance",{"link":139,"text":140,"type":124},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fdeveloping-portable-aws-lambda-functions\u002F","Portable Lambda functions",{"link":142,"type":124,"text":143},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fdeveloping-evolutionary-architecture-with-aws-lambda\u002F","Building evolutionary architecture on AWS Lambda","hexagonal","hexagonal.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fhexagonal",{"title":148,"order":63,"authors":149,"youtubeVideoID":151,"resources":152,"time":27,"path":160,"id":161,"link":162},"Powertools for AWS Lambda",[150],"Lavanya Tangutur","dH2GP6Lydj8",[153,157],{"link":154,"text":155,"type":156},"https:\u002F\u002Fgithub.com\u002Faws-powertools\u002Fpowertools-lambda-java","Powertools for AWS Lambda (Java)","github",{"link":158,"type":124,"text":159},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fopensource\u002Fsimplifying-serverless-best-practices-with-aws-lambda-powertools-java\u002F","Best practices with Powertools","powertools","powertools.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fpowertools",{"title":164,"order":63,"authors":165,"youtubeVideoID":166,"callout":167,"resources":171,"time":39,"path":174,"id":175,"link":176},"Lambda Power tuning ",[150,9],"z8wGSykEauI",{"title":168,"description":169,"link":170},"Watch the video","This video covers a variety of AWS Lambda performance and cost optimization techniques including use of Power tuning.","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=z8wGSykEauI",[172,173],{"link":102,"text":103,"type":104},{"link":106,"type":104,"text":107},"powertuning","powertuning.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fpowertuning",{"title":178,"order":63,"authors":179,"resources":180,"time":27,"path":184,"id":185,"link":186},"Using Graviton2",[9],[181],{"link":182,"text":183,"type":124},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fmigrating-aws-lambda-functions-to-arm-based-aws-graviton2-processors\u002F","Using Arm-based Graviton2 processors","graviton","graviton.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fgraviton",{"title":188,"collapsible":21,"isCollapsed":33,"content":189},"Java frameworks",[190,205,214,230],{"title":191,"order":192,"authors":193,"resources":194,"time":27,"path":202,"id":203,"link":204},"Micronaut",7,[150,9],[195,199],{"link":196,"text":197,"type":198},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-java-frameworks-samples\u002Ftree\u002Fmain","Serverless Java Frameworks","GitHub",{"link":200,"text":201,"type":198},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-patterns\u002Ftree\u002Fmain\u002Fapigw-lambda-rds-snapstart","Micronaut with RDS","micronaut","micronaut.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fmicronaut",{"title":206,"order":192,"authors":207,"resources":208,"time":27,"path":211,"id":212,"link":213},"Quarkus",[150,9],[209],{"link":196,"text":210,"type":198},"Quarkus sample application","quarkus","quarkus.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fquarkus",{"title":215,"order":192,"authors":216,"resources":217,"time":108,"path":227,"id":228,"link":229},"Spring",[150,54],[218,219,223],{"link":196,"text":210,"type":198},{"link":220,"text":221,"type":222},"https:\u002F\u002Fcatalog.workshops.aws\u002Fjava-on-aws-lambda\u002Fen-US","Java on AWS Lambda","workshop",{"link":224,"text":225,"type":226},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdevops\u002Fdeveloping-with-java-and-spring-boot-using-amazon-codewhisperer\u002F","Build Spring Boot using Amazon CodeWhisperer","Blog","springboot","springboot.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fspringboot",{"title":231,"order":192,"authors":232,"resources":233,"time":27,"path":237,"id":238,"link":239},"GraalVM Native Image",[150,9],[234,236],{"link":196,"text":235,"type":198},"GraalVM sample application",{"link":220,"text":221,"type":222},"graalvm","graalvm.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fgraalvm",{"title":241,"collapsible":21,"isCollapsed":33,"content":242},"Testing a Java application",[243,260,269,279,288],{"title":244,"order":245,"authors":246,"callout":248,"resources":252,"time":256,"path":257,"id":258,"link":259},"Testing Serverless",8,[247],"Lorenzo Micheli",{"title":249,"description":250,"link":251},"Read the Serverless testing guide","This guide dives deeper into Serverless testing","https:\u002F\u002Fserverlessland.com\u002Ftesting",[253],{"link":254,"text":255,"type":198},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-test-samples\u002Ftree\u002Fmain\u002Fjava-test-samples","Serverless Java test samples","3 min","testing","testing.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ftesting",{"title":261,"order":245,"authors":262,"callout":263,"resources":264,"time":108,"path":266,"id":267,"link":268},"Unit Testing",[247],{"title":249,"description":250,"link":251},[265],{"link":254,"text":255,"type":198},"unit","unit.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Funit",{"title":270,"order":245,"authors":271,"callout":272,"resources":273,"time":275,"path":276,"id":277,"link":278},"Integration Testing",[247,9],{"title":249,"description":250,"link":251},[274],{"link":254,"text":255,"type":198},"5 min","integration","integration.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fintegration",{"title":280,"order":245,"authors":281,"callout":282,"resources":283,"time":256,"path":285,"id":286,"link":287},"Functional Testing",[247,9],{"title":249,"description":250,"link":251},[284],{"link":254,"text":255,"type":198},"functional","functional.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ffunctional",{"title":289,"order":245,"authors":290,"callout":291,"resources":292,"time":27,"path":294,"id":295,"link":296},"Load Testing",[9],{"title":249,"description":250,"link":251},[293],{"link":254,"text":255,"type":198},"load","load.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fload",{"title":298,"collapsible":21,"isCollapsed":33,"content":299},"Local Development",[300,307],{"title":301,"order":302,"authors":303,"time":39,"path":304,"id":305,"link":306},"IntelliJ",10,[9],"intellij","intellij.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fintellij",{"title":308,"order":302,"authors":309,"time":39,"path":310,"id":311,"link":312},"Visual Studio Code",[9],"vscode","vscode.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fvscode",{"title":314,"collapsible":21,"isCollapsed":33,"content":315},"Infrastructure as Code",[316,323,329,339],{"title":317,"order":318,"authors":319,"time":27,"path":320,"id":321,"link":322},"CloudFormation",9,[98],"cloudformation","cloudformation.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcloudformation",{"title":324,"order":318,"authors":325,"time":275,"path":326,"id":327,"link":328},"AWS CDK",[98],"cdk","cdk.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcdk",{"title":330,"order":318,"authors":331,"resources":332,"time":27,"path":336,"id":337,"link":338},"AWS SAM",[98],[333],{"link":334,"text":335,"type":124},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fbuilding-serverless-java-applications-with-the-aws-sam-cli\u002F","Java Serverless AWS SAM CLI","sam","sam.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fsam",{"title":340,"order":318,"authors":341,"resources":342,"time":27,"path":349,"id":350,"link":351},"Terraform",[9],[343,346],{"link":344,"type":198,"text":345},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-patterns\u002Ftree\u002Fmain\u002Fapigw-lambda-snapstart-terraform","Java sample with Terraform",{"link":347,"text":348,"type":104},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fserverless-application-model\u002Flatest\u002Fdeveloperguide\u002Fwhat-is-terraform-support.html","AWS SAM CLI Terraform support","terraform","terraform.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fterraform",{"title":353,"collapsible":21,"isCollapsed":33,"content":354},"Benchmarking",[355],{"title":356,"order":357,"youtubeVideoID":358,"authors":359,"resources":360,"time":39,"path":371,"id":372,"link":373},"Performance Benchmarking",11,"wmEIMWigXGc",[9],[361,363,365,368],{"link":362,"text":221,"type":222},"https:\u002F\u002Fcatalog.workshops.aws\u002Fjava-on-aws-lambda\u002Fen-US\u002F01-migration\u002F02-optimizations\u002Fbenchmark",{"link":196,"text":364,"type":198},"Benchmark: Micronaut, Quarkus, and SpringBoot",{"link":366,"text":367,"type":198},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-graalvm-demo","GraalVM native image on AWS Lambda Benchmarking",{"link":369,"text":370,"type":198},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-kotlin-demo","Benchmark Kotlin on Serverless","benchmark","benchmark.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fbenchmark",{"title":375,"collapsible":21,"isCollapsed":33,"content":376},"Migration",[377],{"title":378,"order":379,"authors":380,"youtubeVideoID":381,"resources":382,"time":39,"path":389,"id":390,"link":391},"Migration Guide",12,[9],"u3tgOE8qFjI",[383,387],{"link":384,"text":385,"type":386},"https:\u002F\u002Fserverlessland.com\u002Fcontent\u002Fservice\u002Flambda\u002Fpaved-path\u002Fjava-replatforming\u002Fintroduction","Java re-platforming guide","Guide",{"link":220,"text":221,"type":388},"Workshop","migration","migration.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fmigration","LIST",null,[395,396,397,398,399,400],"content\u002Fcontributors\u002Fdhiraj-mahapatro.json","content\u002Fcontributors\u002Fsonali-jena.json","content\u002Fcontributors\u002Flavanya-tangutur.json","content\u002Fcontributors\u002Fvipan-kumar.json","content\u002Fcontributors\u002Florenzo-micheli.json","content\u002Fcontributors\u002Fmaximilian-schellhorn.json","Effectively running Java on Serverless",1790591711016]