AWS Lambda
개발자 가이드

핸들러를 생성하기 위해 사전 정의된 인터페이스 활용(Java)

AWS Lambda Java 코어 라이브러리(aws-lambda-java-core)에서 제공되는 사전 정의된 인터페이스 중 하나를 사용하여 임의의 이름과 파라미터를 갖는 자체 핸들러 메서드를 작성하는 대신 Lambda 함수 핸들러를 생성할 수 있습니다. 핸들러에 대한 자세한 내용은 AWS Lambda 함수 핸들러(Java)을 참조하십시오.

사전 정의된 인터페이스인 RequestStreamHandler 또는 RequestHandler 중 하나를 구현하고 인터페이스가 제공하는 handleRequest 메서드에 구현된 인터페이스를 제공할 수 있습니다. 핸들러 입력/출력에서 표준 Java 유형을 사용하고 싶은지 사용자 지정 POJO 유형을 사용하고 싶은지에 따라 이들 인터페이스 중 하나를 구현하거나(AWS Lambda는 데이터 유형을 일치시키기 위해 입력 및 출력을 자동으로 직렬화 및 역직렬화) Stream 유형을 사용하여 직렬화를 사용자 지정합니다.

참고

이들 인터페이스는 aws-lambda-java-core 라이브러리에서 사용할 수 있습니다.

표준 인터페이스를 구현하면 컴파일 시 메서드 서명을 검증하는 데 도움이 됩니다.

인터페이스 중 하나를 구현하는 경우 Lambda 함수를 생성할 때 Java 코드에서 package.class를 핸들러로 지정합니다. 예를 들어 다음은 시작하기에서 수정된 create-function CLI 명령입니다. --handler 파라미터는 다음과 같이 "example.Hello" 값을 지정합니다.

aws lambda create-function \ --region region \ --function-name getting-started-lambda-function-in-java \ --zip-file fileb://deployment-package (zip or jar) path \ --role arn:aws:iam::account-id:role/lambda_basic_execution \ --handler example.Hello \ --runtime java8 \ --timeout 15 \ --memory-size 512

다음 단원에서는 이들 인터페이스를 구현하는 방법에 대한 예제를 제공합니다.

예제 1: 사용자 지정 POJO 입력/출력을 통해 핸들러 생성(RequestHandler 인터페이스 활용)

이 단원에 예제로 제공되는 Hello 클래스는 RequestHandler 인터페이스를 구현합니다. 인터페이스는 이벤트 데이터에서 Request 유형의 입력 파라미터로 취급되는 handleRequest() 메서드를 정의하고 Response 유형의 POJO 객체를 반환합니다.

public Response handleRequest(Request request, Context context) { ... }

handleRequest() 메서드의 샘플이 구현된 Hello 클래스가 표시됩니다. 이 예제에서 이벤트 데이터는 이름과 성으로 이루어져 있다고 가정합니다.

package example; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.Context; public class Hello implements RequestHandler<Request, Response> { public Response handleRequest(Request request, Context context) { String greetingString = String.format("Hello %s %s.", request.firstName, request.lastName); return new Response(greetingString); } }

예를 들어 Request 객체의 이벤트 데이터가 다음과 같은 경우입니다.

{ "firstName":"value1", "lastName" : "value2" }

메서드는 다음과 같이 Response 객체를 반환합니다.

{ "greetings": "Hello value1 value2." }

다음으로 RequestResponse 클래스를 구현해야 합니다. 다음과 같이 구현된 클래스는 테스트하는 데 사용할 수 있습니다.

요청 클래스:

package example; public class Request { String firstName; String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Request(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public Request() { } }

응답 클래스:

package example; public class Response { String greetings; public String getGreetings() { return greetings; } public void setGreetings(String greetings) { this.greetings = greetings; } public Response(String greetings) { this.greetings = greetings; } public Response() { } }

이 코드에서 Lambda 함수를 생성하고 다음과 같이 전체 경험을 테스트할 수 있습니다.

  • 위의 코드를 사용하여 배포 패키지를 생성합니다. 자세한 내용은 AWS Lambda 배포 패키지(Java) 단원을 참조하십시오.

  • AWS Lambda로 배포 패키지를 업로드하고 Lambda 함수를 생성합니다.

  • 콘솔이나 CLI를 사용하여 Lambda 함수를 테스트합니다. 예를 들어 Request 클래스의 getter 및 setter에 부합하는 샘플 JSON 데이터를 지정할 수 있습니다.

    { "firstName":"John", "lastName" : "Doe" }

    Lambda 함수는 응답으로 다음의 JSON을 반환합니다.

    { "greetings": "Hello John, Doe." }

시작하기에서 제공되는 지침을 따릅니다(Java로 작성된 Lambda 함수 생성 참조). 다음 차이점을 참고합니다.

  • 배포 패키지를 생성할 때 aws-lambda-java-core 라이브러리 종속 프로그램을 잊어서는 안 됩니다.

  • Lambda 함수를 생성할 때 핸들러 값으로 example.Hello(package.class) 를 지정합니다.

예제 2: 스트림 POJO 입력/출력을 통해 핸들러 생성(RequestStreamHandler 인터페이스 활용)

이 예제의 Hello 클래스는 RequestStreamHandler 인터페이스를 구현합니다. 인터페이스는 다음과 같이 handleRequest 메서드를 정의합니다.

public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { ... }

handleRequest() 핸들러의 샘플이 구현된 Hello 클래스가 표시됩니다. 핸들러는 수신 이벤트 데이터(예: 문자열 "hello")를 간단하게 대문자로 변환하는 방법으로 처리하여 반환합니다.

package example; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import com.amazonaws.services.lambda.runtime.Context; public class Hello implements RequestStreamHandler { public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { int letter; while((letter = inputStream.read()) != -1) { outputStream.write(Character.toUpperCase(letter)); } } }

이 코드에서 Lambda 함수를 생성하고 다음과 같이 전체 경험을 테스트할 수 있습니다.

  • 위의 코드를 사용하여 배포 패키지를 생성합니다.

  • AWS Lambda로 배포 패키지를 업로드하고 Lambda 함수를 생성합니다.

  • 콘솔이나 CLI를 사용하여 Lambda 함수를 테스트합니다. 예를 들어 어떤 샘플 문자열 데이터도 지정할 수 있습니다.

    "test"

    Lambda 함수는 응답에서 TEST를 반환합니다.

시작하기에서 제공되는 지침을 따릅니다(Java로 작성된 Lambda 함수 생성 참조). 다음 차이점을 참고합니다.

  • 배포 패키지를 생성할 때 aws-lambda-java-core 라이브러리 종속 프로그램을 잊어서는 안 됩니다.

  • Lambda 함수를 생성할 때 핸들러 값으로 example.Hello(package.class) 를 지정합니다.