{"id":52744,"date":"2025-04-15T08:01:00","date_gmt":"2025-04-15T16:01:00","guid":{"rendered":"https:\/\/www.sumologic.com\/blog\/wie-man-eine-aws-lambda-funktion-in-java-11-erstellt-und-ueberwacht"},"modified":"2025-12-16T09:13:28","modified_gmt":"2025-12-16T17:13:28","slug":"how-to-write-aws-lambda-function-in-java8","status":"publish","type":"blog","link":"https:\/\/www.sumologic.com\/de\/blog\/how-to-write-aws-lambda-function-in-java8","title":{"rendered":"Wie man eine AWS Lambda-Funktion in Java 11 erstellt und \u00fcberwacht"},"content":{"rendered":"\n<section class=\"e-stn e-stn-0d652506f82b000a392973813b918ee25d5b4211 e-stn--glossary-inner-content e-stn--table-of-content\"><div class=\"container\">\n<div class=\"wp-block-b3rg-row e-row row\">\n<div class=\"wp-block-b3rg-column e-col e-col-1f7b3997080fc292474d26ff00c905d99d3520fa e-col--content-wrapper  col-sm-12 col-lg-12 col-xl-12\">\n<div class=\"e-div e-div-a1b32f66e1749758df41d5aea14f647cd10e362c e-div--card-btn-link\"><div class=\"e-img \">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1400\" height=\"400\" src=\"https:\/\/www.sumologic.com\/wp-content\/uploads\/header-javaAWSLambda.png\" alt=\"Java + AWS Lambda header\" class=\"wp-image-5005\" title=\"\"><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p><a href=\"https:\/\/www.sumologic.com\/glossary\/serverless\">Serverless Computing<\/a>\u00a0ist eine moderne Cloud-basierte Anwendungsarchitektur, bei der die Infrastruktur- und Support-Services-Schicht der Anwendung vollst\u00e4ndig von der Software-Schicht abstrahiert ist. W\u00e4hrend jede Anwendung immer noch auf physische Server angewiesen ist, verlagern serverlose Anwendungen diese Verantwortung auf Cloud-Service-Anbieter wie\u00a0<a href=\"https:\/\/www.sumologic.com\/resources\/amazon-web-services\/\">Amazon Web Services (AWS)<\/a>.  <\/p>\n\n\n\n<p>In einem wirklich\u00a0serverlosen Architekturparadigma l\u00e4uft Ihr\u00a0<a href=\"https:\/\/www.sumologic.com\/glossary\/aws-lambda\">Lambda<\/a>-Funktionscode auf einer Infrastruktur, die von einem Dritten gehostet und verwaltet wird, in der Regel einem Cloud-Dienst. Der Anbieter k\u00fcmmert sich um alles, von der Bereitstellung, Skalierung und\u00a0Lastverteilung bis hin zur Sicherung der Infrastruktur. Er verwaltet auch das AWS-Toolkit, die Betriebssysteme, die Patches, das serverlose Framework, die Code-Bibliotheken und alle notwendigen Support-Services. Sie zahlen nur f\u00fcr die Rechenzeit, die Ihre laufenden Anwendungen verbrauchen, w\u00e4hrend das serverlose Backend automatisch skaliert und die Last ausgleicht, wenn die Anwendungslast steigt oder sinkt \u2013 dies macht es kosteng\u00fcnstig und skalierbar.<a href=\"https:\/\/www.sumologic.com\/de\/blog\/aws-elb-alb\"><\/a><\/p>\n\n\n\n<p>Der\u00a0<a href=\"https:\/\/www.grandviewresearch.com\/industry-analysis\/serverless-computing-market-report#:~:text=Serverless%20Computing%20Market%20Size%20%26%20Trends,14.1%25%20from%202025%20to%202030.\" target=\"_blank\" rel=\"noreferrer noopener\">globale Markt f\u00fcr serverlose Architekturen<\/a>\u00a0wurde im Jahr 2024 auf 25,3 Mrd. USD gesch\u00e4tzt und wird voraussichtlich von 2025 bis 2030 mit einer j\u00e4hrlichen Wachstumsrate von 14,1 % wachsen. Da immer mehr Entwickler und Unternehmen Serverless Computing einsetzen, m\u00fcssen Sie wissen, wie Sie effiziente, ereignisgesteuerte Apps erstellen k\u00f6nnen, vor allem mit g\u00e4ngigen Sprachen wie Java.<\/p>\n\n\n\n<p>Um Ihnen den Einstieg zu erleichtern, zeigen wir Ihnen, wie Sie eine Lambda-Funktion mit Java 11 erstellen, sie mit Amazon DynamoDB verbinden und mit der Telemetrie-API-Integration von Sumo Logic eine bessere AWS-Observability erhalten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-an-aws-lambda-function\">Was ist eine AWS Lambda-Funktion?<\/h2>\n\n\n\n<p><a href=\"https:\/\/aws.amazon.com\/lambda\/\" target=\"_blank\" rel=\"noreferrer noopener\">AWS Lambda<\/a>\u00a0ist ein serverloser, ereignisgesteuerter Rechenservice, mit dem Sie Code f\u00fcr jede Art von Anwendung oder Backend-Service ausf\u00fchren k\u00f6nnen, ohne Server bereitstellen oder verwalten zu m\u00fcssen. Sie k\u00f6nnen Lambda-Funktionen aus \u00fcber 200 AWS-Services und Software-as-a-Service (SaaS)-Anwendungen ausl\u00f6sen, darunter\u00a0<a href=\"https:\/\/www.sumologic.com\/glossary\/aws-cloudwatch\">Amazon CloudWatch<\/a>,\u00a0<a href=\"https:\/\/www.sumologic.com\/glossary\/aws-s3\">Amazon S3<\/a>,\u00a0<a href=\"https:\/\/www.sumologic.com\/glossary\/aws-ec2\">Amazon EC2<\/a> und mehr.<\/p>\n\n\n\n<p>Diese Funktionen reagieren auf Ereignisse wie Daten, die von einem\u00a0<a href=\"https:\/\/help.sumologic.com\/docs\/integrations\/amazon-aws\/sqs\/\" target=\"_blank\" rel=\"noreferrer noopener\">Amazon Simple Queue Service (SQS)<\/a>\u00a0zu einer Lambda-Funktion flie\u00dfen oder auf eine \u00c4nderung in einer Datei in Amazon S3. Das Ereignis wird als erster Parameter an die Funktion \u00fcbergeben. Lambda-Funktionen sind v\u00f6llig zustandslos, das hei\u00dft, Sie haben keine Garantie, wo eine Funktion ausgef\u00fchrt wird oder wie oft sie auf einer bestimmten Instanz ausgef\u00fchrt wurde.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-code-aws-lambda-function-with-java-11\">Wie man eine AWS Lambda-Funktion mit Java 11 programmiert<\/h2>\n\n\n\n<p>Mit AWS Lambda k\u00f6nnen Sie eine Lambda-Java-Funktion erstellen, die hochgeladen und f\u00fcr die Ausf\u00fchrung in der AWS Cloud konfiguriert werden kann. Obwohl diese Funktion in verschiedenen Sprachen geschrieben werden kann, werden wir uns auf die Erstellung einer AWS Lambda-Funktion mit Java 11 konzentrieren. Wir f\u00fchren Sie durch die Schritte des Codierens, Konfigurierens und Testens Ihrer Funktion mithilfe der AWS-Konsole.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aws-lambda-example-a-simple-zipcode-validator\">AWS Lambda-Beispiel: Ein einfacher Postleitzahlen-Validator<\/h3>\n\n\n\n<p>In diesem Beispiel erstellen wir eine einfache PLZ-Pr\u00fcfung, die auf eine neue, einer Amazon DynamoDB-Tabelle hinzugef\u00fcgten Adresse reagiert.<\/p>\n\n\n\n<p><strong>Schritt 0: Bevor Sie beginnen<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stellen Sie sicher, dass Sie Zugriff auf die AWS Management Console haben. Das Erstellen und Bereitstellen dieses Beispiels sollte im Rahmen des kostenlosen AWS-Tiers nichts kosten.<\/li>\n\n\n\n<li>Deaktivieren Sie alle Trigger und l\u00f6schen Sie die DynamoDB-Tabelle nach dem Test, um unn\u00f6tige Nutzung zu vermeiden.<\/li>\n<\/ul>\n\n\n\n<p><strong>Schritt 1: Erstellen Sie eine DynamoDB-Tabelle<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gehen Sie zur DynamoDB-Konsole.<\/li>\n\n\n\n<li>Erstellen Sie eine Tabelle namens\u00a0US_Address_Table\u00a0mit einem Prim\u00e4rschl\u00fcssel vom Typ id (String).<\/li>\n\n\n\n<li>Aktivieren Sie Streams mit\u00a0NEW_IMAGE-Ansichtstyp.<\/li>\n\n\n\n<li>Kopieren Sie die ARN der Tabelle zur Verwendung im n\u00e4chsten Schritt.<\/li>\n<\/ul>\n\n\n\n<p><strong>Schritt 2: Erstellen Sie eine Rolle f\u00fcr Ihre Lambda-Funktion<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navigieren Sie zur IAM-Konsole.<\/li>\n\n\n\n<li>Erstellen Sie eine neue Rolle mit der verwalteten Policy AWSLambdaDynamoDBExecutionRole.<\/li>\n\n\n\n<li>Geben Sie der Rolle einen Namen, etwa\u00a0lambda-validator.<\/li>\n<\/ul>\n\n\n\n<p><strong>Schritt 3: F\u00fcgen Sie Berechtigungen hinzu, um DynamoDB zu aktualisieren<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>F\u00fcgen Sie eine Inline-Policy hinzu oder verwenden Sie die Konsole, um\u00a0UpdateItem-Berechtigungen f\u00fcr Ihre DynamoDB-Tabelle unter Verwendung der ARN der Tabelle zu erteilen.<\/li>\n<\/ul>\n\n\n\n<p><strong>Schritt 4: Coden wir die Lambda-Funktion<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verwenden Sie Java 11 und das AWS SDK v2. Hier ist eine vereinfachte Version der Lambda-Funktion:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.example;\nimport com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.LambdaLogger;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\nimport software.amazon.awssdk.regions.Region;\nimport software.amazon.awssdk.services.dynamodb.DynamoDbClient;\nimport software.amazon.awssdk.services.dynamodb.model.*;\nimport com.amazonaws.services.lambda.runtime.events.DynamodbEvent;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport java.util.regex.Pattern;\npublic class <strong>AddressValidator<\/strong> implements <strong>RequestHandler<\/strong>&lt;<strong>DynamodbEvent<\/strong>, <strong>String<\/strong>&gt; {\n    private static final Pattern ZIP_CODE_PATTERN = Pattern.compile(\"^[0-9]{5}(?:-[0-9]{4})?$\");\n    private final ObjectMapper objectMapper = new ObjectMapper();\n    private final DynamoDbClient dynamoDbClient = DynamoDbClient.builder().region(Region.US_WEST_2).build();\n    private static final String TABLE_NAME = \"US_Address_Table\";\n    public String <strong>handleRequest<\/strong>(DynamodbEvent event, Context context) {\n        LambdaLogger logger = context.getLogger();\n        for (DynamodbEvent.DynamodbStreamRecord record : event.getRecords()) {\n            if (\"INSERT\".equals(record.getEventName())) {\n                try {\n                    String jsonAddress = record.getDynamodb().getNewImage().get(\"address\").getS();\n                    Address address = objectMapper.readValue(jsonAddress, Address.class);\n                    if (!Boolean.TRUE.equals(address.getValidated())) {\n                        address.setValidated(ZIP_CODE_PATTERN.matcher(address.getZipcode()).matches());\n                        String updatedJson = objectMapper.writeValueAsString(address);\n                        dynamoDbClient.updateItem(UpdateItemRequest.builder()\n                                .tableName(TABLE_NAME)\n                                .key(record.getDynamodb().getKeys())\n                                .updateExpression(\"SET address = :a\")\n                                .expressionAttributeValues(Map.of(\":a\", AttributeValue.builder().s(updatedJson).build()))\n                                .returnValues(ReturnValue.UPDATED_NEW)\n                                .build());\n                    }\n                } catch (Exception e) {\n                    logger.log(\"Exception during ZIP validation: \" + e.getMessage());\n                }\n            }\n        }\n        return \"Validated \" + event.getRecords().size() + \" records.\";\n    }\n}   \n<\/pre>\n\n\n\n<p><strong>Schritt 5: Laden Sie Ihre Lambda-Funktion \u00fcber die AWS-Konsole hoch<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verpacken Sie Ihre Java Lambda-Funktion als Fat-JAR mit Maven oder Gradle.<\/li>\n\n\n\n<li>Laden Sie sie \u00fcber die AWS Lambda-Konsole hoch.<\/li>\n\n\n\n<li>Setzen Sie die Laufzeit auf Java 11 und den Handler auf\u00a0com.example.AddressValidator::handleRequest.<\/li>\n\n\n\n<li>Weisen Sie die Rolle zu, die Sie zuvor erstellt haben.<\/li>\n<\/ul>\n\n\n\n<p><strong>Schritt 6: Testen Sie Ihre Funktion synchron in der AWS-Konsole<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Erstellen Sie ein Testereignis in der Lambda-Konsole.<\/li>\n\n\n\n<li>Verwenden Sie dieses JSON-Format:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n  \"Records\": [\n    {\n      \"eventID\": \"1\",\n      \"eventVersion\": \"1.0\",\n      \"dynamodb\": {\n        \"Keys\": {\n          \"id\": {\"S\": \"111-222-333\"}\n        },\n        \"NewImage\": {\n          \"address\": {\n            \"S\": \"{\\\"address1\\\":\\\"123 Main St\\\",\\\"city\\\":\\\"Portland\\\",\\\"state\\\":\\\"OR\\\",\\\"zipcode\\\":\\\"97229\\\"}\"\n          },\n          \"id\": {\"S\": \"111-222-333\"}\n        },\n        \"StreamViewType\": \"NEW_IMAGE\",\n        \"SequenceNumber\": \"111-222-333\",\n        \"SizeBytes\": 26\n      },\n      \"awsRegion\": \"us-west-2\",\n      \"eventName\": \"INSERT\",\n      \"eventSourceARN\": \"arn:aws:dynamodb:us-west-2:account-id:table\/ExampleTableWithStream\/stream\/2023-01-01T00:00:00.000\",\n      \"eventSource\": \"aws:dynamodb\"\n    }\n  ]\n}   \n<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wenn Sie einen NullPointer oder einen Berechtigungsfehler erhalten, \u00fcberpr\u00fcfen Sie, ob die ARN der Tabelle korrekt ist und Ihre Lambda-Rolle \u00fcber die erforderlichen Berechtigungen verf\u00fcgt.<\/li>\n\n\n\n<li>F\u00fcgen Sie\u00a0logger.log()-Anweisungen hinzu, um die Fehlersuche zu erleichtern.<\/li>\n<\/ul>\n\n\n\n<p><strong>Schritt 7: L\u00f6sen Sie die Lambda-Funktion von DynamoDB aus<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gehen Sie in der DynamoDB-Konsole auf die Registerkarte \u201eTriggers\u201c Ihrer Tabelle und verkn\u00fcpfen Sie sie mit Ihrer Lambda-Funktion.<\/li>\n\n\n\n<li>Setzen Sie die Batchgr\u00f6\u00dfe f\u00fcr manuelles Testen auf 1.<\/li>\n\n\n\n<li>Sobald die Verbindung hergestellt ist, sollte das Einf\u00fcgen eines neuen Elements in Ihre Tabelle den Lambda ausl\u00f6sen und das Adressobjekt mit einem\u00a0validierten\u00a0Feld aktualisieren.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-can-sumo-logic-help-you\">Wie kann Sumo Logic Ihnen helfen?<\/h2>\n\n\n\n<p>Mit der SaaS-Log-Analyse-Plattform von Sumo Logic k\u00f6nnen Sie Logs, Plattformmetriken und Plattform-Traces von\u00a0<a href=\"https:\/\/www.sumologic.com\/blog\/lambda-extensions\">AWS Lambda \u00fcber die Telemetrie-API direkt in Sumo Logic<\/a>\u00a0integrieren. Diese Integration verbessert die Observability in Ihrer gesamten Umgebung und erm\u00f6glicht Ihnen eine bessere Sichtbarkeit und eine einfache \u00dcberwachung Ihre Lambda-Funktion, ohne dass Sie die Infrastruktur verwalten m\u00fcssen.<\/p>\n\n\n\n<p>Sind Sie bereit, Ihre AWS-\u00dcberwachung und Observability auf die n\u00e4chste Stufe zu heben?\u00a0<a href=\"\/sign-up\">Melden Sie sich f\u00fcr unsere kostenlose 30-Tage-Testversion an.<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div><\/section>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":331,"featured_media":45444,"template":"","meta":{"_acf_changed":false,"show_custom_date":false,"custom_date":"","featured":false,"featured_image":0,"learn_more_label":"","image_alt_text":"","learn_more_type":"","show_popup":false,"learn_more_link_file":0,"event_date":false,"event_start_date":"","event_end_date":"","place_holder_image_url":"","post_reading_time":"4","notification_enabled":false,"notification_text":"","notification_logo":"","notification_expiration_time":0,"is_enable_transparent_header":false,"selected_taxonomy_terms":{"blog-category":[256,258,262],"blog-tag":[],"translation_priority":[221]},"selected_primary_terms":[],"learn_more_link":[],"featured_page_list":[],"notification_enabled_post_list":[],"_gspb_post_css":"","_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"52702,62709,62726","_relevanssi_noindex_reason":"","inline_featured_image":false,"footnotes":""},"blog-category":[256,258,262],"blog-tag":[],"class_list":["post-52744","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-devops-it-operations","blog-category-aws","blog-category-application-observability"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/blog\/52744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/users\/331"}],"version-history":[{"count":5,"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/blog\/52744\/revisions"}],"predecessor-version":[{"id":63303,"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/blog\/52744\/revisions\/63303"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/media\/45444"}],"wp:attachment":[{"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/media?parent=52744"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/blog-category?post=52744"},{"taxonomy":"blog-tag","embeddable":true,"href":"https:\/\/www.sumologic.com\/de\/wp-json\/wp\/v2\/blog-tag?post=52744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}