

# Lambda 컨텍스트 객체를 사용하여 C\$1 함수 정보 검색
<a name="csharp-context"></a>

Lambda는 함수를 실행할 때 컨텍스트 객체를 [핸들러](csharp-handler.md)에 전달합니다. 이 객체는 호출, 함수 및 실행 환경에 관한 정보를 속성에 제공합니다.

**컨텍스트 속성**
+ `FunctionName` – Lambda 함수의 이름입니다.
+ `FunctionVersion` – 함수의 [버전](configuration-versions.md)입니다.
+ `InvokedFunctionArn` – 함수를 간접 호출할 때 사용하는 Amazon 리소스 이름(ARN)입니다. 간접 호출자가 버전 번호 또는 별칭을 지정했는지 여부를 나타냅니다.
+ `MemoryLimitInMB` – 함수에 할당된 메모리의 양입니다.
+ `AwsRequestId` – 호출 요청의 식별자입니다.
+ `LogGroupName` – 함수에 대한 로그 그룹입니다.
+ `LogStreamName` – 함수 인스턴스에 대한 로그 스트림입니다.
+ `RemainingTime` (`TimeSpan`) – 실행 시간이 초과되기 전에 남은 시간(밀리초)입니다.
+ `Identity` – (모바일 앱) 요청을 승인한 Amazon Cognito 자격 증명에 대한 정보입니다.
+ `ClientContext` – (모바일 앱) 클라이언트 애플리케이션이 Lambda에게 제공한 클라이언트 컨텍스트입니다.
+ `Logger` 함수에 대한 [로거 객체](csharp-logging.md)입니다.

`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();
        }
    }
}
```