Verwenden des Lambda-Kontextobjekts zum Abrufen von C#-Funktionsinformationen - AWS Lambda

Verwenden des Lambda-Kontextobjekts zum Abrufen von C#-Funktionsinformationen

Wenn Lambda Ihre Funktion ausführt, wird ein Context-Objekt an den Handler übergeben. Dieses Objekt stellt Eigenschaften mit Informationen zum Aufruf, zur Funktion und zur Ausführungsumgebung bereit.

Context-Eigenschaften
  • FunctionName – Der Name der Lambda-Funktion.

  • FunctionVersion – Die Version der Funktion.

  • InvokedFunctionArn – Der Amazon-Ressourcenname (ARN), der zum Aufrufen der Funktion verwendet wird. Gibt an, ob der Aufrufer eine Versionsnummer oder einen Alias angegeben hat.

  • MemoryLimitInMB – Die Menge an Arbeitsspeicher, die der Funktion zugewiesen ist.

  • AwsRequestId – Der Bezeichner der Aufrufanforderung.

  • LogGroupName – Protokollgruppe für die Funktion.

  • LogStreamName – Der Protokollstrom für die Funktionsinstance.

  • RemainingTime (TimeSpan) – Die Anzahl der Millisekunden, die vor der Zeitüberschreitung der Ausführung verbleiben.

  • Identity – Informationen zur Amazon-Cognito-Identität, die die Anforderung autorisiert hat.

  • ClientContext – (mobile Apps) Clientkontext, der Lambda von der Clientanwendung bereitgestellt wird.

  • Logger Das Logger-Objekt für die Funktion.

Sie können die Informationen im ILambdaContext-Objekt verwenden, um zu Überwachungszwecken Informationen über den Aufruf Ihrer Funktion auszugeben. Der folgende Code enthält ein Beispiel dafür, wie Sie einem strukturierten Logging-Framework Kontextinformationen hinzufügen können. In diesem Beispiel fügt die Funktion AwsRequestId zu den Protokollausgaben hinzu. Die Funktion verwendet auch die RemainingTime-Eigenschaft, um eine Aufgabe während des Fluges abzubrechen, wenn die Zeitüberschreitung der Lambda-Funktion bald erreicht ist.

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