Lambda 컨텍스트 객체를 사용하여 Java 함수 정보 검색 - AWS Lambda

Lambda 컨텍스트 객체를 사용하여 Java 함수 정보 검색

Lambda는 함수를 실행할 때 컨텍스트 객체를 핸들러에 전달합니다. 이 객체는 호출, 함수 및 실행 환경에 관한 정보를 제공하는 메서드 및 속성들을 제공합니다.

컨텍스트 메서드
  • getRemainingTimeInMillis() – 실행 시간이 초과되기까지 남은 시간(밀리초)을 반환합니다.

  • getFunctionName() – Lambda 함수의 이름을 반환합니다.

  • getFunctionVersion() – 함수의 버전을 반환합니다.

  • getInvokedFunctionArn() – 함수를 호출할 때 사용하는 Amazon 리소스 이름(ARN)을 반환합니다. 호출자가 버전 번호 또는 별칭을 지정했는지 여부를 나타냅니다.

  • getMemoryLimitInMB() – 함수에 할당된 메모리의 양을 반환합니다.

  • getAwsRequestId() – 호출 요청의 식별자를 반환합니다.

  • getLogGroupName() – 함수에 대한 로그 그룹을 반환합니다.

  • getLogStreamName() – 함수 인스턴스에 대한 로그 스트림을 반환합니다.

  • getIdentity() – (모바일 앱) 요청을 승인한 Amazon Cognito 자격 증명에 대한 정보를 반환합니다.

  • getClientContext() – (모바일 앱) 클라이언트 애플리케이션이 Lambda에게 제공한 클라이언트 컨텍스트를 반환합니다.

  • getLogger() – 함수에 대한 로거 객체를 반환합니다.

다음 예제에서는 컨텍스트 객체를 사용하여 Lambda 로거에 액세스하는 함수를 보여 줍니다.

Handler.java
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; 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; import com.amazonaws.services.lambda.runtime.CognitoIdentity; import com.amazonaws.services.lambda.runtime.ClientContext; import com.amazonaws.services.lambda.runtime.LambdaLogger; 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 애플리케이션
  • java17-examples – Java 레코드를 사용하여 입력 이벤트 데이터 객체를 나타내는 방법을 보여주는 Java 함수입니다.

  • java-basic – 단위 테스트 및 변수 로깅 구성을 사용하는 최소한의 Java 함수 모음입니다.

  • java - Amazon API Gateway, Amazon SQS 및 Amazon Kinesis와 같은 다양한 서비스의 이벤트를 처리하는 방법에 대한 스켈레톤 코드가 포함된 Java 함수 모음입니다. 이러한 함수는 최신 버전의 aws-lambda-java-events 라이브러리(3.0.0 이상)를 사용합니다. 이러한 예는 AWS SDK를 종속 항목으로 요구하지 않습니다.

  • s3-java – Amazon S3의 알림 이벤트를 처리하고 JCL(Java Class Library)을 사용하여 업로드된 이미지 파일의 썸네일을 생성하는 Java 함수입니다.

  • 사용자 지정 직렬화 - fastJson, Gson, Moshi, jackson-jr 등 널리 사용되는 라이브러리를 사용하여 사용자 지정 직렬화를 구현하는 방법에 대한 예제입니다.

  • API Gateway를 사용하여 Lambda 함수 호출 — 직원 정보가 포함된 Amazon DynamoDB 테이블을 스캔하는 Java 함수입니다. 이후 Amazon 간편 알림 서비스를 사용하여 직원들에게 근무 기념일을 축하하는 문자 메시지를 보냅니다. 이 예제에서는 API Gateway를 사용하여 함수를 호출합니다.