Lambda 컨텍스트 객체로 Java 함수 정보 검색
Lambda 컨텍스트 객체로 Java 함수 정보 검색
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 핸들러에 전달되는 컨텍스트 메서드와 테스트 컨텍스트 클래스, 샘플 애플리케이션을 바탕으로 컨텍스트 사용을 익혀 보세요.