AWS Lambda Java를 로컬로 실행할 수 있는 환경을 Spring Boot 기반으로 만들어 보았습니다.

AWS Lambda Java에서 애플리케이션을 만들 때 먼저 로컬에서 디버깅하려고 할 때 JUnit을 작성하는 것이 일반적일 것입니다. 하지만 AWS Lambda 테스트와 같은 것을 로컬에서도 간단하게 할 수 있게 하고 싶다.

넷 환경은 나쁘지만, 조금 만든 AWS Lambda Java의 확인을 하고 싶다고 하는 때에도 사용할 수 있을까 생각합니다.

결과



현재라고 handleRequest 메소드의 제1 인수는 String형과 Map형에 대응하고 있습니다. 우선 이것만 있으면 다이조브일 것이다.

사용법



거친 흐름은 다음과 같습니다.
  • AWS Lambda Java(실행 대상)에 대한 Jar 파일 생성
  • AWSLambdaRest에 적용
  • 실제로 실행

  • AWS Lambda Java(실행 대상)의 Jar 파일 생성



    샘플로서 이런 느낌의 AWS Lambda Java를 짜 봅니다.

    AWSLambdaExample.java
    public class AwsLambdaExample  implements RequestHandler<String, Object> {
    
        public String handleRequest(String input, Context context) {
            context.getLogger().log("Input: " + input);
    
            return "Input result: " + input;
        }
    }
    

    pom.xml에는 이런 식으로 jar-with-dependencies를 만들 수 있도록 설정해 둡니다.

    pom.xml
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-core</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    AWSLambdaRest에 적용



    작성한 Jar 파일을 AWSLambdaRest에 적용합니다. 예제에서는 extlib 폴더 아래에 Jar 파일을 배치하여 pom.xml 및 application.yml을 편집합니다.

    우선 pom.xml에는 다음을 기술합니다.

    pom.xml
    <dependency>
        <groupId>jp.gr.java_conf.kojiisd</groupId>
        <artifactId>aws-lambda-example</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>${basedir}/extlib/aws-lambda-example-1.0-SNAPSHOT.jar</systemPath>
    </dependency>
    

    application.yml은 실행할 handleRequest가 속한 클래스를 지정합니다.

    application.yml
    lambda-rest:
      target: jp.gr.java_conf.kojiisd.AwsLambdaExample
    

    실제로 실행



    상기까지 실시할 수 있으면, 실행해 봅니다. Jar 파일을 작성하고 다음 명령을 실행하십시오.
    $ java -cp target/aws-lambda-local-rest-0.0.1-SNAPSHOT.jar jp.gr.java_conf.kojiisd.AwsLambdaLocalRestApplication
    

    결과 확인



    시작되면 실제로 값을 보냅니다. RestClient를 사용하여 다음 JSON 코드를 전송합니다.
    "test"
    

    지나갔어요.



    덧붙여서 이번 샘플에서는, 로그에 입력값을 출력하는 처리가 쓰여지고 있습니다만, 아래와 같은 손쉽게 구현하기 위해서, 로그에 출력하는 처리는 콘솔에 출력됩니다.


                @Override
                public LambdaLogger getLogger() {
                    return new LambdaLogger() {
                        @Override
                        public void log(String s) {
                            System.out.println(s);
                        }
                    };
                }
    

    물론 이번에 이용한 Jar 파일은 그대로 AWS Lambda Java에서도 실행 가능합니다.

    요약



    이번에 로컬로 AWS Lambda Java 시뮬레이션을 할 수 있는 환경을 만들어 보았습니다. 아직 실행 대상의 메소드 특정을 동적으로 할 수 없는 등 개선점은 있습니다만, 일단 이것으로 하고 싶은 일은 할 수 있게 되었습니다. 물론 풀릭, 환영합니다.

    좋은 웹페이지 즐겨찾기