Skip to content

Commit

Permalink
35 create docker compose file to run the function locally (#49)
Browse files Browse the repository at this point in the history
* docker-compose

Signed-off-by: muhamadto <muhamadto@gmail.com>
  • Loading branch information
muhamadto committed Aug 19, 2023
1 parent d894f4c commit a0792e8
Show file tree
Hide file tree
Showing 13 changed files with 110 additions and 66 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,16 @@ $ ./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]
2022-12-07 02:56:51.733 INFO 42417 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
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
Expand Down
90 changes: 56 additions & 34 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,42 +39,33 @@
</developers>

<properties>
<revision>1.0.0-SNAPSHOT</revision>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<maven.compiler.source>20</maven.compiler.source>
<maven.compiler.target>20</maven.compiler.target>
<maven.compiler.release>20</maven.compiler.release>
<maven.compiler.parameters>true</maven.compiler.parameters>

<jackson.version>2.13.0</jackson.version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<sonar.organization>muhamadto</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<sonar.issue.ignore.multicriteria>e1,e2</sonar.issue.ignore.multicriteria>

<sonar.issue.ignore.multicriteria.e1.ruleKey>java:S107
</sonar.issue.ignore.multicriteria.e1.ruleKey>
<sonar.issue.ignore.multicriteria.e1.resourceKey>**/cdk/*.java
</sonar.issue.ignore.multicriteria.e1.resourceKey>
<sonar.issue.ignore.multicriteria>e1,e2</sonar.issue.ignore.multicriteria>
<sonar.issue.ignore.multicriteria.e1.ruleKey>java:S107</sonar.issue.ignore.multicriteria.e1.ruleKey>
<sonar.issue.ignore.multicriteria.e1.resourceKey>**/cdk/*.java</sonar.issue.ignore.multicriteria.e1.resourceKey>

<!-- This class has 6 parents which is greater than 5 authorized,
suspended as we are using CDK and the original code has 5 levels of inheritance already-->
<sonar.issue.ignore.multicriteria.e2.ruleKey>java:S110
</sonar.issue.ignore.multicriteria.e2.ruleKey>
<sonar.issue.ignore.multicriteria.e2.resourceKey>**/cdk/*.java
</sonar.issue.ignore.multicriteria.e2.resourceKey>
<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/site/jacoco/jacoco.xml,
${project.basedir}/target/site/jacoco-it/jacoco.xml
</sonar.coverage.jacoco.xmlReportPaths>
<sonar.coverage.exclusions>**/model/*.java, **/Application.java,
**/SpringNativeAwsLambdaApplication.java,**/*Hints.java,
**/*Application.java
</sonar.coverage.exclusions>
<maven.compiler.parameters>true</maven.compiler.parameters>
<assertj-core.version>3.23.1</assertj-core.version>
<maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
<sonar.organization>muhamadto</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<revision>1.0.0-SNAPSHOT</revision>
<jackson.version>2.13.0</jackson.version>
<spring-boot-dependencies.version>3.1.2</spring-boot-dependencies.version>
<sonar.issue.ignore.multicriteria.e2.ruleKey>java:S110</sonar.issue.ignore.multicriteria.e2.ruleKey>
<sonar.issue.ignore.multicriteria.e2.resourceKey>**/cdk/*.java</sonar.issue.ignore.multicriteria.e2.resourceKey>

<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/site/jacoco/jacoco.xml, ${project.basedir}/target/site/jacoco-it/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>

<sonar.coverage.exclusions>**/model/*.java, **/Application.java,**/*Hints.java</sonar.coverage.exclusions>
</properties>

<parent>
Expand All @@ -101,8 +92,34 @@
<artifactId>spring-native-aws-lambda-infra</artifactId>
<version>${project.version}</version>
</dependency>

<!-- SPRING-NATIVE-AWS-LAMBDA ENDS -->

<!-- AWS -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>3.11.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-serialization</artifactId>
<version>1.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>software.amazon.lambda</groupId>
<artifactId>powertools-logging</artifactId>
<version>1.16.1</version>
</dependency>
<!-- AWS END -->

<!-- UTILS -->
<dependency>
<groupId>org.apache.commons</groupId>
Expand All @@ -116,12 +133,6 @@
<version>4.4</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>

<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
Expand All @@ -133,6 +144,12 @@
<artifactId>guava</artifactId>
<version>32.0.0-jre</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
<!-- UTILS ENDS -->

<!-- JACKSON -->
Expand Down Expand Up @@ -181,7 +198,7 @@
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj-core.version}</version>
<version>3.23.1</version>
<scope>test</scope>
</dependency>

Expand Down Expand Up @@ -209,7 +226,12 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<version>3.1.0</version>
<configuration>
<classpathDependencyExcludes>
<classpathDependencyExclude>org.apache.logging.log4j:log4j-slf4j-impl</classpathDependencyExclude>
</classpathDependencyExcludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand Down
21 changes: 11 additions & 10 deletions spring-native-aws-lambda-function/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,7 @@
</developers>

<properties>
<lombok.version>1.18.26</lombok.version>
<aws-lambda-events.version>3.11.1</aws-lambda-events.version>
<aws-lambda-java-core.version>1.2.2</aws-lambda-java-core.version>
<aws-lambda-java-serialization.version>1.1.2</aws-lambda-java-serialization.version>
<spring-cloud.version>2022.0.1</spring-cloud.version>
<maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
<repackage.classifier/>
<native.build.args>
--enable-url-protocols=http
Expand Down Expand Up @@ -75,27 +70,34 @@
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>${aws-lambda-events.version}</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>${aws-lambda-java-core.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-serialization</artifactId>
<version>${aws-lambda-java-serialization.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>software.amazon.lambda</groupId>
<artifactId>powertools-logging</artifactId>
</dependency>

<!-- AWS LAMBDA ENDS -->

<!-- SPRING CLOUD -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-aws</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
Expand All @@ -119,7 +121,6 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- UTILITIES ENDS -->

Expand Down Expand Up @@ -175,7 +176,7 @@
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<mainClass>com.coffeebeans.springnativeawslambda.function.SpringNativeAwsLambdaApplication</mainClass>
<mainClass>com.coffeebeans.springnativeawslambda.Application</mainClass>
<buildArgs>
--no-fallback
</buildArgs>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -31,5 +31,4 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
hints.serialization().registerType(Response.class);
hints.resources().registerPattern("org/joda/time/tz/*");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,17 @@
*
*/

package com.coffeebeans.springnativeawslambda.function;
package com.coffeebeans.springnativeawslambda;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportRuntimeHints;

@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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
public class ExampleFunction implements
Function<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {

private final ObjectMapper objectMapper;

Expand All @@ -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...'");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*
*/

package com.coffeebeans.springnativeawslambda.function.model;
package com.coffeebeans.springnativeawslambda.model;

import jakarta.validation.constraints.NotBlank;
import java.io.Serializable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
log4j.layout.jsonTemplate.timestampFormatPattern=yyyy-MM-dd'T'HH:mm:ss.SSSZz
log4j.layout.jsonTemplate.timeZone=Australia/Sydney
16 changes: 16 additions & 0 deletions spring-native-aws-lambda-function/src/main/resources/log4j2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="JsonAppender" target="SYSTEM_OUT">
<JsonTemplateLayout eventTemplateUri="classpath:LambdaJsonLayout.json" />
</Console>
</Appenders>
<Loggers>
<Logger name="JsonLogger" level="INFO" additivity="false">
<AppenderRef ref="JsonAppender"/>
</Logger>
<Root level="info">
<AppenderRef ref="JsonAppender"/>
</Root>
</Loggers>
</Configuration>
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*
*/

package com.coffeebeans.springnativeawslambda.function;
package com.coffeebeans.springnativeawslambda;

import static org.assertj.core.api.Assertions.assertThat;

Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit a0792e8

Please sign in to comment.