使用 Lambda 上下文對象來檢索 C# 函數信息 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Lambda 上下文對象來檢索 C# 函數信息

當 Lambda 執行您的函數時,它會將內容物件傳遞至處理常式。此物件提供的各項屬性包含了有關叫用、函式以及執行環境的資訊。

內容屬性
  • FunctionName – Lambda 函數的名稱。

  • FunctionVersion – 函數的版本

  • InvokedFunctionArn— 用於調用函數的 Amazon 資源名稱(ARN)。指出調用者是否指定版本號或別名。

  • MemoryLimitInMB - 分配給函數的記憶體數量。

  • AwsRequestId - 調用請求的識別符。

  • LogGroupName - 函數的日誌群組。

  • LogStreamName - 函數執行個體的記錄串流。

  • RemainingTime(TimeSpan) - 執行逾時前剩餘的毫秒數。

  • Identity - (行動應用程式) 已授權請求的 Amazon Cognito 身分的相關資訊。

  • ClientContext - (行動應用程式) 用戶端應用程式提供給 Lambda 的用戶端內容。

  • Logger 函式的 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) }; } finally { cts.Cancel(); return new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.InternalServerError, Body = JsonSerializer.Serialize(databaseRecord) }; } } }