When Lambda runs your function, it passes a context object to the handler. This object provides properties with information about the invocation, function, and execution environment.
Context propertiesFunctionName
â The name of the Lambda function.
FunctionVersion
â The version of the function.
InvokedFunctionArn
â The Amazon Resource Name (ARN) that's used to invoke the function. Indicates if the invoker specified a version number or alias.
MemoryLimitInMB
â The amount of memory that's allocated for the function.
AwsRequestId
â The identifier of the invocation request.
LogGroupName
â The log group for the function.
LogStreamName
â The log stream for the function instance.
RemainingTime
(TimeSpan
) â The number of milliseconds left before the execution times out.
Identity
â (mobile apps) Information about the Amazon Cognito identity that authorized the request.
ClientContext
â (mobile apps) Client context that's provided to Lambda by the client application.
Logger
The logger object for the function.
You can use information in the ILambdaContext
object to output information about your function's invocation for monitoring purposes. The following code provides an example of how to add context information to a structured logging framework. In this example, the function adds AwsRequestId
to the log outputs. The function also uses the RemainingTime
property to cancel an inflight task if the Lambda function timeout is about to be reached.
[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();
}
}
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4