From 7ba155d9ddaea3550690b440cb70cee18ce86262 Mon Sep 17 00:00:00 2001 From: Alexander Yu Date: Tue, 21 Feb 2023 14:00:43 -0800 Subject: [PATCH 1/8] Use Java 11 runtime for blank-java example - Upgrade runtime from java8 to java11 - Increase code memory size from 512MB -> 2048MB - Tested all steps and function still runs properly --- sample-apps/blank-java/build.gradle | 4 ++-- sample-apps/blank-java/pom.xml | 4 ++-- sample-apps/blank-java/template-mvn.yml | 4 ++-- sample-apps/blank-java/template.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sample-apps/blank-java/build.gradle b/sample-apps/blank-java/build.gradle index f5c3aa9e..8f15b122 100644 --- a/sample-apps/blank-java/build.gradle +++ b/sample-apps/blank-java/build.gradle @@ -53,8 +53,8 @@ task packageSkinny(type: Zip) { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } build.dependsOn packageSkinny diff --git a/sample-apps/blank-java/pom.xml b/sample-apps/blank-java/pom.xml index 3b8bb0f7..9f86c7fc 100644 --- a/sample-apps/blank-java/pom.xml +++ b/sample-apps/blank-java/pom.xml @@ -8,8 +8,8 @@ blank-java-function UTF-8 - 1.8 - 1.8 + 11 + 11 diff --git a/sample-apps/blank-java/template-mvn.yml b/sample-apps/blank-java/template-mvn.yml index a2c3d5d6..105751cd 100644 --- a/sample-apps/blank-java/template-mvn.yml +++ b/sample-apps/blank-java/template-mvn.yml @@ -7,9 +7,9 @@ Resources: Properties: CodeUri: target/blank-java-1.0-SNAPSHOT.jar Handler: example.Handler::handleRequest - Runtime: java8 + Runtime: java11 Description: Java function - MemorySize: 512 + MemorySize: 2048 Timeout: 10 # Function's execution role Policies: diff --git a/sample-apps/blank-java/template.yml b/sample-apps/blank-java/template.yml index 748d3b7e..5a5d9f93 100644 --- a/sample-apps/blank-java/template.yml +++ b/sample-apps/blank-java/template.yml @@ -7,9 +7,9 @@ Resources: Properties: CodeUri: build/distributions/blank-java.zip Handler: example.Handler::handleRequest - Runtime: java8 + Runtime: java11 Description: Java function - MemorySize: 512 + MemorySize: 2048 Timeout: 10 # Function's execution role Policies: From 101eea3353a5212fd3f477d5777569f6970b9b20 Mon Sep 17 00:00:00 2001 From: Alexander Yu Date: Tue, 21 Feb 2023 19:19:53 -0800 Subject: [PATCH 2/8] Update all of java-basic to use Java 11. - Added a bit more functionality to each handler - Added proper unit testing for each handler; all tests pass - Maven hack to exclude META-INF from shaded jar, avoiding a warning - Tested handlers to ensure they work as advertised --- sample-apps/java-basic/build.gradle | 4 +- sample-apps/java-basic/pom.xml | 16 +++- .../src/main/java/example/HandlerDivide.java | 3 + .../src/main/java/example/HandlerInteger.java | 5 +- .../src/main/java/example/HandlerList.java | 5 +- .../src/main/java/example/HandlerStream.java | 4 + .../src/main/java/example/HandlerString.java | 9 +- .../main/java/example/HandlerWeatherData.java | 10 +++ .../java/example/InputLengthException.java | 2 +- .../src/test/java/example/InvokeTest.java | 84 +++++++++++++++++-- sample-apps/java-basic/template-mvn.yml | 4 +- sample-apps/java-basic/template.yml | 4 +- 12 files changed, 128 insertions(+), 22 deletions(-) diff --git a/sample-apps/java-basic/build.gradle b/sample-apps/java-basic/build.gradle index f2688f40..343fb398 100644 --- a/sample-apps/java-basic/build.gradle +++ b/sample-apps/java-basic/build.gradle @@ -28,8 +28,8 @@ task buildZip(type: Zip) { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } build.dependsOn buildZip diff --git a/sample-apps/java-basic/pom.xml b/sample-apps/java-basic/pom.xml index 4e280a67..26b3baa7 100644 --- a/sample-apps/java-basic/pom.xml +++ b/sample-apps/java-basic/pom.xml @@ -8,8 +8,8 @@ java-basic-function UTF-8 - 1.8 - 1.8 + 11 + 11 @@ -61,6 +61,14 @@ 3.2.2 false + + + com.example:* + + META-INF/MANIFEST.MF + + + @@ -76,8 +84,8 @@ maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 11 + 11 diff --git a/sample-apps/java-basic/src/main/java/example/HandlerDivide.java b/sample-apps/java-basic/src/main/java/example/HandlerDivide.java index e70f2b90..b523d6c7 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerDivide.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerDivide.java @@ -9,6 +9,9 @@ // Handler value: example.HandlerDivide public class HandlerDivide implements RequestHandler, Integer>{ + /* + * Takes a list of two integers and divides them. + */ @Override public Integer handleRequest(List event, Context context) { diff --git a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java index 1bff73d5..b5063238 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java @@ -8,11 +8,14 @@ public class HandlerInteger implements RequestHandler{ @Override + /* + * Takes an Integer as input, adds 1, and returns it. + */ public Integer handleRequest(Integer event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass().toString()); - return context.getRemainingTimeInMillis(); + return event + 1; } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerList.java b/sample-apps/java-basic/src/main/java/example/HandlerList.java index 8721cfbf..015de794 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerList.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerList.java @@ -10,11 +10,14 @@ public class HandlerList implements RequestHandler, Integer>{ @Override + /* + * Takes a list of Integers and returns its sum. + */ public Integer handleRequest(List event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass().toString()); - return context.getRemainingTimeInMillis() ; + return event.stream().mapToInt(Integer::intValue).sum(); } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerStream.java b/sample-apps/java-basic/src/main/java/example/HandlerStream.java index c106dabe..30034635 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerStream.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerStream.java @@ -11,6 +11,10 @@ public class HandlerStream implements RequestStreamHandler { @Override + /* + * Takes an InputStream and an OutputStream. Reads from the InputStream, + * and copies all characters to the OutputStream. + */ public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { int nextChar; diff --git a/sample-apps/java-basic/src/main/java/example/HandlerString.java b/sample-apps/java-basic/src/main/java/example/HandlerString.java index ae329af6..f43bd3cb 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerString.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerString.java @@ -5,14 +5,17 @@ import com.amazonaws.services.lambda.runtime.LambdaLogger; // Handler value: example.HandlerString -public class HandlerString implements RequestHandler{ +public class HandlerString implements RequestHandler{ @Override - public Integer handleRequest(String event, Context context) + /* + * Takes a String as input, and converts all characters to lowercase. + */ + public String handleRequest(String event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass().toString()); - return context.getRemainingTimeInMillis(); + return event.toLowerCase(); } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java index fb250b36..353cc3b8 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java @@ -8,11 +8,21 @@ public class HandlerWeatherData implements RequestHandler{ @Override + /* + * Takes in a WeatherData event object and updates its attributes with dummy values. + * Returns the updated WeatherData object. + */ public WeatherData handleRequest(WeatherData event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass().toString()); + + event.setHumidityPct(50.5); + event.setPressureHPa(1005); + event.setWindKmh(28); + // Assumes temperature of event is already set + event.setTemperatureK(event.getTemperatureK() + 2); return event; } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/InputLengthException.java b/sample-apps/java-basic/src/main/java/example/InputLengthException.java index 6dea47c2..ee62bb9c 100644 --- a/sample-apps/java-basic/src/main/java/example/InputLengthException.java +++ b/sample-apps/java-basic/src/main/java/example/InputLengthException.java @@ -6,4 +6,4 @@ public class InputLengthException extends RuntimeException { public InputLengthException(String errorMessage) { super(errorMessage); } -} \ No newline at end of file +} diff --git a/sample-apps/java-basic/src/test/java/example/InvokeTest.java b/sample-apps/java-basic/src/test/java/example/InvokeTest.java index fccbf910..23d079df 100644 --- a/sample-apps/java-basic/src/test/java/example/InvokeTest.java +++ b/sample-apps/java-basic/src/test/java/example/InvokeTest.java @@ -1,6 +1,9 @@ package example; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import org.junit.jupiter.api.Test; import com.amazonaws.services.lambda.runtime.Context; @@ -8,19 +11,88 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.HashMap; +import java.util.List; class InvokeTest { private static final Logger logger = LoggerFactory.getLogger(InvokeTest.class); @Test - void invokeTest() { - logger.info("Invoke TEST"); - HashMap event = new HashMap(); + void testHandler() { + logger.info("Invoke TEST - Handler"); + var event = new HashMap(); Context context = new TestContext(); Handler handler = new Handler(); - String result = handler.handleRequest(event, context); - assertTrue(result.contains("200 OK")); + assertNull(handler.handleRequest(event, context)); } + @Test + void testHandlerDivide() { + logger.info("Invoke TEST - HandlerDivide"); + var event = List.of(20, 5); + Context context = new TestContext(); + HandlerDivide handler = new HandlerDivide(); + assertEquals(4, handler.handleRequest(event, context)); + } + + @Test + void testHandlerInteger() { + logger.info("Invoke TEST - HandlerInteger"); + Integer event = 1; + Context context = new TestContext(); + HandlerInteger handler = new HandlerInteger(); + assertEquals(2, handler.handleRequest(event, context)); + } + + @Test + void testHandlerList() { + logger.info("Invoke TEST - HandlerList"); + var event = List.of(1, 2, 3, 4); + Context context = new TestContext(); + HandlerList handler = new HandlerList(); + assertEquals(10, handler.handleRequest(event, context)); + } + + @Test + void testHandlerStream() throws IOException { + logger.info("Invoke TEST - HandlerStream"); + String inputStr = "Hello world"; + byte[] inputBytes = inputStr.getBytes(); + ByteArrayInputStream inputStream = new ByteArrayInputStream(inputBytes); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + Context context = new TestContext(); + HandlerStream handler = new HandlerStream(); + handler.handleRequest(inputStream, outputStream, context); + byte[] outputBytes = outputStream.toByteArray(); + assertArrayEquals(inputBytes, outputBytes); + String outputStr = new String(outputBytes, StandardCharsets.UTF_8); + assertEquals(inputStr, outputStr); + } + + @Test + void testHandlerString() { + logger.info("Invoke TEST - HandlerString"); + String event = "HeLlO wOrLd"; + Context context = new TestContext(); + HandlerString handler = new HandlerString(); + assertEquals("hello world", handler.handleRequest(event, context)); + } + + @Test + void testHandlerWeatherData() { + logger.info("Invoke TEST - HandlerWeatherData"); + WeatherData inputData = new WeatherData(); + inputData.setTemperatureK(298); + Context context = new TestContext(); + HandlerWeatherData handler = new HandlerWeatherData(); + WeatherData outputData = handler.handleRequest(inputData, context); + assertNotNull(outputData.getHumidityPct()); + assertNotNull(outputData.getPressureHPa()); + assertNotNull(outputData.getWindKmh()); + assertEquals(300, outputData.getTemperatureK()); + } } diff --git a/sample-apps/java-basic/template-mvn.yml b/sample-apps/java-basic/template-mvn.yml index 0fdaaf91..b083f3f6 100644 --- a/sample-apps/java-basic/template-mvn.yml +++ b/sample-apps/java-basic/template-mvn.yml @@ -7,9 +7,9 @@ Resources: Properties: CodeUri: target/java-basic-1.0-SNAPSHOT.jar Handler: example.Handler - Runtime: java8 + Runtime: java11 Description: Java function - MemorySize: 512 + MemorySize: 2048 Timeout: 10 # Function's execution role Policies: diff --git a/sample-apps/java-basic/template.yml b/sample-apps/java-basic/template.yml index 5cec6e28..b82fa0aa 100644 --- a/sample-apps/java-basic/template.yml +++ b/sample-apps/java-basic/template.yml @@ -7,9 +7,9 @@ Resources: Properties: CodeUri: build/distributions/java-basic.zip Handler: example.Handler - Runtime: java8 + Runtime: java11 Description: Java function - MemorySize: 512 + MemorySize: 2048 Timeout: 10 # Function's execution role Policies: From 2675a77e74de7ff23a31d3ad098c93155fb29285 Mon Sep 17 00:00:00 2001 From: Alexander Yu Date: Thu, 23 Feb 2023 00:17:40 -0800 Subject: [PATCH 3/8] Update java-events examples to use Java 11. - Add better functionality to each handler event. - Write one unit test per handler, using aws-lambda-java-tests library. - Tested each handler to ensure each still works. - Cleanup of blank-java and java-basic code. --- sample-apps/blank-java/build.gradle | 4 +- sample-apps/blank-java/pom.xml | 21 +- sample-apps/java-basic/build.gradle | 4 +- sample-apps/java-basic/pom.xml | 9 +- .../src/main/java/example/Handler.java | 13 +- .../src/main/java/example/HandlerDivide.java | 8 +- .../src/main/java/example/HandlerInteger.java | 11 +- .../src/main/java/example/HandlerList.java | 11 +- .../src/main/java/example/HandlerStream.java | 7 +- .../src/main/java/example/HandlerString.java | 11 +- .../main/java/example/HandlerWeatherData.java | 11 +- sample-apps/java-events/build.gradle | 7 +- .../java-events/events/apigateway-v1.json | 2 +- .../java-events/events/apigateway-v2.json | 1 + .../java-events/events/cloudfront.json | 40 ++++ .../java-events/events/sns-notification.json | 2 +- sample-apps/java-events/pom.xml | 38 ++-- .../src/main/java/example/Handler.java | 34 --- ...iGateway.java => HandlerApiGatewayV1.java} | 22 +- .../java/example/HandlerApiGatewayV2.java | 34 +++ .../main/java/example/HandlerCWEvents.java | 25 ++- .../src/main/java/example/HandlerCWLogs.java | 22 +- .../main/java/example/HandlerCloudFront.java | 28 ++- .../main/java/example/HandlerCodeCommit.java | 31 ++- .../src/main/java/example/HandlerCognito.java | 26 ++- .../src/main/java/example/HandlerConfig.java | 14 +- .../main/java/example/HandlerDynamoDB.java | 25 +-- .../main/java/example/HandlerFirehose.java | 26 ++- .../src/main/java/example/HandlerKinesis.java | 18 +- .../src/main/java/example/HandlerLex.java | 14 +- .../src/main/java/example/HandlerS3.java | 11 +- .../src/main/java/example/HandlerSNS.java | 28 ++- .../src/main/java/example/HandlerSQS.java | 15 +- .../src/main/java/example/Util.java | 20 -- .../src/test/java/example/InvokeTest.java | 200 +++++++++++++++++- 35 files changed, 531 insertions(+), 262 deletions(-) create mode 100644 sample-apps/java-events/events/cloudfront.json delete mode 100644 sample-apps/java-events/src/main/java/example/Handler.java rename sample-apps/java-events/src/main/java/example/{HandlerApiGateway.java => HandlerApiGatewayV1.java} (61%) create mode 100644 sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java delete mode 100644 sample-apps/java-events/src/main/java/example/Util.java diff --git a/sample-apps/blank-java/build.gradle b/sample-apps/blank-java/build.gradle index 8f15b122..8058374b 100644 --- a/sample-apps/blank-java/build.gradle +++ b/sample-apps/blank-java/build.gradle @@ -21,8 +21,8 @@ dependencies { runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)' runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.0' testImplementation 'com.amazonaws:aws-lambda-java-tests:1.1.1' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' } test { diff --git a/sample-apps/blank-java/pom.xml b/sample-apps/blank-java/pom.xml index 9f86c7fc..bd642a4f 100644 --- a/sample-apps/blank-java/pom.xml +++ b/sample-apps/blank-java/pom.xml @@ -70,13 +70,13 @@ org.junit.jupiter junit-jupiter-api - 5.6.0 + 5.8.2 test org.junit.jupiter junit-jupiter-engine - 5.6.0 + 5.8.2 test @@ -106,29 +106,16 @@ shade - - - - - - - - - com.github.edwgiz - maven-shade-plugin.log4j2-cachefile-transformer - [2.17.1,) - - org.apache.maven.plugins maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 11 + 11 diff --git a/sample-apps/java-basic/build.gradle b/sample-apps/java-basic/build.gradle index 343fb398..95a82dea 100644 --- a/sample-apps/java-basic/build.gradle +++ b/sample-apps/java-basic/build.gradle @@ -8,9 +8,7 @@ repositories { dependencies { implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' - testImplementation 'org.apache.logging.log4j:log4j-api:[2.17.1,)' - testImplementation 'org.apache.logging.log4j:log4j-core:[2.17.1,)' - testImplementation 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)' + runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0' } diff --git a/sample-apps/java-basic/pom.xml b/sample-apps/java-basic/pom.xml index 26b3baa7..2489b1ec 100644 --- a/sample-apps/java-basic/pom.xml +++ b/sample-apps/java-basic/pom.xml @@ -33,20 +33,19 @@ org.apache.logging.log4j log4j-slf4j18-impl [2.17.1,) - test - + org.junit.jupiter junit-jupiter-api 5.6.0 test - - + + org.junit.jupiter junit-jupiter-engine 5.6.0 test - + diff --git a/sample-apps/java-basic/src/main/java/example/Handler.java b/sample-apps/java-basic/src/main/java/example/Handler.java index f8b3ea81..d2526c3d 100644 --- a/sample-apps/java-basic/src/main/java/example/Handler.java +++ b/sample-apps/java-basic/src/main/java/example/Handler.java @@ -2,20 +2,23 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Map; // Handler value: example.Handler public class Handler implements RequestHandler, Void>{ + private static final Logger logger = LoggerFactory.getLogger(Handler.class); + @Override public Void handleRequest(Map event, Context context) { - LambdaLogger logger = context.getLogger(); - logger.log("ENVIRONMENT VARIABLES: " + System.getenv()); - logger.log("EVENT: " + event); - logger.log("EVENT TYPE: " + event.getClass()); + logger.info("ENVIRONMENT VARIABLES: " + System.getenv()); + logger.info("EVENT: " + event); + logger.info("EVENT TYPE: " + event.getClass()); return null; } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerDivide.java b/sample-apps/java-basic/src/main/java/example/HandlerDivide.java index b523d6c7..c78b577e 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerDivide.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerDivide.java @@ -2,27 +2,29 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + // Handler value: example.HandlerDivide public class HandlerDivide implements RequestHandler, Integer>{ + private static final Logger logger = LoggerFactory.getLogger(HandlerDivide.class); /* * Takes a list of two integers and divides them. */ @Override public Integer handleRequest(List event, Context context) { - LambdaLogger logger = context.getLogger(); if ( event.size() != 2 ) { throw new InputLengthException("Input must be an array that contains 2 numbers."); } int numerator = event.get(0); int denominator = event.get(1); - logger.log("EVENT: Numerator is " + event.get(0).toString() + + logger.info("EVENT: Numerator is " + event.get(0).toString() + "; Denominator is " + event.get(1).toString()); return numerator/denominator; } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java index b5063238..00d737a1 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java @@ -2,20 +2,23 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerInteger public class HandlerInteger implements RequestHandler{ + private static final Logger logger = LoggerFactory.getLogger(HandlerInteger.class); + @Override /* * Takes an Integer as input, adds 1, and returns it. */ public Integer handleRequest(Integer event, Context context) { - LambdaLogger logger = context.getLogger(); - logger.log("EVENT: " + event); - logger.log("EVENT TYPE: " + event.getClass().toString()); + logger.info("EVENT: " + event); + logger.info("EVENT TYPE: " + event.getClass().toString()); return event + 1; } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerList.java b/sample-apps/java-basic/src/main/java/example/HandlerList.java index 015de794..84034674 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerList.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerList.java @@ -2,22 +2,25 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; // Handler value: example.HandlerList public class HandlerList implements RequestHandler, Integer>{ + private static final Logger logger = LoggerFactory.getLogger(HandlerList.class); + @Override /* * Takes a list of Integers and returns its sum. */ public Integer handleRequest(List event, Context context) { - LambdaLogger logger = context.getLogger(); - logger.log("EVENT: " + event); - logger.log("EVENT TYPE: " + event.getClass().toString()); + logger.info("EVENT: " + event); + logger.info("EVENT TYPE: " + event.getClass().toString()); return event.stream().mapToInt(Integer::intValue).sum(); } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerStream.java b/sample-apps/java-basic/src/main/java/example/HandlerStream.java index 30034635..1d3066d0 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerStream.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerStream.java @@ -7,9 +7,14 @@ import java.io.IOException; import java.io.OutputStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + // Handler value: example.HandlerStream public class HandlerStream implements RequestStreamHandler { + private static final Logger logger = LoggerFactory.getLogger(HandlerStream.class); + @Override /* * Takes an InputStream and an OutputStream. Reads from the InputStream, @@ -27,7 +32,7 @@ public void handleRequest(InputStream inputStream, OutputStream outputStream, Co } finally { inputStream.close(); String finalString = outputStream.toString(); - System.out.println(finalString); + logger.info("Final string result: " + finalString); outputStream.close(); } } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerString.java b/sample-apps/java-basic/src/main/java/example/HandlerString.java index f43bd3cb..5598143c 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerString.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerString.java @@ -2,20 +2,23 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerString public class HandlerString implements RequestHandler{ + private static final Logger logger = LoggerFactory.getLogger(HandlerString.class); + @Override /* * Takes a String as input, and converts all characters to lowercase. */ public String handleRequest(String event, Context context) { - LambdaLogger logger = context.getLogger(); - logger.log("EVENT: " + event); - logger.log("EVENT TYPE: " + event.getClass().toString()); + logger.info("EVENT: " + event); + logger.info("EVENT TYPE: " + event.getClass().toString()); return event.toLowerCase(); } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java index 353cc3b8..6a839d03 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java @@ -2,11 +2,15 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerWeatherData public class HandlerWeatherData implements RequestHandler{ + private static final Logger logger = LoggerFactory.getLogger(WeatherData.class); + @Override /* * Takes in a WeatherData event object and updates its attributes with dummy values. @@ -14,9 +18,8 @@ public class HandlerWeatherData implements RequestHandlerjava-events-function UTF-8 - 1.8 - 1.8 + 11 + 11 @@ -27,16 +27,6 @@ gson 2.8.9 - - org.apache.logging.log4j - log4j-api - [2.17.1,) - - - org.apache.logging.log4j - log4j-core - [2.17.1,) - org.apache.logging.log4j log4j-slf4j18-impl @@ -45,13 +35,19 @@ org.junit.jupiter junit-jupiter-api - 5.6.0 + 5.8.2 test org.junit.jupiter junit-jupiter-engine - 5.6.0 + 5.8.2 + test + + + com.amazonaws + aws-lambda-java-tests + 1.1.1 test @@ -68,6 +64,16 @@ 3.2.2 false + + + *:* + + module-info.class + META-INF/* + META-INF/versions/** + + + @@ -83,8 +89,8 @@ maven-compiler-plugin 3.8.1 - 1.8 - 1.8 + 11 + 11 diff --git a/sample-apps/java-events/src/main/java/example/Handler.java b/sample-apps/java-events/src/main/java/example/Handler.java deleted file mode 100644 index d46bb14e..00000000 --- a/sample-apps/java-events/src/main/java/example/Handler.java +++ /dev/null @@ -1,34 +0,0 @@ -package example; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; -import com.amazonaws.services.lambda.runtime.events.APIGatewayV2ProxyRequestEvent; -import com.amazonaws.services.lambda.runtime.events.APIGatewayV2ProxyResponseEvent; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import java.util.HashMap; - -// Handler value: example.Handler -public class Handler implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - @Override - public APIGatewayV2ProxyResponseEvent handleRequest(APIGatewayV2ProxyRequestEvent event, Context context) - { - LambdaLogger logger = context.getLogger(); - APIGatewayV2ProxyResponseEvent response = new APIGatewayV2ProxyResponseEvent(); - response.setIsBase64Encoded(false); - response.setStatusCode(200); - HashMap headers = new HashMap(); - headers.put("Content-Type", "text/html"); - response.setHeaders(headers); - response.setBody("AWS Lambda sample"+ - "

Welcome

Page generated by a Lambda function.

" + - ""); - // log execution details - Util.logEnvironment(event, context, gson); - return response; - } -} \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerApiGateway.java b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV1.java similarity index 61% rename from sample-apps/java-events/src/main/java/example/HandlerApiGateway.java rename to sample-apps/java-events/src/main/java/example/HandlerApiGatewayV1.java index c7513c2b..03e5fdc2 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerApiGateway.java +++ b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV1.java @@ -5,28 +5,30 @@ import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - import java.util.HashMap; -// Handler value: example.HandlerApiGateway -public class HandlerApiGateway implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +// Handler value: example.Handler +public class HandlerApiGatewayV1 implements RequestHandler{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerApiGatewayV1.class); + @Override public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) { + logger.info("EVENT TYPE: " + event.getClass().toString()); APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent(); response.setIsBase64Encoded(false); response.setStatusCode(200); HashMap headers = new HashMap(); headers.put("Content-Type", "text/html"); response.setHeaders(headers); - response.setBody("AWS Lambda sample"+ + String body = event.getBody() != null ? event.getBody() : "Empty body"; + response.setBody("" + body + "" + "

Welcome

Page generated by a Lambda function.

" + ""); - // log execution details - Util.logEnvironment(event, context, gson); return response; } -} +} \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java new file mode 100644 index 00000000..67925375 --- /dev/null +++ b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java @@ -0,0 +1,34 @@ +package example; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent; +import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPResponse; + +import java.util.HashMap; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +// Handler value: example.HandlerApiGateway +public class HandlerApiGatewayV2 implements RequestHandler{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerApiGatewayV2.class); + + @Override + public APIGatewayV2HTTPResponse handleRequest(APIGatewayV2HTTPEvent event, Context context) + { + logger.info("EVENT TYPE: " + event.getClass().toString()); + APIGatewayV2HTTPResponse response = new APIGatewayV2HTTPResponse(); + response.setIsBase64Encoded(false); + response.setStatusCode(200); + HashMap headers = new HashMap(); + headers.put("Content-Type", "text/html"); + response.setHeaders(headers); + String body = event.getBody() != null ? event.getBody() : "Empty body"; + response.setBody("" + body + "" + + "

Welcome

Page generated by a Lambda function.

" + + ""); + return response; + } +} diff --git a/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java b/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java index 3678e982..8f8d8c55 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java @@ -4,18 +4,25 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.ScheduledEvent; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerCWEvents -public class HandlerCWEvents implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); +public class HandlerCWEvents implements RequestHandler>{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerCWEvents.class); + @Override - public String handleRequest(ScheduledEvent event, Context context) + public List handleRequest(ScheduledEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + var resourcesFound = new ArrayList(); + for (String resource : event.getResources()) { + resourcesFound.add(resource); + } + return resourcesFound; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java b/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java index df134e3e..6a753f8d 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java @@ -2,11 +2,8 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.events.CloudWatchLogsEvent; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import java.util.Base64; import java.util.Base64.Decoder; @@ -17,14 +14,18 @@ import java.nio.charset.StandardCharsets; import java.util.zip.GZIPInputStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + // Handler value: example.HandlerCWLogs public class HandlerCWLogs implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + private static final Logger logger = LoggerFactory.getLogger(HandlerCWLogs.class); + @Override public String handleRequest(CloudWatchLogsEvent event, Context context) { - LambdaLogger logger = context.getLogger(); - String response = new String("200 OK"); + logger.info("EVENT TYPE: " + event.getClass().toString()); Decoder decoder = Base64.getDecoder(); byte[] decodedEvent = decoder.decode(event.getAwsLogs().getData()); StringBuilder output = new StringBuilder(); @@ -33,15 +34,12 @@ public String handleRequest(CloudWatchLogsEvent event, Context context) InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); bufferedReader.lines().forEach( line -> { - logger.log(line); output.append(line); }); - logger.log(output.toString()); + // logger.info(output.toString()); } catch(IOException e) { - logger.log("ERROR: " + e.toString()); + logger.error("ERROR: " + e.toString()); } - // log execution details - Util.logEnvironment(event, context, gson); - return response; + return output.toString(); } } diff --git a/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java b/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java index a239f989..277765b5 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java @@ -3,19 +3,29 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.CloudFrontEvent; +import com.amazonaws.services.lambda.runtime.events.CloudFrontEvent.CF; +import com.amazonaws.services.lambda.runtime.events.CloudFrontEvent.Record; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerCloudFront -public class HandlerCloudFront implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); +public class HandlerCloudFront implements RequestHandler>{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerCloudFront.class); + @Override - public String handleRequest(CloudFrontEvent event, Context context) + public List handleRequest(CloudFrontEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + var urisFound = new ArrayList(); + for (Record record : event.getRecords()) { + CF cfBody = record.getCf(); + urisFound.add(cfBody.getRequest().getUri()); + } + return urisFound; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java b/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java index 6da28fcc..e4dee175 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java @@ -3,19 +3,32 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.CodeCommitEvent; +import com.amazonaws.services.lambda.runtime.events.CodeCommitEvent.CodeCommit; +import com.amazonaws.services.lambda.runtime.events.CodeCommitEvent.Record; +import com.amazonaws.services.lambda.runtime.events.CodeCommitEvent.Reference; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerCodeCommit -public class HandlerCodeCommit implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); +public class HandlerCodeCommit implements RequestHandler>{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerCodeCommit.class); + @Override - public String handleRequest(CodeCommitEvent event, Context context) + public List handleRequest(CodeCommitEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + var commitsFound = new ArrayList(); + for (Record record : event.getRecords()) { + CodeCommit commit = record.getCodeCommit(); + for (Reference reference : commit.getReferences()) { + commitsFound.add(reference.getCommit()); + } + } + return commitsFound; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerCognito.java b/sample-apps/java-events/src/main/java/example/HandlerCognito.java index 402ef416..99e1e50f 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCognito.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCognito.java @@ -3,19 +3,27 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.CognitoEvent; +import com.amazonaws.services.lambda.runtime.events.CognitoEvent.DatasetRecord; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerCognito -public class HandlerCognito implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); +public class HandlerCognito implements RequestHandler>{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerCognito.class); + @Override - public String handleRequest(CognitoEvent event, Context context) + public List handleRequest(CognitoEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + var operationsFound = new ArrayList(); + for (DatasetRecord record : event.getDatasetRecords().values()) { + operationsFound.add(record.getOp()); + } + return operationsFound; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerConfig.java b/sample-apps/java-events/src/main/java/example/HandlerConfig.java index 709ced7b..b27e01be 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerConfig.java +++ b/sample-apps/java-events/src/main/java/example/HandlerConfig.java @@ -4,18 +4,18 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.ConfigEvent; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerConfig public class HandlerConfig implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + private static final Logger logger = LoggerFactory.getLogger(HandlerConfig.class); + @Override public String handleRequest(ConfigEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + return event.getConfigRuleArn(); } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java b/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java index da0c0281..07fd5018 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java +++ b/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java @@ -5,28 +5,25 @@ import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent.DynamodbStreamRecord; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; // Handler value: example.HandlerDynamoDB -public class HandlerDynamoDB implements RequestHandler{ +public class HandlerDynamoDB implements RequestHandler>{ + private static final Logger logger = LoggerFactory.getLogger(HandlerDynamoDB.class); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); + @Override - public String handleRequest(DynamodbEvent event, Context context) + public List handleRequest(DynamodbEvent event, Context context) { - String response = new String("200 OK"); - for (DynamodbStreamRecord record : event.getRecords()){ - logger.info(record.getEventID()); - logger.info(record.getEventName()); - logger.info(record.getDynamodb().toString()); + logger.info("EVENT TYPE: " + event.getClass().toString()); + var operationsFound = new ArrayList(); + for (DynamodbStreamRecord record : event.getRecords()) { + operationsFound.add(record.getEventName()); } - logger.info("Successfully processed " + event.getRecords().size() + " records."); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + return operationsFound; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerFirehose.java b/sample-apps/java-events/src/main/java/example/HandlerFirehose.java index 53ee9f25..9c930380 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerFirehose.java +++ b/sample-apps/java-events/src/main/java/example/HandlerFirehose.java @@ -3,19 +3,27 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent; +import com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent.Record; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerFirehose -public class HandlerFirehose implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); +public class HandlerFirehose implements RequestHandler>{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerFirehose.class); + @Override - public String handleRequest(KinesisFirehoseEvent event, Context context) + public List handleRequest(KinesisFirehoseEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + var recordIds = new ArrayList(); + for (Record record : event.getRecords()) { + recordIds.add(record.getRecordId()); + } + return recordIds; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerKinesis.java b/sample-apps/java-events/src/main/java/example/HandlerKinesis.java index e46720df..c23ee76d 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerKinesis.java +++ b/sample-apps/java-events/src/main/java/example/HandlerKinesis.java @@ -8,22 +8,26 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; // Handler value: example.HandleKinesis -public class HandlerKinesis implements RequestHandler{ +public class HandlerKinesis implements RequestHandler>{ + private static final Logger logger = LoggerFactory.getLogger(HandlerKinesis.class); Gson gson = new GsonBuilder().setPrettyPrinting().create(); + @Override - public String handleRequest(KinesisEvent event, Context context) + public List handleRequest(KinesisEvent event, Context context) { - String response = new String("200 OK"); + logger.info("EVENT TYPE: " + event.getClass().toString()); + var dataRecords = new ArrayList(); for(KinesisEventRecord record : event.getRecords()) { - logger.info(gson.toJson(record.getKinesis().getData())); + dataRecords.add(gson.toJson(record.getKinesis().getData())); } - // log execution details - Util.logEnvironment(event, context, gson); - return response; + return dataRecords; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerLex.java b/sample-apps/java-events/src/main/java/example/HandlerLex.java index b0d9294d..b1790d22 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerLex.java +++ b/sample-apps/java-events/src/main/java/example/HandlerLex.java @@ -4,18 +4,18 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.LexEvent; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerLex public class HandlerLex implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + private static final Logger logger = LoggerFactory.getLogger(HandlerLex.class); + @Override public String handleRequest(LexEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + return event.getCurrentIntent().getName(); } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerS3.java b/sample-apps/java-events/src/main/java/example/HandlerS3.java index cda08ceb..81ae0614 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerS3.java +++ b/sample-apps/java-events/src/main/java/example/HandlerS3.java @@ -3,23 +3,19 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.S3Event; - import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification.S3EventNotificationRecord; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; // Handler value: example.Handler public class HandlerS3 implements RequestHandler{ + private static final Logger logger = LoggerFactory.getLogger(HandlerS3.class); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); + @Override public String handleRequest(S3Event event, Context context) { - String response = new String("200 OK"); S3EventNotificationRecord record = event.getRecords().get(0); String srcBucket = record.getS3().getBucket().getName(); // Object key may have spaces or unicode non-ASCII characters. @@ -28,7 +24,6 @@ public String handleRequest(S3Event event, Context context) logger.info("SOURCE BUCKET: " + srcBucket); logger.info("SOURCE KEY: " + srcKey); // log execution details - Util.logEnvironment(event, context, gson); - return response; + return srcBucket + "/" + srcKey; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerSNS.java b/sample-apps/java-events/src/main/java/example/HandlerSNS.java index bcbda156..503264cb 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerSNS.java +++ b/sample-apps/java-events/src/main/java/example/HandlerSNS.java @@ -3,19 +3,29 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SNSEvent; +import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNS; +import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // Handler value: example.HandlerSNS -public class HandlerSNS implements RequestHandler{ - Gson gson = new GsonBuilder().setPrettyPrinting().create(); +public class HandlerSNS implements RequestHandler>{ + + private static final Logger logger = LoggerFactory.getLogger(HandlerSNS.class); + @Override - public String handleRequest(SNSEvent event, Context context) + public List handleRequest(SNSEvent event, Context context) { - String response = new String("200 OK"); - // log execution details - Util.logEnvironment(event, context, gson); - return response; + logger.info("EVENT TYPE: " + event.getClass().toString()); + var messagesFound = new ArrayList(); + for (SNSRecord record : event.getRecords()) { + SNS message = record.getSNS(); + messagesFound.add(message.getMessage()); + } + return messagesFound; } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerSQS.java b/sample-apps/java-events/src/main/java/example/HandlerSQS.java index 024c9ff1..0bc5d42e 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerSQS.java +++ b/sample-apps/java-events/src/main/java/example/HandlerSQS.java @@ -5,18 +5,25 @@ import com.amazonaws.services.lambda.runtime.events.SQSEvent; import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; +import java.util.ArrayList; +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; // Handler value: example.HandlerSQS -public class HandlerSQS implements RequestHandler{ +public class HandlerSQS implements RequestHandler>{ + private static final Logger logger = LoggerFactory.getLogger(HandlerSQS.class); + @Override - public Void handleRequest(SQSEvent event, Context context) + public List handleRequest(SQSEvent event, Context context) { + logger.info("EVENT TYPE: " + event.getClass().toString()); + var messagesFound = new ArrayList(); for(SQSMessage msg : event.getRecords()){ - logger.info(msg.getBody()); + messagesFound.add(msg.getBody()); } - return null; + return messagesFound; } } diff --git a/sample-apps/java-events/src/main/java/example/Util.java b/sample-apps/java-events/src/main/java/example/Util.java deleted file mode 100644 index b5e87294..00000000 --- a/sample-apps/java-events/src/main/java/example/Util.java +++ /dev/null @@ -1,20 +0,0 @@ -package example; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.LambdaLogger; - -import com.google.gson.Gson; - -public class Util { - - public static void logEnvironment(Object event, Context context, Gson gson) - { - LambdaLogger logger = context.getLogger(); - // log execution details - logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv())); - logger.log("CONTEXT: " + gson.toJson(context)); - // log event details - logger.log("EVENT: " + gson.toJson(event)); - logger.log("EVENT TYPE: " + event.getClass().toString()); - } -} \ No newline at end of file diff --git a/sample-apps/java-events/src/test/java/example/InvokeTest.java b/sample-apps/java-events/src/test/java/example/InvokeTest.java index c86f9821..881519cc 100644 --- a/sample-apps/java-events/src/test/java/example/InvokeTest.java +++ b/sample-apps/java-events/src/test/java/example/InvokeTest.java @@ -1,27 +1,205 @@ package example; import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertNotNull; import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.events.APIGatewayV2ProxyRequestEvent; -import com.amazonaws.services.lambda.runtime.events.APIGatewayV2ProxyResponseEvent; +import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; +import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; +import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent; +import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPResponse; +import com.amazonaws.services.lambda.runtime.events.CloudFrontEvent; +import com.amazonaws.services.lambda.runtime.events.CloudWatchLogsEvent; +import com.amazonaws.services.lambda.runtime.events.CodeCommitEvent; +import com.amazonaws.services.lambda.runtime.events.CognitoEvent; +import com.amazonaws.services.lambda.runtime.events.ConfigEvent; +import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; +import com.amazonaws.services.lambda.runtime.events.KinesisEvent; +import com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent; +import com.amazonaws.services.lambda.runtime.events.LexEvent; +import com.amazonaws.services.lambda.runtime.events.S3Event; +import com.amazonaws.services.lambda.runtime.events.SNSEvent; +import com.amazonaws.services.lambda.runtime.events.SQSEvent; +import com.amazonaws.services.lambda.runtime.events.ScheduledEvent; +import com.amazonaws.services.lambda.runtime.tests.annotations.Event; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.util.List; + +import org.junit.jupiter.params.ParameterizedTest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; class InvokeTest { + private static final Logger logger = LoggerFactory.getLogger(InvokeTest.class); + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + @ParameterizedTest + @Event(value = "events/apigateway-v1.json", type = APIGatewayProxyRequestEvent.class) + void testApiGatewayV1(APIGatewayProxyRequestEvent event) { + logger.info("Invoke TEST - ApiGatewayV1"); + Context context = new TestContext(); + HandlerApiGatewayV1 handler = new HandlerApiGatewayV1(); + APIGatewayProxyResponseEvent response = handler.handleRequest(event, context); + String expected = "" + "Hello world!" + "" + + "

Welcome

Page generated by a Lambda function.

" + + ""; + assertEquals(expected, response.getBody()); + } + + @ParameterizedTest + @Event(value = "events/apigateway-v2.json", type = APIGatewayV2HTTPEvent.class) + void testApiGatewayV2(APIGatewayV2HTTPEvent event) { + logger.info("Invoke TEST - ApiGatewayV1"); + Context context = new TestContext(); + HandlerApiGatewayV2 handler = new HandlerApiGatewayV2(); + APIGatewayV2HTTPResponse response = handler.handleRequest(event, context); + String expected = "" + "Hello world!" + "" + + "

Welcome

Page generated by a Lambda function.

" + + ""; + assertEquals(expected, response.getBody()); + } + + @ParameterizedTest + @Event(value = "events/cloudfront.json", type = CloudFrontEvent.class) + void testCloudFront(CloudFrontEvent event) { + logger.info("Invoke TEST - CloudFront"); + Context context = new TestContext(); + HandlerCloudFront handler = new HandlerCloudFront(); + List response = handler.handleRequest(event, context); + assertEquals(1, response.size()); + assertEquals("/picture.jpg", response.get(0)); + } + + @ParameterizedTest + @Event(value = "events/codecommit-push.json", type = CodeCommitEvent.class) + void testCodeCommit(CodeCommitEvent event) { + logger.info("Invoke TEST - CodeCommit"); + Context context = new TestContext(); + HandlerCodeCommit handler = new HandlerCodeCommit(); + List response = handler.handleRequest(event, context); + assertEquals(1, response.size()); + assertEquals("5c4ef1049f1d27deadbeeff313e0730018be182b", response.get(0)); + } + + @ParameterizedTest + @Event(value = "events/cognito-sync.json", type = CognitoEvent.class) + void testCognito(CognitoEvent event) { + logger.info("Invoke TEST - Cognito"); + Context context = new TestContext(); + HandlerCognito handler = new HandlerCognito(); + List response = handler.handleRequest(event, context); + assertEquals(2, response.size()); + assertEquals("replace", response.get(0)); + assertEquals("replace", response.get(1)); + } + + @ParameterizedTest + @Event(value = "events/config-rule.json", type = ConfigEvent.class) + void testConfig(ConfigEvent event) { + logger.info("Invoke TEST - Config"); + Context context = new TestContext(); + HandlerConfig handler = new HandlerConfig(); + String response = handler.handleRequest(event, context); + assertEquals("arn:aws:config:ca-central-1:123456789012:config-rule/config-rule-0123456", response); + } + + @ParameterizedTest + @Event(value = "events/cloudwatch-scheduled.json", type = ScheduledEvent.class) + void testCWEvents(ScheduledEvent event) { + logger.info("Invoke TEST - CWEvents"); + Context context = new TestContext(); + HandlerCWEvents handler = new HandlerCWEvents(); + List response = handler.handleRequest(event, context); + assertEquals(1, response.size()); + assertEquals("arn:aws:events:us-east-2:123456789012:rule/my-rule", response.get(0)); + } + + @ParameterizedTest + @Event(value = "events/cloudwatch-logs.json", type = CloudWatchLogsEvent.class) + void testCWLogs(CloudWatchLogsEvent event) { + logger.info("Invoke TEST - CWLogs"); + Context context = new TestContext(); + HandlerCWLogs handler = new HandlerCWLogs(); + String response = handler.handleRequest(event, context); + assertNotNull(response); + } + + @ParameterizedTest + @Event(value = "events/dynamodb-record.json", type = DynamodbEvent.class) + void testDynamoDB(DynamodbEvent event) { + logger.info("Invoke TEST - DynamoDB"); + Context context = new TestContext(); + HandlerDynamoDB handler = new HandlerDynamoDB(); + List response = handler.handleRequest(event, context); + assertEquals(2, response.size()); + assertEquals("INSERT", response.get(0)); + assertEquals("MODIFY", response.get(1)); + } + + @ParameterizedTest + @Event(value = "events/firehose-record.json", type = KinesisFirehoseEvent.class) + void testFirehose(KinesisFirehoseEvent event) { + logger.info("Invoke TEST - Firehose"); + Context context = new TestContext(); + HandlerFirehose handler = new HandlerFirehose(); + List response = handler.handleRequest(event, context); + assertEquals(1, response.size()); + assertEquals("49546986683135544286507457936321625675700192471156785154", response.get(0)); + } - @Test - void invokeTest() { - logger.info("Invoke TEST"); - APIGatewayV2ProxyRequestEvent event = new APIGatewayV2ProxyRequestEvent(); + @ParameterizedTest + @Event(value = "events/kinesis-record.json", type = KinesisEvent.class) + void testKinesis(KinesisEvent event) { + logger.info("Invoke TEST - Kinesis"); Context context = new TestContext(); - String requestId = context.getAwsRequestId(); - Handler handler = new Handler(); - APIGatewayV2ProxyResponseEvent result = handler.handleRequest(event, context); - assertEquals(200, result.getStatusCode()); + HandlerKinesis handler = new HandlerKinesis(); + List response = handler.handleRequest(event, context); + assertEquals(2, response.size()); } + @ParameterizedTest + @Event(value = "events/lex-flowers.json", type = LexEvent.class) + void testLex(LexEvent event) { + logger.info("Invoke TEST - Lex"); + Context context = new TestContext(); + HandlerLex handler = new HandlerLex(); + String response = handler.handleRequest(event, context); + assertEquals("OrderFlowers", response); + } + + @ParameterizedTest + @Event(value = "events/s3-notification.json", type = S3Event.class) + void testS3(S3Event event) { + logger.info("Invoke TEST - S3"); + Context context = new TestContext(); + HandlerS3 handler = new HandlerS3(); + String response = handler.handleRequest(event, context); + assertEquals("BUCKET_NAME/inbound/sample-java-s3.png", response); + } + + @ParameterizedTest + @Event(value = "events/sns-notification.json", type = SNSEvent.class) + void testSNS(SNSEvent event) { + logger.info("Invoke TEST - SNS"); + Context context = new TestContext(); + HandlerSNS handler = new HandlerSNS(); + List response = handler.handleRequest(event, context); + assertEquals(1, response.size()); + assertEquals("Updated and expanded documentation for using Lambda with API Gateway, including support for HTTP APIs.", response.get(0)); + } + + @ParameterizedTest + @Event(value = "events/sqs-record.json", type = SQSEvent.class) + void testSQS(SQSEvent event) { + logger.info("Invoke TEST - SQS"); + Context context = new TestContext(); + HandlerSQS handler = new HandlerSQS(); + List response = handler.handleRequest(event, context); + assertEquals(1, response.size()); + assertEquals("Hello from SQS!", response.get(0)); + } } From c8f10d2f7ec2b3cee3395f2ddf05421d35dde456 Mon Sep 17 00:00:00 2001 From: Alexander Yu Date: Thu, 23 Feb 2023 15:38:36 -0800 Subject: [PATCH 4/8] Cleanup dependencies for blank-java --- sample-apps/blank-java/build.gradle | 6 ----- sample-apps/blank-java/pom.xml | 41 ++++++++--------------------- 2 files changed, 11 insertions(+), 36 deletions(-) diff --git a/sample-apps/blank-java/build.gradle b/sample-apps/blank-java/build.gradle index 8058374b..9122538b 100644 --- a/sample-apps/blank-java/build.gradle +++ b/sample-apps/blank-java/build.gradle @@ -11,15 +11,9 @@ dependencies { implementation platform('com.amazonaws:aws-xray-recorder-sdk-bom:2.4.0') implementation 'software.amazon.awssdk:lambda' implementation 'com.amazonaws:aws-xray-recorder-sdk-core' - implementation 'com.amazonaws:aws-xray-recorder-sdk-aws-sdk-core' - implementation 'com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2' - implementation 'com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2-instrumentor' implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' implementation 'com.amazonaws:aws-lambda-java-events:2.2.9' - implementation 'org.apache.logging.log4j:log4j-api:[2.17.1,)' - implementation 'org.apache.logging.log4j:log4j-core:[2.17.1,)' runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)' - runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.0' testImplementation 'com.amazonaws:aws-lambda-java-tests:1.1.1' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' diff --git a/sample-apps/blank-java/pom.xml b/sample-apps/blank-java/pom.xml index bd642a4f..84017916 100644 --- a/sample-apps/blank-java/pom.xml +++ b/sample-apps/blank-java/pom.xml @@ -22,21 +22,6 @@ aws-lambda-java-events 2.2.9
- - com.amazonaws - aws-lambda-java-log4j2 - 1.5.0 - - - org.apache.logging.log4j - log4j-api - [2.17.1,) - - - org.apache.logging.log4j - log4j-core - [2.17.1,) - org.apache.logging.log4j log4j-slf4j18-impl @@ -52,21 +37,6 @@ aws-xray-recorder-sdk-core 2.4.0 - - com.amazonaws - aws-xray-recorder-sdk-aws-sdk-core - 2.4.0 - - - com.amazonaws - aws-xray-recorder-sdk-aws-sdk-v2 - 2.4.0 - - - com.amazonaws - aws-xray-recorder-sdk-aws-sdk-v2-instrumentor - 2.4.0 - org.junit.jupiter junit-jupiter-api @@ -99,6 +69,17 @@ 3.2.2 false + + + *:* + + module-info.class + META-INF/* + META-INF/versions/** + META-INF/services/** + + + From 6161f7e0a060990ccd0cb02fee93f666d4a1c92d Mon Sep 17 00:00:00 2001 From: Alexander Yu Date: Thu, 2 Mar 2023 13:06:34 -0800 Subject: [PATCH 5/8] Update logging mechanism in blank-java - Instead of SLF4J logger, use Context's logger (removes SLF4J dependency) - However, during unit testing, still requires SLF4J. Tests still show this logging option. - Verified that Maven/Gradle builds don't generate SLF4J warnings. --- sample-apps/blank-java/build.gradle | 4 ++-- sample-apps/blank-java/pom.xml | 8 ++++---- .../src/main/java/example/Handler.java | 10 ++++------ .../blank-java/src/main/resources/log4j2.xml | 16 ---------------- sample-apps/blank-java/template-mvn.yml | 10 ++++++++++ sample-apps/blank-java/template.yml | 2 +- 6 files changed, 21 insertions(+), 29 deletions(-) delete mode 100644 sample-apps/blank-java/src/main/resources/log4j2.xml diff --git a/sample-apps/blank-java/build.gradle b/sample-apps/blank-java/build.gradle index 9122538b..77ecd978 100644 --- a/sample-apps/blank-java/build.gradle +++ b/sample-apps/blank-java/build.gradle @@ -7,13 +7,13 @@ repositories { } dependencies { - implementation platform('software.amazon.awssdk:bom:2.10.73') + implementation platform('software.amazon.awssdk:bom:2.10.72') implementation platform('com.amazonaws:aws-xray-recorder-sdk-bom:2.4.0') implementation 'software.amazon.awssdk:lambda' implementation 'com.amazonaws:aws-xray-recorder-sdk-core' implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' implementation 'com.amazonaws:aws-lambda-java-events:2.2.9' - runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)' + implementation 'org.slf4j:slf4j-nop:2.0.6' testImplementation 'com.amazonaws:aws-lambda-java-tests:1.1.1' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' diff --git a/sample-apps/blank-java/pom.xml b/sample-apps/blank-java/pom.xml index 84017916..dfdd6e67 100644 --- a/sample-apps/blank-java/pom.xml +++ b/sample-apps/blank-java/pom.xml @@ -23,10 +23,10 @@ 2.2.9 - org.apache.logging.log4j - log4j-slf4j18-impl - [2.17.1,) - + org.slf4j + slf4j-nop + 2.0.6 + software.amazon.awssdk lambda diff --git a/sample-apps/blank-java/src/main/java/example/Handler.java b/sample-apps/blank-java/src/main/java/example/Handler.java index e7afe6d1..ef0067f8 100644 --- a/sample-apps/blank-java/src/main/java/example/Handler.java +++ b/sample-apps/blank-java/src/main/java/example/Handler.java @@ -1,13 +1,11 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import software.amazon.awssdk.services.lambda.LambdaClient; import software.amazon.awssdk.services.lambda.model.GetAccountSettingsResponse; import software.amazon.awssdk.services.lambda.model.LambdaException; @@ -15,14 +13,14 @@ // Handler value: example.Handler public class Handler implements RequestHandler, String> { - private static final Logger logger = LoggerFactory.getLogger(Handler.class); private static final LambdaClient lambdaClient = LambdaClient.builder().build(); @Override public String handleRequest(Map event, Context context) { - logger.info("ENVIRONMENT VARIABLES: " + System.getenv()); - logger.info("EVENT: " + event); + LambdaLogger logger = context.getLogger(); + logger.log("ENVIRONMENT VARIABLES: " + System.getenv()); + logger.log("EVENT: " + event); GetAccountSettingsResponse response = null; try { diff --git a/sample-apps/blank-java/src/main/resources/log4j2.xml b/sample-apps/blank-java/src/main/resources/log4j2.xml deleted file mode 100644 index b9a6c317..00000000 --- a/sample-apps/blank-java/src/main/resources/log4j2.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1} - %m%n - - - - - - - - - - - \ No newline at end of file diff --git a/sample-apps/blank-java/template-mvn.yml b/sample-apps/blank-java/template-mvn.yml index 105751cd..3e058e55 100644 --- a/sample-apps/blank-java/template-mvn.yml +++ b/sample-apps/blank-java/template-mvn.yml @@ -18,3 +18,13 @@ Resources: - AWSXrayWriteOnlyAccess - AWSLambdaVPCAccessExecutionRole Tracing: Active + Layers: + - !Ref libs + libs: + Type: AWS::Serverless::LayerVersion + Properties: + LayerName: blank-java-lib + Description: Dependencies for the blank-java sample app. + ContentUri: build/blank-java-lib.zip + CompatibleRuntimes: + - java11 \ No newline at end of file diff --git a/sample-apps/blank-java/template.yml b/sample-apps/blank-java/template.yml index 5a5d9f93..6e43d190 100644 --- a/sample-apps/blank-java/template.yml +++ b/sample-apps/blank-java/template.yml @@ -27,4 +27,4 @@ Resources: Description: Dependencies for the blank-java sample app. ContentUri: build/blank-java-lib.zip CompatibleRuntimes: - - java8 \ No newline at end of file + - java11 \ No newline at end of file From 234f0e44c9f4de52593bd6febeaa7a1b50e94001 Mon Sep 17 00:00:00 2001 From: Alexander Yu Date: Thu, 2 Mar 2023 14:07:12 -0800 Subject: [PATCH 6/8] Update logging in java-basic examples - Use Context logger for all handlers, removing SLF4J dependency - Unit testing still requires SLF4J dependency to show this logging option - Tested all handlers manually, minor updates to README --- sample-apps/blank-java/pom.xml | 4 +-- sample-apps/java-basic/README.md | 2 +- sample-apps/java-basic/build.gradle | 6 ++-- sample-apps/java-basic/pom.xml | 33 +++++++------------ .../src/main/java/example/Handler.java | 13 +++----- .../src/main/java/example/HandlerDivide.java | 9 ++--- .../src/main/java/example/HandlerInteger.java | 11 +++---- .../src/main/java/example/HandlerList.java | 11 +++---- .../src/main/java/example/HandlerStream.java | 9 ++--- .../src/main/java/example/HandlerString.java | 11 +++---- .../main/java/example/HandlerWeatherData.java | 11 +++---- 11 files changed, 45 insertions(+), 75 deletions(-) diff --git a/sample-apps/blank-java/pom.xml b/sample-apps/blank-java/pom.xml index dfdd6e67..fee37587 100644 --- a/sample-apps/blank-java/pom.xml +++ b/sample-apps/blank-java/pom.xml @@ -26,7 +26,7 @@ org.slf4j slf4j-nop 2.0.6 - + software.amazon.awssdk lambda @@ -79,7 +79,7 @@ META-INF/services/** - + diff --git a/sample-apps/java-basic/README.md b/sample-apps/java-basic/README.md index 2eac0425..7013c37d 100644 --- a/sample-apps/java-basic/README.md +++ b/sample-apps/java-basic/README.md @@ -95,7 +95,7 @@ To use a different handler, change the value of the Handler setting in the appli CodeUri: build/distributions/java-basic.zip Handler: example.HandlerList -Deploy the change, and then use the invoke script to test the new configuration. For handlers, that don't take a JSON object as input, pass the type (`string`, `int` or `list`) as an argument to the invoke script. +Deploy the change, and then use the invoke script to test the new configuration. For handlers, that don't take a JSON object as input, pass the type (`string`, `int`, `list`, or `divide`) as an argument to the invoke script. ./3-invoke.sh list { diff --git a/sample-apps/java-basic/build.gradle b/sample-apps/java-basic/build.gradle index 95a82dea..d0cbba47 100644 --- a/sample-apps/java-basic/build.gradle +++ b/sample-apps/java-basic/build.gradle @@ -8,9 +8,9 @@ repositories { dependencies { implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' - runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0' + implementation 'org.slf4j:slf4j-nop:2.0.6' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' } test { diff --git a/sample-apps/java-basic/pom.xml b/sample-apps/java-basic/pom.xml index 2489b1ec..a762955f 100644 --- a/sample-apps/java-basic/pom.xml +++ b/sample-apps/java-basic/pom.xml @@ -18,32 +18,20 @@ 1.2.1 - org.apache.logging.log4j - log4j-api - [2.17.1,) - test - - - org.apache.logging.log4j - log4j-core - [2.17.1,) - test - - - org.apache.logging.log4j - log4j-slf4j18-impl - [2.17.1,) + org.slf4j + slf4j-nop + 2.0.6 org.junit.jupiter junit-jupiter-api - 5.6.0 + 5.8.2 test org.junit.jupiter junit-jupiter-engine - 5.6.0 + 5.8.2 test
@@ -62,10 +50,13 @@ false - com.example:* - - META-INF/MANIFEST.MF - + *:* + + module-info.class + META-INF/* + META-INF/versions/** + META-INF/services/** + diff --git a/sample-apps/java-basic/src/main/java/example/Handler.java b/sample-apps/java-basic/src/main/java/example/Handler.java index d2526c3d..7c71b6f5 100644 --- a/sample-apps/java-basic/src/main/java/example/Handler.java +++ b/sample-apps/java-basic/src/main/java/example/Handler.java @@ -1,24 +1,21 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.Map; // Handler value: example.Handler public class Handler implements RequestHandler, Void>{ - private static final Logger logger = LoggerFactory.getLogger(Handler.class); - @Override public Void handleRequest(Map event, Context context) { - logger.info("ENVIRONMENT VARIABLES: " + System.getenv()); - logger.info("EVENT: " + event); - logger.info("EVENT TYPE: " + event.getClass()); + LambdaLogger logger = context.getLogger(); + logger.log("ENVIRONMENT VARIABLES: " + System.getenv()); + logger.log("EVENT: " + event); + logger.log("EVENT TYPE: " + event.getClass()); return null; } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerDivide.java b/sample-apps/java-basic/src/main/java/example/HandlerDivide.java index c78b577e..1498b612 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerDivide.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerDivide.java @@ -1,30 +1,27 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerDivide public class HandlerDivide implements RequestHandler, Integer>{ - - private static final Logger logger = LoggerFactory.getLogger(HandlerDivide.class); /* * Takes a list of two integers and divides them. */ @Override public Integer handleRequest(List event, Context context) { + LambdaLogger logger = context.getLogger(); if ( event.size() != 2 ) { throw new InputLengthException("Input must be an array that contains 2 numbers."); } int numerator = event.get(0); int denominator = event.get(1); - logger.info("EVENT: Numerator is " + event.get(0).toString() + + logger.log("EVENT: Numerator is " + event.get(0).toString() + "; Denominator is " + event.get(1).toString()); return numerator/denominator; } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java index 00d737a1..67171fbd 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java @@ -1,24 +1,21 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerInteger public class HandlerInteger implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(HandlerInteger.class); - @Override /* * Takes an Integer as input, adds 1, and returns it. */ public Integer handleRequest(Integer event, Context context) { - logger.info("EVENT: " + event); - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT: " + event); + logger.log("EVENT TYPE: " + event.getClass().toString()); return event + 1; } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerList.java b/sample-apps/java-basic/src/main/java/example/HandlerList.java index 84034674..f963d4cd 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerList.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerList.java @@ -1,26 +1,23 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.List; // Handler value: example.HandlerList public class HandlerList implements RequestHandler, Integer>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerList.class); - @Override /* * Takes a list of Integers and returns its sum. */ public Integer handleRequest(List event, Context context) { - logger.info("EVENT: " + event); - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT: " + event); + logger.log("EVENT TYPE: " + event.getClass().toString()); return event.stream().mapToInt(Integer::intValue).sum(); } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerStream.java b/sample-apps/java-basic/src/main/java/example/HandlerStream.java index 1d3066d0..e8006c8b 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerStream.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerStream.java @@ -1,20 +1,16 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerStream public class HandlerStream implements RequestStreamHandler { - private static final Logger logger = LoggerFactory.getLogger(HandlerStream.class); - @Override /* * Takes an InputStream and an OutputStream. Reads from the InputStream, @@ -22,6 +18,7 @@ public class HandlerStream implements RequestStreamHandler { */ public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { + LambdaLogger logger = context.getLogger(); int nextChar; try { while ((nextChar = inputStream.read()) != -1) { @@ -32,7 +29,7 @@ public void handleRequest(InputStream inputStream, OutputStream outputStream, Co } finally { inputStream.close(); String finalString = outputStream.toString(); - logger.info("Final string result: " + finalString); + logger.log("Final string result: " + finalString); outputStream.close(); } } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerString.java b/sample-apps/java-basic/src/main/java/example/HandlerString.java index 5598143c..e29922b4 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerString.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerString.java @@ -1,24 +1,21 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerString public class HandlerString implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(HandlerString.class); - @Override /* * Takes a String as input, and converts all characters to lowercase. */ public String handleRequest(String event, Context context) { - logger.info("EVENT: " + event); - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT: " + event); + logger.log("EVENT TYPE: " + event.getClass().toString()); return event.toLowerCase(); } } \ No newline at end of file diff --git a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java index 6a839d03..2a6777ec 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java @@ -1,16 +1,12 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerWeatherData public class HandlerWeatherData implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(WeatherData.class); - @Override /* * Takes in a WeatherData event object and updates its attributes with dummy values. @@ -18,8 +14,9 @@ public class HandlerWeatherData implements RequestHandler Date: Thu, 2 Mar 2023 15:07:16 -0800 Subject: [PATCH 7/8] Update logging for java-events examples - Use Context logger in all handlers, removing SLF4J dependency - Unit testing still requires SLF4J logging - Included missing CloudFront option in 3-invoke.sh script - Manually deployed and tested all handlers; all work as normal --- sample-apps/java-events/3-invoke.sh | 3 +++ sample-apps/java-events/build.gradle | 8 ++++---- sample-apps/java-events/pom.xml | 6 +++--- .../main/java/example/HandlerApiGatewayV1.java | 9 +++------ .../main/java/example/HandlerApiGatewayV2.java | 9 +++------ .../src/main/java/example/HandlerCWEvents.java | 9 +++------ .../src/main/java/example/HandlerCWLogs.java | 11 ++++------- .../src/main/java/example/HandlerCloudFront.java | 9 +++------ .../src/main/java/example/HandlerCodeCommit.java | 9 +++------ .../src/main/java/example/HandlerCognito.java | 9 +++------ .../src/main/java/example/HandlerConfig.java | 9 +++------ .../src/main/java/example/HandlerDynamoDB.java | 9 +++------ .../src/main/java/example/HandlerFirehose.java | 9 +++------ .../src/main/java/example/HandlerKinesis.java | 8 +++----- .../src/main/java/example/HandlerLex.java | 9 +++------ .../src/main/java/example/HandlerS3.java | 13 +++++-------- .../src/main/java/example/HandlerSNS.java | 9 +++------ .../src/main/java/example/HandlerSQS.java | 9 +++------ .../java-events/src/main/resources/log4j2.xml | 16 ---------------- sample-apps/java-events/template-mvn.yml | 6 +++--- sample-apps/java-events/template.yml | 4 ++-- 21 files changed, 63 insertions(+), 120 deletions(-) delete mode 100644 sample-apps/java-events/src/main/resources/log4j2.xml diff --git a/sample-apps/java-events/3-invoke.sh b/sample-apps/java-events/3-invoke.sh index 5df2a8ef..c4bf8c43 100755 --- a/sample-apps/java-events/3-invoke.sh +++ b/sample-apps/java-events/3-invoke.sh @@ -16,6 +16,9 @@ then sns) PAYLOAD='file://events/sns-notification.json' ;; + cdn) + PAYLOAD='file://events/cloudfront.json' + ;; cfg) PAYLOAD='file://events/config-rule.json' ;; diff --git a/sample-apps/java-events/build.gradle b/sample-apps/java-events/build.gradle index 92e2f191..acec6a6d 100644 --- a/sample-apps/java-events/build.gradle +++ b/sample-apps/java-events/build.gradle @@ -9,11 +9,11 @@ repositories { dependencies { implementation 'com.amazonaws:aws-lambda-java-core:1.2.1' implementation 'com.amazonaws:aws-lambda-java-events:3.11.0' - implementation 'com.google.code.gson:gson:2.8.6' - implementation 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)' + implementation 'com.google.code.gson:gson:2.8.9' + implementation 'org.slf4j:slf4j-nop:2.0.6' testImplementation 'com.amazonaws:aws-lambda-java-tests:1.1.1' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' } test { diff --git a/sample-apps/java-events/pom.xml b/sample-apps/java-events/pom.xml index 869fab92..025d54b5 100644 --- a/sample-apps/java-events/pom.xml +++ b/sample-apps/java-events/pom.xml @@ -28,9 +28,9 @@ 2.8.9 - org.apache.logging.log4j - log4j-slf4j18-impl - [2.17.1,) + org.slf4j + slf4j-nop + 2.0.6 org.junit.jupiter diff --git a/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV1.java b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV1.java index 03e5fdc2..c1fb1d5d 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV1.java +++ b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV1.java @@ -1,24 +1,21 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; import java.util.HashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.Handler public class HandlerApiGatewayV1 implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(HandlerApiGatewayV1.class); - @Override public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent(); response.setIsBase64Encoded(false); response.setStatusCode(200); diff --git a/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java index 67925375..b8fefa86 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java +++ b/sample-apps/java-events/src/main/java/example/HandlerApiGatewayV2.java @@ -1,24 +1,21 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPResponse; import java.util.HashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerApiGateway public class HandlerApiGatewayV2 implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(HandlerApiGatewayV2.class); - @Override public APIGatewayV2HTTPResponse handleRequest(APIGatewayV2HTTPEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); APIGatewayV2HTTPResponse response = new APIGatewayV2HTTPResponse(); response.setIsBase64Encoded(false); response.setStatusCode(200); diff --git a/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java b/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java index 8f8d8c55..c052ef24 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCWEvents.java @@ -1,24 +1,21 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.ScheduledEvent; import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerCWEvents public class HandlerCWEvents implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerCWEvents.class); - @Override public List handleRequest(ScheduledEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var resourcesFound = new ArrayList(); for (String resource : event.getResources()) { resourcesFound.add(resource); diff --git a/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java b/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java index 6a753f8d..6ce35ab5 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCWLogs.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.CloudWatchLogsEvent; @@ -14,18 +15,14 @@ import java.nio.charset.StandardCharsets; import java.util.zip.GZIPInputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerCWLogs public class HandlerCWLogs implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(HandlerCWLogs.class); - @Override public String handleRequest(CloudWatchLogsEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); Decoder decoder = Base64.getDecoder(); byte[] decodedEvent = decoder.decode(event.getAwsLogs().getData()); StringBuilder output = new StringBuilder(); @@ -38,7 +35,7 @@ public String handleRequest(CloudWatchLogsEvent event, Context context) }); // logger.info(output.toString()); } catch(IOException e) { - logger.error("ERROR: " + e.toString()); + logger.log("ERROR: " + e.toString()); } return output.toString(); } diff --git a/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java b/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java index 277765b5..b48a9fd5 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCloudFront.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.CloudFrontEvent; import com.amazonaws.services.lambda.runtime.events.CloudFrontEvent.CF; @@ -9,18 +10,14 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerCloudFront public class HandlerCloudFront implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerCloudFront.class); - @Override public List handleRequest(CloudFrontEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var urisFound = new ArrayList(); for (Record record : event.getRecords()) { CF cfBody = record.getCf(); diff --git a/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java b/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java index e4dee175..5b5a2a5a 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCodeCommit.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.CodeCommitEvent; import com.amazonaws.services.lambda.runtime.events.CodeCommitEvent.CodeCommit; @@ -10,18 +11,14 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerCodeCommit public class HandlerCodeCommit implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerCodeCommit.class); - @Override public List handleRequest(CodeCommitEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var commitsFound = new ArrayList(); for (Record record : event.getRecords()) { CodeCommit commit = record.getCodeCommit(); diff --git a/sample-apps/java-events/src/main/java/example/HandlerCognito.java b/sample-apps/java-events/src/main/java/example/HandlerCognito.java index 99e1e50f..c8443c27 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerCognito.java +++ b/sample-apps/java-events/src/main/java/example/HandlerCognito.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.CognitoEvent; import com.amazonaws.services.lambda.runtime.events.CognitoEvent.DatasetRecord; @@ -8,18 +9,14 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerCognito public class HandlerCognito implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerCognito.class); - @Override public List handleRequest(CognitoEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var operationsFound = new ArrayList(); for (DatasetRecord record : event.getDatasetRecords().values()) { operationsFound.add(record.getOp()); diff --git a/sample-apps/java-events/src/main/java/example/HandlerConfig.java b/sample-apps/java-events/src/main/java/example/HandlerConfig.java index b27e01be..9d875333 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerConfig.java +++ b/sample-apps/java-events/src/main/java/example/HandlerConfig.java @@ -1,21 +1,18 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.ConfigEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerConfig public class HandlerConfig implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(HandlerConfig.class); - @Override public String handleRequest(ConfigEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); return event.getConfigRuleArn(); } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java b/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java index 07fd5018..21b6f222 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java +++ b/sample-apps/java-events/src/main/java/example/HandlerDynamoDB.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent.DynamodbStreamRecord; @@ -8,18 +9,14 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerDynamoDB public class HandlerDynamoDB implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerDynamoDB.class); - @Override public List handleRequest(DynamodbEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var operationsFound = new ArrayList(); for (DynamodbStreamRecord record : event.getRecords()) { operationsFound.add(record.getEventName()); diff --git a/sample-apps/java-events/src/main/java/example/HandlerFirehose.java b/sample-apps/java-events/src/main/java/example/HandlerFirehose.java index 9c930380..988b4f6d 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerFirehose.java +++ b/sample-apps/java-events/src/main/java/example/HandlerFirehose.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent; import com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent.Record; @@ -8,18 +9,14 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerFirehose public class HandlerFirehose implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerFirehose.class); - @Override public List handleRequest(KinesisFirehoseEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var recordIds = new ArrayList(); for (Record record : event.getRecords()) { recordIds.add(record.getRecordId()); diff --git a/sample-apps/java-events/src/main/java/example/HandlerKinesis.java b/sample-apps/java-events/src/main/java/example/HandlerKinesis.java index c23ee76d..cefa78fe 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerKinesis.java +++ b/sample-apps/java-events/src/main/java/example/HandlerKinesis.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.KinesisEvent; import com.amazonaws.services.lambda.runtime.events.KinesisEvent.KinesisEventRecord; @@ -11,19 +12,16 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandleKinesis public class HandlerKinesis implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerKinesis.class); Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public List handleRequest(KinesisEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var dataRecords = new ArrayList(); for(KinesisEventRecord record : event.getRecords()) { dataRecords.add(gson.toJson(record.getKinesis().getData())); diff --git a/sample-apps/java-events/src/main/java/example/HandlerLex.java b/sample-apps/java-events/src/main/java/example/HandlerLex.java index b1790d22..efb5f71c 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerLex.java +++ b/sample-apps/java-events/src/main/java/example/HandlerLex.java @@ -1,21 +1,18 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.LexEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerLex public class HandlerLex implements RequestHandler{ - private static final Logger logger = LoggerFactory.getLogger(HandlerLex.class); - @Override public String handleRequest(LexEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); return event.getCurrentIntent().getName(); } } \ No newline at end of file diff --git a/sample-apps/java-events/src/main/java/example/HandlerS3.java b/sample-apps/java-events/src/main/java/example/HandlerS3.java index 81ae0614..adc96dff 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerS3.java +++ b/sample-apps/java-events/src/main/java/example/HandlerS3.java @@ -1,28 +1,25 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.S3Event; import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification.S3EventNotificationRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.Handler public class HandlerS3 implements RequestHandler{ - - private static final Logger logger = LoggerFactory.getLogger(HandlerS3.class); @Override public String handleRequest(S3Event event, Context context) { + LambdaLogger logger = context.getLogger(); S3EventNotificationRecord record = event.getRecords().get(0); String srcBucket = record.getS3().getBucket().getName(); // Object key may have spaces or unicode non-ASCII characters. String srcKey = record.getS3().getObject().getUrlDecodedKey(); - logger.info("RECORD: " + record); - logger.info("SOURCE BUCKET: " + srcBucket); - logger.info("SOURCE KEY: " + srcKey); + logger.log("RECORD: " + record); + logger.log("SOURCE BUCKET: " + srcBucket); + logger.log("SOURCE KEY: " + srcKey); // log execution details return srcBucket + "/" + srcKey; } diff --git a/sample-apps/java-events/src/main/java/example/HandlerSNS.java b/sample-apps/java-events/src/main/java/example/HandlerSNS.java index 503264cb..6b0aa666 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerSNS.java +++ b/sample-apps/java-events/src/main/java/example/HandlerSNS.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SNSEvent; import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNS; @@ -9,18 +10,14 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerSNS public class HandlerSNS implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerSNS.class); - @Override public List handleRequest(SNSEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var messagesFound = new ArrayList(); for (SNSRecord record : event.getRecords()) { SNS message = record.getSNS(); diff --git a/sample-apps/java-events/src/main/java/example/HandlerSQS.java b/sample-apps/java-events/src/main/java/example/HandlerSQS.java index 0bc5d42e..dabb49a2 100644 --- a/sample-apps/java-events/src/main/java/example/HandlerSQS.java +++ b/sample-apps/java-events/src/main/java/example/HandlerSQS.java @@ -1,6 +1,7 @@ package example; import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SQSEvent; import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; @@ -8,18 +9,14 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // Handler value: example.HandlerSQS public class HandlerSQS implements RequestHandler>{ - private static final Logger logger = LoggerFactory.getLogger(HandlerSQS.class); - @Override public List handleRequest(SQSEvent event, Context context) { - logger.info("EVENT TYPE: " + event.getClass().toString()); + LambdaLogger logger = context.getLogger(); + logger.log("EVENT TYPE: " + event.getClass().toString()); var messagesFound = new ArrayList(); for(SQSMessage msg : event.getRecords()){ messagesFound.add(msg.getBody()); diff --git a/sample-apps/java-events/src/main/resources/log4j2.xml b/sample-apps/java-events/src/main/resources/log4j2.xml deleted file mode 100644 index b9a6c317..00000000 --- a/sample-apps/java-events/src/main/resources/log4j2.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1} - %m%n - - - - - - - - - - - \ No newline at end of file diff --git a/sample-apps/java-events/template-mvn.yml b/sample-apps/java-events/template-mvn.yml index 62078b99..1e17bcbd 100644 --- a/sample-apps/java-events/template-mvn.yml +++ b/sample-apps/java-events/template-mvn.yml @@ -6,10 +6,10 @@ Resources: Type: AWS::Serverless::Function Properties: CodeUri: target/java-events-1.0-SNAPSHOT.jar - Handler: example.Handler - Runtime: java8 + Handler: example.HandlerSQS + Runtime: java11 Description: Java function - MemorySize: 512 + MemorySize: 2048 Timeout: 10 # Function's execution role Policies: diff --git a/sample-apps/java-events/template.yml b/sample-apps/java-events/template.yml index 2e818928..4b8bb3d8 100644 --- a/sample-apps/java-events/template.yml +++ b/sample-apps/java-events/template.yml @@ -7,9 +7,9 @@ Resources: Properties: CodeUri: build/distributions/java-events.zip Handler: example.HandlerSQS - Runtime: java8 + Runtime: java11 Description: Java function - MemorySize: 512 + MemorySize: 2048 Timeout: 10 # Function's execution role Policies: From 95ff514edd456aba343f3e528f6aa39fcaa85532 Mon Sep 17 00:00:00 2001 From: Alexander Yu Date: Wed, 8 Mar 2023 17:49:36 -0800 Subject: [PATCH 8/8] Remove unnecessary logging of env vars and events --- sample-apps/blank-java/src/main/java/example/Handler.java | 5 ++--- sample-apps/java-basic/src/main/java/example/Handler.java | 2 -- .../java-basic/src/main/java/example/HandlerInteger.java | 1 - .../java-basic/src/main/java/example/HandlerList.java | 1 - .../java-basic/src/main/java/example/HandlerString.java | 1 - .../java-basic/src/main/java/example/HandlerWeatherData.java | 1 - 6 files changed, 2 insertions(+), 9 deletions(-) diff --git a/sample-apps/blank-java/src/main/java/example/Handler.java b/sample-apps/blank-java/src/main/java/example/Handler.java index ef0067f8..296b5eff 100644 --- a/sample-apps/blank-java/src/main/java/example/Handler.java +++ b/sample-apps/blank-java/src/main/java/example/Handler.java @@ -19,14 +19,13 @@ public class Handler implements RequestHandler, String> { public String handleRequest(Map event, Context context) { LambdaLogger logger = context.getLogger(); - logger.log("ENVIRONMENT VARIABLES: " + System.getenv()); - logger.log("EVENT: " + event); + logger.log("Handler invoked"); GetAccountSettingsResponse response = null; try { response = lambdaClient.getAccountSettings(); } catch(LambdaException e) { - System.err.println(e.getMessage()); + logger.log(e.getMessage()); } return response != null ? "Total code size for your account is " + response.accountLimit().totalCodeSize() + " bytes" : "Error"; } diff --git a/sample-apps/java-basic/src/main/java/example/Handler.java b/sample-apps/java-basic/src/main/java/example/Handler.java index 7c71b6f5..5bb2090e 100644 --- a/sample-apps/java-basic/src/main/java/example/Handler.java +++ b/sample-apps/java-basic/src/main/java/example/Handler.java @@ -13,8 +13,6 @@ public class Handler implements RequestHandler, Void>{ public Void handleRequest(Map event, Context context) { LambdaLogger logger = context.getLogger(); - logger.log("ENVIRONMENT VARIABLES: " + System.getenv()); - logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass()); return null; } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java index 67171fbd..8cac870f 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerInteger.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerInteger.java @@ -14,7 +14,6 @@ public class HandlerInteger implements RequestHandler{ public Integer handleRequest(Integer event, Context context) { LambdaLogger logger = context.getLogger(); - logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass().toString()); return event + 1; } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerList.java b/sample-apps/java-basic/src/main/java/example/HandlerList.java index f963d4cd..d5b05884 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerList.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerList.java @@ -16,7 +16,6 @@ public class HandlerList implements RequestHandler, Integer>{ public Integer handleRequest(List event, Context context) { LambdaLogger logger = context.getLogger(); - logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass().toString()); return event.stream().mapToInt(Integer::intValue).sum(); } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerString.java b/sample-apps/java-basic/src/main/java/example/HandlerString.java index e29922b4..029bbc9c 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerString.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerString.java @@ -14,7 +14,6 @@ public class HandlerString implements RequestHandler{ public String handleRequest(String event, Context context) { LambdaLogger logger = context.getLogger(); - logger.log("EVENT: " + event); logger.log("EVENT TYPE: " + event.getClass().toString()); return event.toLowerCase(); } diff --git a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java index 2a6777ec..06f1ca7a 100644 --- a/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java +++ b/sample-apps/java-basic/src/main/java/example/HandlerWeatherData.java @@ -15,7 +15,6 @@ public class HandlerWeatherData implements RequestHandler