[{"data":1,"prerenderedAt":402},["ShallowReactive",2],{"content-svc-lambda-guides-effectively-running-java-on-serverless-testing":3},{"markdown":4,"frontMatterAttributes":5,"bodyRaw":19,"menu":20,"menuType":393,"isCollapseableMenu":23,"nextDocItem":261,"previousDocItem":239,"contributorPaths":394,"contentName":401,"slug":260,"readingTime":257},"\u003Cp>Testing is a crucial step in the software development lifecycle, enhancing quality by detecting bugs early. \nAutomated tests and CI\u002FCD pipelines streamline this process, \nreducing production issues and instilling confidence during updates to prevent regressions.\u003C\u002Fp>\n\u003Cp>Just as traditional software development, your Lambda function testing strategy should:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Run Unit tests to check business logic in isolation\u003C\u002Fli>\n\u003Cli>Test the integration with other components or services actually works\u003C\u002Fli>\n\u003Cli>Verify that given certain input, your solution returns the expected outputs in an end-to-end workflow\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Serverless applications are typically built using your function code and a set of cloud-based managed services,\nsuch as queues, databases, event buses, and messaging systems. \u003C\u002Fp>\n\u003Cp>If in traditional software development, typically you can run it locally including most, if not all,\nits dependencies. \nReplicating an entire cloud environment, including queues, database tables,\nevent buses, security policies is not practical. \nYou will inevitably encounter issues due to \ndifferences between your local environment and your deployed environments in the cloud. \u003C\u002Fp>\n\u003Ch4>Testing techniques\u003C\u002Fh4>\n\u003Cp>There are three main techniques to test Serverless solutions:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cp>\u003Cstrong>Testing in the cloud\u003C\u002Fstrong> - you deploy infrastructure and code to test with actual services, security policies, \nconfigurations and infrastructure-specific parameters. \nCloud-based tests provide the most accurate measure of the code quality.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>Testing with mocks\u003C\u002Fstrong> - Mocks are objects within your code that simulate and stand-in for an external service. \nMocks provide pre-defined behavior to verify service calls and parameters.\nMocks can mimic and simplify complex dependencies, \nbut can also lead to more mocks in order to replace nested dependencies.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>Testing with emulators\u003C\u002Fstrong> - You can set up applications (sometimes from a third party) to mimic a cloud service in \nyour local environment.\nSpeed is their strength, but setup and parity with production services are their weakness.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>In the following sections we will implement Unit Test,\nIntegration Test and End-To-End Test with the techniques\nmentioned above using a fully functional Java Serverless application.\u003C\u002Fp>\n\u003Ch4>Example Use Case\u003C\u002Fh4>\n\u003Cp>Let’s consider a ticketing serverless application which provides an API endpoint to persist tickets in a DynamoDb Table. \nWhen the API endpoint is called, \nthe Lambda function deserializes the userId and ticket description from the HTTP request\nand calls the putItem DynamoDB API to persist the item.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fassets\u002Fexternal\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fassets\u002Ftesting_simple_api.png\" alt=\"TestingSimpleApi\">\u003C\u002Fp>\n\u003Cp>The source code of this example is available at serverless-test-samples\u003C\u002Fp>\n\u003Ch4>The Lambda Handler\u003C\u002Fh4>\n\u003Cp>The handler is the entry point of a Lambda function. \nThis is the method that is executed when the Lambda function is invoked. \nIt receives the event that triggered the invocation as a parameter along with the context. \nThe aws-lambda-java-core library defines the RequestHandler interface as follows:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">public interface RequestHandler&lt;I, O&gt; {\n  O handleRequest(I input, Context context);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>When the Lambda Function class implements the RequestHandler interface,\nthe Java runtime deserializes the event into an object with the input type\n\u003Ccode>I\u003C\u002Fcode> and serializes the response using the output type \u003Ccode>O\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>The \u003Ccode>TicketFunction\u003C\u002Fcode> is invoked from API Gateway, therefore, it needs to deserialize and API Gateway request\nusing the \u003Ccode>APIGatewayProxyRequestEvent\u003C\u002Fcode> and to serialize the response with \u003Ccode>APIGatewayProxyResponseEvent\u003C\u002Fcode>.\nThese classes are defined in the \u003Ccode>aws-lambda-java-events\u003C\u002Fcode> library\nwhich provides event definitions for most of the events natively supported by Lambda.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">public class TicketFunction implements RequestHandler&lt;APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent&gt; {\n\n  public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) {\n    APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();\n\n    String ticketId;\n    try {\n      Ticket ticket = mapper.readValue(event.getBody(), Ticket.class);\n\n      logger.info(&quot;[ticket userId] &quot; + ticket.getUserId());\n      logger.info(&quot;[ticket description] &quot; + ticket.getDescription());\n\n      ticketId = ddbUtils.persistTicket(ticket);\n      response.setBody(mapper.writeValueAsString(ticketId));\n\n    } catch (JsonProcessingException e) {\n      logger.error(&quot;Error creating new ticket &quot;, e);\n      response.setStatusCode(HttpStatusCode.BAD_REQUEST);\n    } catch (Exception e) {\n      logger.error(&quot;Error creating new ticket &quot;, e);\n      response.setStatusCode(HttpStatusCode.INTERNAL_SERVER_ERROR);\n    }\n    return response;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n",{"title":6,"order":7,"authors":8,"callout":10,"resources":14},"Testing Serverless",8,[9],"Lorenzo Micheli",{"title":11,"description":12,"link":13},"Read the Serverless testing guide","This guide dives deeper into Serverless testing","https:\u002F\u002Fserverlessland.com\u002Ftesting",[15],{"link":16,"text":17,"type":18},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-test-samples\u002Ftree\u002Fmain\u002Fjava-test-samples","Serverless Java test samples","GitHub","Testing is a crucial step in the software development lifecycle, enhancing quality by detecting bugs early. \nAutomated tests and CI\u002FCD pipelines streamline this process, \nreducing production issues and instilling confidence during updates to prevent regressions.\n\nJust as traditional software development, your Lambda function testing strategy should:\n\n- Run Unit tests to check business logic in isolation\n- Test the integration with other components or services actually works\n- Verify that given certain input, your solution returns the expected outputs in an end-to-end workflow\n\nServerless applications are typically built using your function code and a set of cloud-based managed services,\nsuch as queues, databases, event buses, and messaging systems. \n\nIf in traditional software development, typically you can run it locally including most, if not all,\nits dependencies. \nReplicating an entire cloud environment, including queues, database tables,\nevent buses, security policies is not practical. \nYou will inevitably encounter issues due to \ndifferences between your local environment and your deployed environments in the cloud. \n\n#### Testing techniques \n\nThere are three main techniques to test Serverless solutions:\n\n- **Testing in the cloud** - you deploy infrastructure and code to test with actual services, security policies, \n  configurations and infrastructure-specific parameters. \n  Cloud-based tests provide the most accurate measure of the code quality.\n\n- **Testing with mocks** - Mocks are objects within your code that simulate and stand-in for an external service. \n  Mocks provide pre-defined behavior to verify service calls and parameters.\n  Mocks can mimic and simplify complex dependencies, \n  but can also lead to more mocks in order to replace nested dependencies.\n\n- **Testing with emulators** - You can set up applications (sometimes from a third party) to mimic a cloud service in \n  your local environment.\n  Speed is their strength, but setup and parity with production services are their weakness.\n\nIn the following sections we will implement Unit Test,\nIntegration Test and End-To-End Test with the techniques\nmentioned above using a fully functional Java Serverless application.\n\n#### Example Use Case\n\nLet’s consider a ticketing serverless application which provides an API endpoint to persist tickets in a DynamoDb Table. \nWhen the API endpoint is called, \nthe Lambda function deserializes the userId and ticket description from the HTTP request\nand calls the putItem DynamoDB API to persist the item.\n\n![TestingSimpleApi](\u002Fassets\u002Fexternal\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fassets\u002Ftesting_simple_api.png)\n\nThe source code of this example is available at serverless-test-samples\n\n#### The Lambda Handler\n\nThe handler is the entry point of a Lambda function. \nThis is the method that is executed when the Lambda function is invoked. \nIt receives the event that triggered the invocation as a parameter along with the context. \nThe aws-lambda-java-core library defines the RequestHandler interface as follows:\n\n```java\npublic interface RequestHandler\u003CI, O> {\n  O handleRequest(I input, Context context);\n}\n```\n\nWhen the Lambda Function class implements the RequestHandler interface,\nthe Java runtime deserializes the event into an object with the input type\n`I` and serializes the response using the output type `O`.\n\nThe `TicketFunction` is invoked from API Gateway, therefore, it needs to deserialize and API Gateway request\nusing the `APIGatewayProxyRequestEvent` and to serialize the response with `APIGatewayProxyResponseEvent`.\nThese classes are defined in the `aws-lambda-java-events` library\nwhich provides event definitions for most of the events natively supported by Lambda.\n\n```java\npublic class TicketFunction implements RequestHandler\u003CAPIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {\n\n  public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) {\n    APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();\n\n    String ticketId;\n    try {\n      Ticket ticket = mapper.readValue(event.getBody(), Ticket.class);\n\n      logger.info(\"[ticket userId] \" + ticket.getUserId());\n      logger.info(\"[ticket description] \" + ticket.getDescription());\n\n      ticketId = ddbUtils.persistTicket(ticket);\n      response.setBody(mapper.writeValueAsString(ticketId));\n\n    } catch (JsonProcessingException e) {\n      logger.error(\"Error creating new ticket \", e);\n      response.setStatusCode(HttpStatusCode.BAD_REQUEST);\n    } catch (Exception e) {\n      logger.error(\"Error creating new ticket \", e);\n      response.setStatusCode(HttpStatusCode.INTERNAL_SERVER_ERROR);\n    }\n    return response;\n  }\n}\n```\n",[21,42,68,197,249,298,314,353,375],{"title":22,"collapsible":23,"isCollapsed":24,"content":25},"Introduction",false,true,[26],{"title":27,"order":28,"authors":29,"callout":31,"prerequisite":35,"time":38,"path":39,"id":40,"link":41},"Getting Started",1,[30],"Dhiraj Mahapatro",{"title":32,"description":33,"link":34},"Watch this video","This Devoxx Belgium 2023 presentation shows effectively running Java on Serverless","https:\u002F\u002Fyoutu.be\u002Fu3tgOE8qFjI?t=5549",[36,37],"Understanding of Java","Understanding of AWS Lambda","2 min","1-introduction","1-introduction.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002F1-introduction",{"title":43,"collapsible":23,"isCollapsed":24,"content":44},"History",[45,53,60],{"title":46,"order":47,"authors":48,"time":49,"path":50,"id":51,"link":52},"Evolution of Java",3,[30],"1 min","history","history.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fhistory",{"title":54,"order":55,"authors":56,"time":38,"path":57,"id":58,"link":59},"Evolution of Compute",4,[30],"compute","compute.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcompute",{"title":61,"order":62,"authors":63,"time":38,"path":65,"id":66,"link":67},"Challenges",5,[30,64],"Maximilian Schellhorn","challenge","challenge.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fchallenge",{"title":69,"collapsible":23,"isCollapsed":24,"content":70},"Best Practices",[71,89,99,105,122,139,157,173,187],{"title":72,"order":73,"youtubeVideoID":74,"authors":75,"callout":77,"resources":80,"time":85,"path":86,"id":87,"link":88},"Lambda Snapstart",6,"ZbnAithBNYY",[76,30],"Vipan Kumar",{"title":32,"description":78,"link":79},"This serverless office hours session dives deeper into Lambda SnapStart.","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Y5b8_KToeDY",[81],{"link":82,"text":83,"type":84},"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":90,"order":73,"authors":91,"callout":92,"time":49,"path":96,"id":97,"link":98},"Tiered Compilation",[76],{"title":93,"description":94,"link":95},"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":100,"order":73,"authors":101,"time":49,"path":102,"id":103,"link":104},"Utilize initialization phase",[30],"init-heavy-lifting","init-heavy-lifting.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Finit-heavy-lifting",{"title":106,"order":73,"authors":107,"youtubeVideoID":109,"resources":110,"time":118,"path":119,"id":120,"link":121},"Using RDS Proxy",[108,30],"Sonali Jena","ZQOqmMn_8jw",[111,115],{"link":112,"text":113,"type":114},"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":116,"type":114,"text":117},"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":123,"order":73,"authors":124,"callout":125,"prerequisite":129,"resources":131,"time":38,"path":136,"id":137,"link":138},"Choice of HTTP Clients",[76,30],{"title":126,"description":127,"link":128},"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",[130],"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.",[132],{"link":133,"type":134,"text":135},"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":140,"order":73,"authors":141,"youtubeVideoID":142,"resources":143,"time":118,"path":154,"id":155,"link":156},"Hexagonal Architecture",[76],"kRFg6fkVChQ",[144,148,151],{"link":145,"text":146,"type":147},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fprescriptive-guidance\u002Flatest\u002Fhexagonal-architectures\u002Fwelcome.html","Hexagonal architecture","guidance",{"link":149,"text":150,"type":134},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fdeveloping-portable-aws-lambda-functions\u002F","Portable Lambda functions",{"link":152,"type":134,"text":153},"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":158,"order":73,"authors":159,"youtubeVideoID":161,"resources":162,"time":38,"path":170,"id":171,"link":172},"Powertools for AWS Lambda",[160],"Lavanya Tangutur","dH2GP6Lydj8",[163,167],{"link":164,"text":165,"type":166},"https:\u002F\u002Fgithub.com\u002Faws-powertools\u002Fpowertools-lambda-java","Powertools for AWS Lambda (Java)","github",{"link":168,"type":134,"text":169},"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":174,"order":73,"authors":175,"youtubeVideoID":176,"callout":177,"resources":181,"time":49,"path":184,"id":185,"link":186},"Lambda Power tuning ",[160,30],"z8wGSykEauI",{"title":178,"description":179,"link":180},"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",[182,183],{"link":112,"text":113,"type":114},{"link":116,"type":114,"text":117},"powertuning","powertuning.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fpowertuning",{"title":188,"order":73,"authors":189,"resources":190,"time":38,"path":194,"id":195,"link":196},"Using Graviton2",[30],[191],{"link":192,"text":193,"type":134},"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":198,"collapsible":23,"isCollapsed":24,"content":199},"Java frameworks",[200,214,223,239],{"title":201,"order":202,"authors":203,"resources":204,"time":38,"path":211,"id":212,"link":213},"Micronaut",7,[160,30],[205,208],{"link":206,"text":207,"type":18},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-java-frameworks-samples\u002Ftree\u002Fmain","Serverless Java Frameworks",{"link":209,"text":210,"type":18},"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":215,"order":202,"authors":216,"resources":217,"time":38,"path":220,"id":221,"link":222},"Quarkus",[160,30],[218],{"link":206,"text":219,"type":18},"Quarkus sample application","quarkus","quarkus.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fquarkus",{"title":224,"order":202,"authors":225,"resources":226,"time":118,"path":236,"id":237,"link":238},"Spring",[160,64],[227,228,232],{"link":206,"text":219,"type":18},{"link":229,"text":230,"type":231},"https:\u002F\u002Fcatalog.workshops.aws\u002Fjava-on-aws-lambda\u002Fen-US","Java on AWS Lambda","workshop",{"link":233,"text":234,"type":235},"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":240,"order":202,"authors":241,"resources":242,"time":38,"path":246,"id":247,"link":248},"GraalVM Native Image",[160,30],[243,245],{"link":206,"text":244,"type":18},"GraalVM sample application",{"link":229,"text":230,"type":231},"graalvm","graalvm.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fgraalvm",{"title":250,"collapsible":23,"isCollapsed":23,"content":251},"Testing a Java application",[252,261,270,280,289],{"title":6,"order":7,"authors":253,"callout":254,"resources":255,"time":257,"path":258,"id":259,"link":260},[9],{"title":11,"description":12,"link":13},[256],{"link":16,"text":17,"type":18},"3 min","testing","testing.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ftesting",{"title":262,"order":7,"authors":263,"callout":264,"resources":265,"time":118,"path":267,"id":268,"link":269},"Unit Testing",[9],{"title":11,"description":12,"link":13},[266],{"link":16,"text":17,"type":18},"unit","unit.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Funit",{"title":271,"order":7,"authors":272,"callout":273,"resources":274,"time":276,"path":277,"id":278,"link":279},"Integration Testing",[9,30],{"title":11,"description":12,"link":13},[275],{"link":16,"text":17,"type":18},"5 min","integration","integration.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fintegration",{"title":281,"order":7,"authors":282,"callout":283,"resources":284,"time":257,"path":286,"id":287,"link":288},"Functional Testing",[9,30],{"title":11,"description":12,"link":13},[285],{"link":16,"text":17,"type":18},"functional","functional.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ffunctional",{"title":290,"order":7,"authors":291,"callout":292,"resources":293,"time":38,"path":295,"id":296,"link":297},"Load Testing",[30],{"title":11,"description":12,"link":13},[294],{"link":16,"text":17,"type":18},"load","load.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fload",{"title":299,"collapsible":23,"isCollapsed":24,"content":300},"Local Development",[301,308],{"title":302,"order":303,"authors":304,"time":49,"path":305,"id":306,"link":307},"IntelliJ",10,[30],"intellij","intellij.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fintellij",{"title":309,"order":303,"authors":310,"time":49,"path":311,"id":312,"link":313},"Visual Studio Code",[30],"vscode","vscode.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fvscode",{"title":315,"collapsible":23,"isCollapsed":24,"content":316},"Infrastructure as Code",[317,324,330,340],{"title":318,"order":319,"authors":320,"time":38,"path":321,"id":322,"link":323},"CloudFormation",9,[108],"cloudformation","cloudformation.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcloudformation",{"title":325,"order":319,"authors":326,"time":276,"path":327,"id":328,"link":329},"AWS CDK",[108],"cdk","cdk.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcdk",{"title":331,"order":319,"authors":332,"resources":333,"time":38,"path":337,"id":338,"link":339},"AWS SAM",[108],[334],{"link":335,"text":336,"type":134},"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":341,"order":319,"authors":342,"resources":343,"time":38,"path":350,"id":351,"link":352},"Terraform",[30],[344,347],{"link":345,"type":18,"text":346},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-patterns\u002Ftree\u002Fmain\u002Fapigw-lambda-snapstart-terraform","Java sample with Terraform",{"link":348,"text":349,"type":114},"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":354,"collapsible":23,"isCollapsed":24,"content":355},"Benchmarking",[356],{"title":357,"order":358,"youtubeVideoID":359,"authors":360,"resources":361,"time":49,"path":372,"id":373,"link":374},"Performance Benchmarking",11,"wmEIMWigXGc",[30],[362,364,366,369],{"link":363,"text":230,"type":231},"https:\u002F\u002Fcatalog.workshops.aws\u002Fjava-on-aws-lambda\u002Fen-US\u002F01-migration\u002F02-optimizations\u002Fbenchmark",{"link":206,"text":365,"type":18},"Benchmark: Micronaut, Quarkus, and SpringBoot",{"link":367,"text":368,"type":18},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-graalvm-demo","GraalVM native image on AWS Lambda Benchmarking",{"link":370,"text":371,"type":18},"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":376,"collapsible":23,"isCollapsed":24,"content":377},"Migration",[378],{"title":379,"order":380,"authors":381,"youtubeVideoID":382,"resources":383,"time":49,"path":390,"id":391,"link":392},"Migration Guide",12,[30],"u3tgOE8qFjI",[384,388],{"link":385,"text":386,"type":387},"https:\u002F\u002Fserverlessland.com\u002Fcontent\u002Fservice\u002Flambda\u002Fpaved-path\u002Fjava-replatforming\u002Fintroduction","Java re-platforming guide","Guide",{"link":229,"text":230,"type":389},"Workshop","migration","migration.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fmigration","LIST",[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",1792665273191]