C# 함수 정보를 가져오는 Lambda 컨텍스트 객체 사용하기
C# 함수 정보를 가져오는 Lambda 컨텍스트 객체 사용하기
Lambda가 함수를 실행할 때 핸들러에 컨텍스트 객체를 전달해요. 이 객체는 호출, 함수, 실행 환경에 대한 정보를 담은 속성을 제공해요.
본문
컨텍스트 속성(Context properties)
FunctionName– Lambda 함수의 이름이에요.FunctionVersion– 함수의 버전이에요.InvokedFunctionArn– 함수를 호출할 때 사용되는 Amazon Resource Name(ARN)이에요. 호출자가 버전 번호나 별칭(alias)을 지정했는지도 알려줘요.MemoryLimitInMB– 함수에 할당된 메모리 용량이에요.AwsRequestId– 호출 요청의 식별자예요.LogGroupName– 함수의 로그 그룹이에요.LogStreamName– 함수 인스턴스의 로그 스트림이에요.RemainingTime(TimeSpan) – 실행이 타임아웃되기까지 남은 시간(밀리초)이에요.Identity– (모바일 앱) 요청을 승인한 Amazon Cognito 자격 증명에 대한 정보예요.ClientContext– (모바일 앱) 클라이언트 애플리케이션이 Lambda에 제공한 클라이언트 컨텍스트예요.Logger– 함수의 로거 객체예요.
ILambdaContext 객체의 정보를 사용해서 모니터링 목적으로 함수 호출에 대한 정보를 출력할 수 있어요. 다음 코드는 컨텍스트 정보를 구조화된 로깅 프레임워크에 추가하는 방법의 예시예요. 이 예시에서 함수는 AwsRequestId를 로그 출력에 추가해요. 함수는 또한 RemainingTime 속성을 사용해서 Lambda 함수 타임아웃이 임박했을 때 진행 중인 작업(inflight task)을 취소해요.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace GetProductHandler;
public class Function
{
private readonly IDatabaseRepository _repo;
public Function()
{
this._repo = new DatabaseRepository();
}
public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
{
Logger.AppendKey("AwsRequestId", context.AwsRequestId);
var id = request.PathParameters["id"];
using var cts = new CancellationTokenSource();
try
{
cts.CancelAfter(context.RemainingTime.Add(TimeSpan.FromSeconds(-1)));
var databaseRecord = await this._repo.GetById(id, cts.Token);
return new APIGatewayProxyResponse
{
StatusCode = (int)HttpStatusCode.OK,
Body = JsonSerializer.Serialize(databaseRecord)
};
}
catch (Exception ex)
{
return new APIGatewayProxyResponse
{
StatusCode = (int)HttpStatusCode.InternalServerError,
Body = JsonSerializer.Serialize(new { error = ex.Message })
};
}
finally
{
cts.Cancel();
}
}
}
더 알아보기 (Learn more)
C# 로깅에 대한 자세한 내용은 C# 함수의 로깅을 참고하세요.