Lambda는 함수를 실행할 때 컨텍스트 객체를 핸들러에 전달합니다. 이 객체는 호출, 함수 및 실행 환경에 관한 정보를 속성에 제공합니다.
컨텍스트 속성
-
FunctionName
– Lambda 함수의 이름입니다. -
FunctionVersion
– 함수의 버전입니다. -
InvokedFunctionArn
– 함수를 간접 호출할 때 사용하는 Amazon 리소스 이름(ARN)입니다. 간접 호출자가 버전 번호 또는 별칭을 지정했는지 여부를 나타냅니다. -
MemoryLimitInMB
– 함수에 할당된 메모리의 양입니다. -
AwsRequestId
– 호출 요청의 식별자입니다. -
LogGroupName
– 함수에 대한 로그 그룹입니다. -
LogStreamName
– 함수 인스턴스에 대한 로그 스트림입니다. -
RemainingTime
(TimeSpan
) – 실행 시간이 초과되기 전에 남은 시간(밀리초)입니다. -
Identity
– (모바일 앱) 요청을 승인한 Amazon Cognito 자격 증명에 대한 정보입니다. -
ClientContext
– (모바일 앱) 클라이언트 애플리케이션이 Lambda에게 제공한 클라이언트 컨텍스트입니다. -
Logger
함수에 대한 로거 객체입니다.
ILambdaContext
객체의 정보를 사용하여 모니터링 목적으로 함수의 간접 호출에 대한 정보를 출력할 수 있습니다. 다음 코드는 구조화된 로깅 프레임워크에 컨텍스트 정보를 추가하는 방법의 예입니다. 이 예제에서는 함수가 AwsRequestId
을(를) 로그 출력에 추가합니다. 또한 함수는 Lambda 함수 제한 시간에 도달하려는 경우 RemainingTime
속성을 사용하여 진행 중인 작업도 취소합니다.
[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();
}
}
}