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