Java로 첫 번째 AWS Lambda 작성

지금까지 저는 모든 AWSprojects에 대해 Python으로 Lambda 함수를 작성했습니다. Python에서는 boto3 모듈을 가져오고 코딩을 시작하기만 하면 됩니다. Java에서 Lambda 핸들러를 작성할 때는 상황이 약간 다릅니다. Java에서 간단한 HelloWorld Lambda 핸들러를 작성하는 방법을 살펴보고 살펴보겠습니다. 저는 Java로 작성할 몇 가지 하우투 프로젝트를 계획했습니다. 따라서 복잡한 핸들러에 대해 알아보기 전에 HelloWorld 게시물을 작성하려고 생각했습니다. 다가오는 업데이트를 위해 저를 팔로우하십시오.

핸들러를 구현하기 위해 Maven, Eclipse 및 AWS SDK for Java를 사용할 것입니다. 다음은 버전입니다.
  • 자바: 1.8
  • Eclipse: 버전: 2020-06(4.16.0)
  • AWS SDK: 2.14.11
  • Maven: 3.6.3(Eclipse에 포함됨)

  • 시작하려면 Eclipse에서 비어 있는 새 Maven 프로젝트를 만듭니다. 파일-> 새로 만들기-> Maven 프로젝트로 이동합니다. 새 프로젝트 대화 상자에서. "간단한 프로젝트 만들기"를 선택하고 다음을 누릅니다. 다음 화면에서. 프로젝트에 대한 적절한 정보를 추가하고 완료를 누르십시오. 예를 들어:



    이제 프로젝트가 생성되었습니다. pom.xml을 열고 다음 코드를 추가합니다.

    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>net.rajanpanchal</groupId>
        <artifactId>lambda-java-demo</artifactId>
        <version>1</version>
        <name>Lambda-Java-Demo</name>
        <description>HelloWorld Lambda handler in java</description>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <aws.java.sdk.version>2.14.11</aws.java.sdk.version>
        </properties>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>bom</artifactId>
                    <version>${aws.java.sdk.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.amazonaws</groupId>
                <artifactId>aws-lambda-java-core</artifactId>
                <version>1.2.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.8.6</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>${maven.compiler.source}</source>
                        <target>${maven.compiler.target}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.2.4</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    
    

    AWS SDK 버전 및 Java 버전과 같은 일부 속성을 <properties> 태그에 설정하고 있습니다. 원하는 버전으로 AWS SDK 종속성과 Lambda 코어 종속성을 추가하고 있습니다. JSON과 Java 객체 간 또는 그 반대로 변환하기 위해 Google JSON 종속성이 추가되었습니다.
    플러그인에서 우리는 코드를 컴파일하기 위한 maven 컴파일러 플러그인과 maven-shade-plugin라는 또 다른 중요한 플러그인을 정의합니다. 이 플러그인은 fat jar a.k.a Uber jar를 생성하는 데 도움이 됩니다. 이 jar에는 람다 함수를 성공적으로 실행하는 데 필요한 모든 종속성이 포함됩니다.

    이제 핸들러를 생성해 보겠습니다.

    package net.rajanpanchal.handlers;
    
    import java.util.Map;
    
    import com.amazonaws.services.lambda.runtime.Context;
    import com.amazonaws.services.lambda.runtime.LambdaLogger;
    import com.amazonaws.services.lambda.runtime.RequestHandler;
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    
    public class HelloWorldHandler implements RequestHandler<Map<String,String>, String>{
          Gson gson = new GsonBuilder().setPrettyPrinting().create();
          @Override
          public String handleRequest(Map<String,String> event, Context context)
          {
            LambdaLogger logger = context.getLogger();
            String response = new String("200 OK");
            // log execution details
            logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
            logger.log("CONTEXT: " + gson.toJson(context));
            // process event
            logger.log("EVENT: " + gson.toJson(event));
            logger.log("EVENT TYPE: " + event.getClass().toString());
            return response;
          }
        }
    

    다음은 RequestHandlerMap를 수락하고 String 응답을 출력하는 String를 구현하는 것입니다. 처리기는 많은 작업을 수행하지 않습니다. contextevent에서 일부 항목을 기록하고 응답으로 200 OK 문자열을 보냅니다.
    프로젝트를 마우스 오른쪽 버튼으로 클릭한 후 '다음 계정으로 실행'으로 이동하여 'Maven 빌드'를 클릭합니다. 구성 창이 열립니다. '목표'에 package를 입력하고 '실행'을 누르십시오. 빌드가 성공하고 target 폴더에 fat jar가 생성됩니다.

    이제 AWS 콘솔로 이동하여 Java 8을 런타임으로 사용하여 새 Lambda 함수를 생성하고 함수 코드 섹션에서 이 jar 파일을 업로드합니다. 기본 설정에서 핸들러 텍스트 상자에 package.class::methodName을 지정해야 합니다. 이 Lambda를 테스트하려면 테스트 이벤트를 생성하고 테스트를 실행하십시오.


    출력은 다음과 유사할 수 있습니다.

    START RequestId: c40b4095-27f5-4153-ac37-fd2c103f4476 Version: $LATEST
    ENVIRONMENT VARIABLES: {
      "PATH": "/usr/local/bin:/usr/bin/:/bin:/opt/bin",
      "_AWS_XRAY_DAEMON_ADDRESS": "169.254.79.2",
      "LAMBDA_TASK_ROOT": "/var/task",
      "AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "128",
      "TZ": ":UTC",
      "AWS_SECRET_ACCESS_KEY": "<keyid>",
      "AWS_EXECUTION_ENV": "AWS_Lambda_java8",
      "AWS_DEFAULT_REGION": "us-east-1",
      "AWS_LAMBDA_LOG_GROUP_NAME": "/aws/lambda/helloworldjava",
      "_HANDLER": "net.rajanpanchal.handlers.HelloWorldHandler::handleRequest",
      "LANG": "en_US.UTF-8",
      "LAMBDA_RUNTIME_DIR": "/var/runtime",
      "AWS_SESSION_TOKEN": "<session token>",
      "LD_LIBRARY_PATH": "/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib",
      "_X_AMZN_TRACE_ID": "Root\u003d1-5f545c5d-22c8a803badd636859a0f387;Parent\u003d23df427f78bc46e4;Sampled\u003d0",
      "AWS_SECRET_KEY": "<secret key>",
      "AWS_REGION": "us-east-1",
      "AWS_LAMBDA_LOG_STREAM_NAME": "2020/09/06/[$LATEST]57c598b33b164acf8e8151660249e50e",
      "AWS_XRAY_DAEMON_ADDRESS": "169.254.79.2:2000",
      "_AWS_XRAY_DAEMON_PORT": "2000",
      "AWS_XRAY_CONTEXT_MISSING": "LOG_ERROR",
      "AWS_LAMBDA_FUNCTION_VERSION": "$LATEST",
      "AWS_ACCESS_KEY": "<access key>",
      "AWS_LAMBDA_FUNCTION_NAME": "helloworldjava"
    }CONTEXT: {
      "memoryLimit": 128,
      "awsRequestId": "c40b4095-27f5-4153-ac37-fd2c103f4476",
      "logGroupName": "/aws/lambda/helloworldjava",
      "logStreamName": "2020/09/06/[$LATEST]57c598b33b164acf8e8151660249e50e",
      "functionName": "helloworldjava",
      "functionVersion": "$LATEST",
      "invokedFunctionArn": "arn:aws:lambda:us-east-1:<AccountId>:function:helloworldjava",
      "cognitoIdentity": {
        "identityId": "",
        "poolId": ""
      },
      "logger": {}
    }EVENT: {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3"
    }EVENT TYPE: class java.util.LinkedHashMapEND RequestId: c40b4095-27f5-4153-ac37-fd2c103f4476
    REPORT RequestId: c40b4095-27f5-4153-ac37-fd2c103f4476  Duration: 516.04 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 79 MB  Init Duration: 393.54 ms
    

    여기서 우리는 Java에서 첫 번째 Lambda 핸들러를 완성합니다. 다음 포스트에서는 AWS SDK를 사용하여 API를 구현하는 방법에 대해 알아보겠습니다.

    좋은 웹페이지 즐겨찾기