Lambda 컨텍스트 객체로 Java 함수 정보 검색

Lambda 컨텍스트 객체로 Java 함수 정보 검색

Lambda가 함수를 실행할 때 핸들러에 컨텍스트 객체를 전달해요. 이 객체는 호출, 함수, 실행 환경에 대한 정보를 제공하는 메서드와 속성을 담고 있죠.

출처: AWS Lambda 개발자 안내서

본문

컨텍스트 메서드

  • getRemainingTimeInMillis() – 실행이 타임아웃되기 전까지 남은 시간(밀리초)을 반환해요.
  • getFunctionName() – Lambda 함수의 이름을 반환해요.
  • getFunctionVersion() – 함수의 버전을 반환해요.
  • getInvokedFunctionArn() – 함수를 호출하는 데 사용된 Amazon Resource Name(ARN)을 반환해요. 호출자가 버전 번호나 별칭(alias)을 지정했는지도 나타내죠.
  • getMemoryLimitInMB() – 함수에 할당된 메모리 양을 반환해요.
  • getAwsRequestId() – 호출 요청의 식별자를 반환해요.
  • getLogGroupName() – 함수의 로그 그룹을 반환해요.
  • getLogStreamName() – 함수 인스턴스의 로그 스트림을 반환해요.
  • getIdentity() – (모바일 앱) 요청을 승인한 Amazon Cognito 자격 증명에 대한 정보를 반환해요.
  • getClientContext() – (모바일 앱) 클라이언트 애플리케이션이 Lambda에 제공한 클라이언트 컨텍스트를 반환해요.
  • getLogger() – 함수의 로거 객체를 반환해요.

다음 예제는 컨텍스트 객체를 사용해 Lambda 로거에 접근하는 함수를 보여줘요.

예제 Handler.java

package example;

import [com.amazonaws.services.lambda.runtime.Context](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/Context.java);
import [com.amazonaws.services.lambda.runtime.LambdaLogger](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/LambdaLogger.java);
import [com.amazonaws.services.lambda.runtime.RequestHandler](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/RequestHandler.java);

import java.util.Map;

// Handler value: example.Handler
public class Handler implements RequestHandler<Map<String,String>, Void>{

  @Override
  public Void handleRequest(Map<String,String> event, Context context)
  {
    LambdaLogger logger = context.getLogger();
    logger.log("EVENT TYPE: " + event.getClass());
    return null;
  }
}

이 함수는 null을 반환하기 전에 들어온 이벤트의 클래스 타입을 기록해요.

예제 로그 출력

EVENT TYPE: class java.util.LinkedHashMap

컨텍스트 객체의 인터페이스는 aws-lambda-java-core 라이브러리에서 사용할 수 있어요. 이 인터페이스를 구현해 테스트용 컨텍스트 클래스를 만들 수 있죠. 다음 예제는 대부분의 속성에 더미 값을 반환하고 작동하는 테스트 로거를 제공하는 컨텍스트 클래스를 보여줘요.

예제 src/test/java/example/TestContext.java

package example;

import [com.amazonaws.services.lambda.runtime.Context](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/Context.java);
import [com.amazonaws.services.lambda.runtime.CognitoIdentity](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/CognitoIdentity.java);
import [com.amazonaws.services.lambda.runtime.ClientContext](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/ClientContext.java);
import [com.amazonaws.services.lambda.runtime.LambdaLogger](https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-core/src/main/java/com/amazonaws/services/lambda/runtime/LambdaLogger.java);

public class TestContext implements Context{

  public TestContext() {}
  public String getAwsRequestId(){
    return new String("495b12a8-xmpl-4eca-8168-160484189f99");
  }
  public String getLogGroupName(){
    return new String("/aws/lambda/my-function");
  }
  public String getLogStreamName(){
    return new String("2020/02/26/[$LATEST]704f8dxmpla04097b9134246b8438f1a");
  }
  public String getFunctionName(){
    return new String("my-function");
  }
  public String getFunctionVersion(){
    return new String("$LATEST");
  }
  public String getInvokedFunctionArn(){
    return new String("arn:aws:lambda:us-east-2:123456789012:function:my-function");
  }
  public CognitoIdentity getIdentity(){
    return null;
  }
  public ClientContext getClientContext(){
    return null;
  }
  public int getRemainingTimeInMillis(){
    return 300000;
  }
  public int getMemoryLimitInMB(){
    return 512;
  }
  public LambdaLogger getLogger(){
    return new TestLogger();
  }

}

로깅에 대한 자세한 내용은 Java Lambda 함수 로그 및 모니터링을 참고하세요.

샘플 애플리케이션에서의 컨텍스트

이 안내서의 GitHub 저장소에는 컨텍스트 객체 사용을 보여주는 샘플 애플리케이션이 포함돼 있어요. 각 샘플 애플리케이션에는 손쉬운 배포·정리를 위한 스크립트, AWS Serverless Application Model(AWS SAM) 템플릿, 지원 리소스가 포함되어 있죠.

Java 샘플 Lambda 애플리케이션

  • example-java – Lambda로 주문을 처리하는 Java 함수예요. 이 함수는 커스텀 입력 이벤트 객체를 정의·역직렬화하고, AWS SDK를 사용하며, 로깅을 출력하는 방법을 보여줘요.
  • java-basic – 단위 테스트와 다양한 로깅 구성을 갖춘 최소한의 Java 함수 모음이에요.
  • java-events – Amazon API Gateway, Amazon SQS, Amazon Kinesis 등 여러 서비스의 이벤트를 처리하는 스켈레톤 코드가 담긴 Java 함수 모음이에요. 이 함수들은 최신 버전의 aws-lambda-java-events 라이브러리(3.0.0 이상)를 사용해요. 이 예제들은 AWS SDK를 의존성으로 요구하지 않아요.
  • s3-java – Amazon S3의 알림 이벤트를 처리하고 Java Class Library(JCL)를 사용해 업로드된 이미지 파일로 썸네일을 만드는 Java 함수예요.
  • layer-java – Lambda 레이어를 사용해 핵심 함수 코드와 별도로 의존성을 패키징하는 방법을 보여주는 Java 함수예요.

더 알아보기 (Learn more)

  • Java 핸들러에 전달되는 컨텍스트 메서드와 테스트 컨텍스트 클래스, 샘플 애플리케이션을 바탕으로 컨텍스트 사용을 익혀 보세요.