Enabling cancellationToken on NET6 Lambda (REST API Gateway)

3

Hi,

We have a REST (edge) API Gateway to invoke a .NET 6 lambda function and in which we have included CancellationToken in some endpoints. It seems CancellationToken does not get propagated, and we are not sure what we are missing.

Has anyone else faced this issue and could provide us some insights?

Thanks

1 Answer
1

Unfortunately, Lambda doesn't provide a CancellationToken (to my knowledge). It can, however, tell you the amount of time remaining before it gives up, which you can build a CancellationToken around. For example:

public async Task<Stream> Process(Stream input, ILambdaContext lambdaContext)
{
    var timeout = lambdaContext.RemainingTime.Subtract(TimeSpan.FromSeconds(5d));
    using var cts = new CancellationTokenSource(timeout);

    await my.Work(cts.Token);

    return Stream.Null;
}

When the RemainingTime has been reached, Lambda will abruptly shut everything down. There is seemingly no nice way to handle that. Since cancellation is mutual, you'll want to pad the timeout with a few seconds to shut down gracefully. I have arbitrarily selected 5 seconds, but your needs might be different.

When you use the Lambda to ASP.NET Core integration, this process is handled for you automatically and you can just add CancellationToken as a parameter to your action methods as normal.

AWS
Chris M
answered 2 years ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions