From a0792e8a55940f948a0e3527147dcf28318c0c73 Mon Sep 17 00:00:00 2001 From: Muhammad Hamadto Date: Sat, 19 Aug 2023 20:59:52 +1000 Subject: [PATCH] 35 create docker compose file to run the function locally (#49) * docker-compose Signed-off-by: muhamadto --- README.md | 6 +- pom.xml | 90 ++++++++++++------- spring-native-aws-lambda-function/pom.xml | 21 ++--- .../{function => }/AppRuntimeHints.java | 7 +- ...ambdaApplication.java => Application.java} | 6 +- .../LambdaExceptionHandler.java | 2 +- .../{functions => }/ExampleFunction.java | 13 +-- .../{function => }/model/Request.java | 2 +- .../{function => }/model/Response.java | 2 +- .../resources/log4j2.component.properties | 2 + .../src/main/resources/log4j2.xml | 16 ++++ ...aApplicationIT.java => ApplicationIT.java} | 6 +- .../{functions => }/ExampleFunctionTest.java | 3 +- 13 files changed, 110 insertions(+), 66 deletions(-) rename spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/{function => }/AppRuntimeHints.java (85%) rename spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/{function/SpringNativeAwsLambdaApplication.java => Application.java} (85%) rename spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/{function => }/LambdaExceptionHandler.java (97%) rename spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/{functions => }/ExampleFunction.java (82%) rename spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/{function => }/model/Request.java (94%) rename spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/{function => }/model/Response.java (95%) create mode 100644 spring-native-aws-lambda-function/src/main/resources/log4j2.component.properties create mode 100644 spring-native-aws-lambda-function/src/main/resources/log4j2.xml rename spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/{function/SpringNativeAwsLambdaApplicationIT.java => ApplicationIT.java} (93%) rename spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/{functions => }/ExampleFunctionTest.java (94%) diff --git a/README.md b/README.md index 5dc5bbe..ae674ed 100644 --- a/README.md +++ b/README.md @@ -43,8 +43,8 @@ $ ./mvnw -ntp clean verify -U --settings ./settings-spring.xml ``` The service starts in less than 100 ms ```shell - 2022-12-07 02:56:51.706 INFO 42417 --- [ main] c.c.s.SpringNativeAwsLambdaApplication : Starting SpringNativeAwsLambdaApplication using Java 17.0.4 - 2022-12-07 02:56:51.706 INFO 42417 --- [ main] c.c.s.SpringNativeAwsLambdaApplication : No active profile set, falling back to 1 default profile: "default" + 2022-12-07 02:56:51.706 INFO 42417 --- [ main] c.c.s.Application : Starting Application using Java 17.0.4 + 2022-12-07 02:56:51.706 INFO 42417 --- [ main] c.c.s.Application : No active profile set, falling back to 1 default profile: "default" 2022-12-07 02:56:51.723 INFO 42417 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2022-12-07 02:56:51.724 INFO 42417 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-12-07 02:56:51.724 INFO 42417 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.68] @@ -52,7 +52,7 @@ $ ./mvnw -ntp clean verify -U --settings ./settings-spring.xml 2022-12-07 02:56:51.733 INFO 42417 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 27 ms 2022-12-07 02:56:51.761 INFO 42417 --- [ main] o.s.c.f.web.mvc.FunctionHandlerMapping : FunctionCatalog: org.springframework.cloud.function.context.catalog.BeanFactoryAwareFunctionRegistry@7efd575 2022-12-07 02:56:51.763 INFO 42417 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' - 2022-12-07 02:56:51.763 INFO 42417 --- [ main] c.c.s.SpringNativeAwsLambdaApplication : Started SpringNativeAwsLambdaApplication in 0.084 seconds (JVM running for 0.087) + 2022-12-07 02:56:51.763 INFO 42417 --- [ main] c.c.s.Application : Started Application in 0.084 seconds (JVM running for 0.087) ``` 3. Make a call ```shell diff --git a/pom.xml b/pom.xml index 7ec69e9..953f77e 100644 --- a/pom.xml +++ b/pom.xml @@ -39,42 +39,33 @@ + 1.0.0-SNAPSHOT + + UTF-8 + UTF-8 + 20 20 20 + true + + 2.13.0 - UTF-8 - UTF-8 muhamadto https://sonarcloud.io - e1,e2 - java:S107 - - **/cdk/*.java - + e1,e2 + java:S107 + **/cdk/*.java - java:S110 - - **/cdk/*.java - - ${project.basedir}/target/site/jacoco/jacoco.xml, - ${project.basedir}/target/site/jacoco-it/jacoco.xml - - **/model/*.java, **/Application.java, - **/SpringNativeAwsLambdaApplication.java,**/*Hints.java, - **/*Application.java - - true - 3.23.1 - 3.0.0-M7 - muhamadto - https://sonarcloud.io - 1.0.0-SNAPSHOT - 2.13.0 - 3.1.2 + java:S110 + **/cdk/*.java + + ${project.basedir}/target/site/jacoco/jacoco.xml, ${project.basedir}/target/site/jacoco-it/jacoco.xml + + **/model/*.java, **/Application.java,**/*Hints.java @@ -101,8 +92,34 @@ spring-native-aws-lambda-infra ${project.version} + + + + com.amazonaws + aws-lambda-java-events + 3.11.1 + + + com.amazonaws + aws-lambda-java-core + 1.2.2 + provided + + + com.amazonaws + aws-lambda-java-serialization + 1.1.2 + provided + + + software.amazon.lambda + powertools-logging + 1.16.1 + + + org.apache.commons @@ -116,12 +133,6 @@ 4.4 - - org.projectlombok - lombok - 1.18.24 - - javax.validation validation-api @@ -133,6 +144,12 @@ guava 32.0.0-jre + + + org.projectlombok + lombok + 1.18.28 + @@ -181,7 +198,7 @@ org.assertj assertj-core - ${assertj-core.version} + 3.23.1 test @@ -209,7 +226,12 @@ org.apache.maven.plugins maven-surefire-plugin - ${maven-surefire-plugin.version} + 3.1.0 + + + org.apache.logging.log4j:log4j-slf4j-impl + + org.apache.maven.plugins diff --git a/spring-native-aws-lambda-function/pom.xml b/spring-native-aws-lambda-function/pom.xml index 9ab9c2c..575fcc5 100644 --- a/spring-native-aws-lambda-function/pom.xml +++ b/spring-native-aws-lambda-function/pom.xml @@ -42,12 +42,7 @@ - 1.18.26 - 3.11.1 - 1.2.2 - 1.1.2 2022.0.1 - 3.3.0 --enable-url-protocols=http @@ -75,20 +70,21 @@ com.amazonaws aws-lambda-java-events - ${aws-lambda-events.version} com.amazonaws aws-lambda-java-core - ${aws-lambda-java-core.version} provided com.amazonaws aws-lambda-java-serialization - ${aws-lambda-java-serialization.version} provided + + software.amazon.lambda + powertools-logging + @@ -96,6 +92,12 @@ org.springframework.cloud spring-cloud-function-adapter-aws + + + org.springframework.boot + spring-boot-starter-logging + + @@ -119,7 +121,6 @@ org.projectlombok lombok - ${lombok.version} @@ -175,7 +176,7 @@ org.graalvm.buildtools native-maven-plugin - com.coffeebeans.springnativeawslambda.function.SpringNativeAwsLambdaApplication + com.coffeebeans.springnativeawslambda.Application --no-fallback diff --git a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/AppRuntimeHints.java b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/AppRuntimeHints.java similarity index 85% rename from spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/AppRuntimeHints.java rename to spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/AppRuntimeHints.java index db21ad6..86fb303 100644 --- a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/AppRuntimeHints.java +++ b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/AppRuntimeHints.java @@ -16,10 +16,10 @@ * */ -package com.coffeebeans.springnativeawslambda.function; +package com.coffeebeans.springnativeawslambda; -import com.coffeebeans.springnativeawslambda.function.model.Request; -import com.coffeebeans.springnativeawslambda.function.model.Response; +import com.coffeebeans.springnativeawslambda.model.Request; +import com.coffeebeans.springnativeawslambda.model.Response; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; @@ -31,5 +31,4 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) { hints.serialization().registerType(Response.class); hints.resources().registerPattern("org/joda/time/tz/*"); } - } \ No newline at end of file diff --git a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/SpringNativeAwsLambdaApplication.java b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/Application.java similarity index 85% rename from spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/SpringNativeAwsLambdaApplication.java rename to spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/Application.java index 6783da7..453db6d 100644 --- a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/SpringNativeAwsLambdaApplication.java +++ b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/Application.java @@ -16,7 +16,7 @@ * */ -package com.coffeebeans.springnativeawslambda.function; +package com.coffeebeans.springnativeawslambda; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -24,9 +24,9 @@ @SpringBootApplication @ImportRuntimeHints(AppRuntimeHints.class) -public class SpringNativeAwsLambdaApplication { +public class Application { public static void main(String[] args) { - SpringApplication.run(SpringNativeAwsLambdaApplication.class, args); + SpringApplication.run(Application.class, args); } } diff --git a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/LambdaExceptionHandler.java b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/LambdaExceptionHandler.java similarity index 97% rename from spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/LambdaExceptionHandler.java rename to spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/LambdaExceptionHandler.java index 1e99d42..daa2526 100644 --- a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/LambdaExceptionHandler.java +++ b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/LambdaExceptionHandler.java @@ -1,4 +1,4 @@ -package com.coffeebeans.springnativeawslambda.function; +package com.coffeebeans.springnativeawslambda; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; diff --git a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/functions/ExampleFunction.java b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/ExampleFunction.java similarity index 82% rename from spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/functions/ExampleFunction.java rename to spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/ExampleFunction.java index d718f67..04c7373 100644 --- a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/functions/ExampleFunction.java +++ b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/ExampleFunction.java @@ -16,26 +16,28 @@ * */ -package com.coffeebeans.springnativeawslambda.function.functions; +package com.coffeebeans.springnativeawslambda.function; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; -import com.coffeebeans.springnativeawslambda.function.model.Request; -import com.coffeebeans.springnativeawslambda.function.model.Response; +import com.coffeebeans.springnativeawslambda.model.Request; +import com.coffeebeans.springnativeawslambda.model.Response; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.validation.constraints.NotNull; import java.util.function.Function; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; -import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; +import software.amazon.lambda.powertools.logging.CorrelationIdPathConstants; +import software.amazon.lambda.powertools.logging.Logging; @Component @Log4j2 @Validated -public class ExampleFunction implements Function { +public class ExampleFunction implements + Function { private final ObjectMapper objectMapper; @@ -51,6 +53,7 @@ public ExampleFunction(@NotNull final ObjectMapper objectMapper) { * @throws JsonProcessingException */ @Override + @Logging(correlationIdPath = CorrelationIdPathConstants.API_GATEWAY_REST) @SneakyThrows(value = JsonProcessingException.class) public APIGatewayProxyResponseEvent apply(final APIGatewayProxyRequestEvent proxyRequestEvent) { log.info("Converting request into a response...'"); diff --git a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/model/Request.java b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/model/Request.java similarity index 94% rename from spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/model/Request.java rename to spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/model/Request.java index 4883e64..cb78f60 100644 --- a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/model/Request.java +++ b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/model/Request.java @@ -16,7 +16,7 @@ * */ -package com.coffeebeans.springnativeawslambda.function.model; +package com.coffeebeans.springnativeawslambda.model; import jakarta.validation.constraints.NotBlank; import java.io.Serializable; diff --git a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/model/Response.java b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/model/Response.java similarity index 95% rename from spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/model/Response.java rename to spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/model/Response.java index b57aefd..0aebb20 100644 --- a/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/function/model/Response.java +++ b/spring-native-aws-lambda-function/src/main/java/com/coffeebeans/springnativeawslambda/model/Response.java @@ -16,7 +16,7 @@ * */ -package com.coffeebeans.springnativeawslambda.function.model; +package com.coffeebeans.springnativeawslambda.model; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty.Access; diff --git a/spring-native-aws-lambda-function/src/main/resources/log4j2.component.properties b/spring-native-aws-lambda-function/src/main/resources/log4j2.component.properties new file mode 100644 index 0000000..e74c780 --- /dev/null +++ b/spring-native-aws-lambda-function/src/main/resources/log4j2.component.properties @@ -0,0 +1,2 @@ +log4j.layout.jsonTemplate.timestampFormatPattern=yyyy-MM-dd'T'HH:mm:ss.SSSZz +log4j.layout.jsonTemplate.timeZone=Australia/Sydney \ No newline at end of file diff --git a/spring-native-aws-lambda-function/src/main/resources/log4j2.xml b/spring-native-aws-lambda-function/src/main/resources/log4j2.xml new file mode 100644 index 0000000..2aeca7d --- /dev/null +++ b/spring-native-aws-lambda-function/src/main/resources/log4j2.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/SpringNativeAwsLambdaApplicationIT.java b/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/ApplicationIT.java similarity index 93% rename from spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/SpringNativeAwsLambdaApplicationIT.java rename to spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/ApplicationIT.java index 7233dec..3232430 100644 --- a/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/SpringNativeAwsLambdaApplicationIT.java +++ b/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/ApplicationIT.java @@ -16,7 +16,7 @@ * */ -package com.coffeebeans.springnativeawslambda.function; +package com.coffeebeans.springnativeawslambda; import static org.assertj.core.api.Assertions.assertThat; @@ -33,10 +33,10 @@ import org.springframework.test.context.TestPropertySource; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = {"spring.main.web-application-type=servlet"}) -@ContextConfiguration(classes = {AWSCustomRuntime.class, SpringNativeAwsLambdaApplication.class}) +@ContextConfiguration(classes = {AWSCustomRuntime.class, Application.class}) @TestPropertySource(properties = {"_HANDLER=exampleFunction" }) -class SpringNativeAwsLambdaApplicationIT { +class ApplicationIT { @Autowired private AWSCustomRuntime aws; diff --git a/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/functions/ExampleFunctionTest.java b/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/ExampleFunctionTest.java similarity index 94% rename from spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/functions/ExampleFunctionTest.java rename to spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/ExampleFunctionTest.java index 21eb3ef..801f406 100644 --- a/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/functions/ExampleFunctionTest.java +++ b/spring-native-aws-lambda-function/src/test/java/com/coffeebeans/springnativeawslambda/function/ExampleFunctionTest.java @@ -16,13 +16,14 @@ * */ -package com.coffeebeans.springnativeawslambda.function.functions; +package com.coffeebeans.springnativeawslambda.function; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; +import com.coffeebeans.springnativeawslambda.function.ExampleFunction; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach;