Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exceeded maximum allowed payload size #1815

Open
1 task
schmallaria opened this issue Sep 20, 2024 · 3 comments
Open
1 task

Exceeded maximum allowed payload size #1815

schmallaria opened this issue Sep 20, 2024 · 3 comments
Labels
bug This issue is a bug. low-effort module/lambda-client-lib p2 This is a standard priority issue queued

Comments

@schmallaria
Copy link

schmallaria commented Sep 20, 2024

Describe the bug

Hi,

We have an ASP.NET Core Web API running, hosted in a Lambda function. The API uses Top Level Statements and the package Amazon.Lambda.AspNetCoreServer.Hosting.

The function acts as a Proxy Server which enables our API clients to access a lot of legacy SOAP services. In front of the Lambda function there is an API Gateway.

Some of the responses from the SOAP Services exceeds the Lambda response limit of 6MB. When this occurs the underlying Lambda runtime client receives an HTTP 413 error and throws an exception which crashes the whole application, because this happens during startup of the .net application.

I'm not sure if it is a bug or not. How can we handle those errors. In such cases the calling client application should also receive HTTP 413 and not 500.

Regression Issue

  • Select this option if this issue appears to be a regression.

Expected Behavior

Application doesn't crash, exception can be handled and send back to the client.

Current Behavior

When response size is greater than 6 MB, Lambda function receives an HTTP 413 error and crashes. The calling client receives a HTTP 500 error, probably because of the crashed application. The exception occurs during startup of the application:

{"errorMessage":"Exceeded maximum allowed payload size (6291556 bytes).","errorType":"RequestEntityTooLarge"}

at Amazon.Lambda.RuntimeSupport.InternalRuntimeApiClient.ResponseAsync(String awsRequestId, Stream outputStream, CancellationToken cancellationToken)
at Amazon.Lambda.RuntimeSupport.RuntimeApiClient.SendResponseAsync(String awsRequestId, Stream outputStream, CancellationToken cancellationToken)
at Amazon.Lambda.RuntimeSupport.LambdaBootstrap.InvokeOnceAsync(CancellationToken cancellationToken)
at Amazon.Lambda.RuntimeSupport.LambdaBootstrap.RunAsync(CancellationToken cancellationToken)
at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__15_1(IHostedService service, CancellationToken token)
at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
at Program.<Main>$(String[] args) in Program.cs:line 56

Reproduction Steps

n/a

Possible Solution

No response

Additional Information/Context

No response

AWS .NET SDK and/or Package version used

Amazon.Lambda.AspNetCoreServer.Hosting 1.7.0

Targeted .NET Platform

.NET Core 8.0

Operating System and version

Docker container

@schmallaria schmallaria added bug This issue is a bug. needs-triage This issue or PR still needs to be triaged. labels Sep 20, 2024
@bhoradc bhoradc added needs-reproduction This issue needs reproduction. module/lambda-client-lib p2 This is a standard priority issue and removed needs-triage This issue or PR still needs to be triaged. labels Sep 20, 2024
@ashishdhingra ashishdhingra self-assigned this Sep 27, 2024
@ashishdhingra
Copy link
Contributor

Issue reproducible using below code:

...
    [Route("api/[controller]")]
    public class ValuesController : ControllerBase
    {
        private IHttpContextAccessor _httpContextAccessor;

        public ValuesController(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        // GET api/values
        [HttpGet]
        public IEnumerable<string> Get()
        {
            string val1 = new string('*', 7 * 1024 * 1024); // 7MB string
            return new string[] { val1, "value2" };
        }
...

In CloudWatch logs, error with 413 status code would be logged:

{
    "errorMessage": "Exceeded maximum allowed payload size (6291556 bytes).",
    "errorType": "RequestEntityTooLarge"
}

The front-end will get a 502 Bad Gateway HTTP response status code.

@schmallaria I'm unsure if you could intercept the exception thrown by Lambda runtime. May be you could check the payload size returned by your downstream SOAP services and throw custom model object containing error property and status code to the calling client?

Thanks,
Ashish

@ashishdhingra ashishdhingra added response-requested Waiting on additional info and feedback. Will move to close soon in 7 days. and removed needs-reproduction This issue needs reproduction. labels Sep 27, 2024
@schmallaria
Copy link
Author

@ashishdhingra, checking downstream of SOAP Service is not possible. I've tried to use a Global Exception Handler using IExceptionHandler interface, but that's also not working, because the error occurs during startup of the application and at this time the application pipeline is not available, no chance to respond with a specific error to the calling client.

@github-actions github-actions bot removed the response-requested Waiting on additional info and feedback. Will move to close soon in 7 days. label Oct 1, 2024
@github-staff github-staff deleted a comment from SAMBILI Oct 28, 2024
@normj
Copy link
Member

normj commented Nov 8, 2024

I agree it would be for our library when converting the ASP.NET Core response to the API Gateway response check the size and if it larger then API Gateway can handle return an API Gateway response with the status code set to 413.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug This issue is a bug. low-effort module/lambda-client-lib p2 This is a standard priority issue queued
Projects
None yet
Development

No branches or pull requests

5 participants
@normj @schmallaria @ashishdhingra @bhoradc and others