-
Notifications
You must be signed in to change notification settings - Fork 56
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
Function URL invoke hangs when the response stream is empty #95
Comments
Call pipeline(
Readable.from(Buffer.alloc(0)),
responseStream,
{ end: true },
)
``` |
I believe const pipeline = require("util").promisify(require("stream").pipeline);
const { Readable } = require("stream");
exports.handler = awslambda.streamifyResponse(async (event, responseStream, context) => {
responseStream = awslambda.HttpResponseStream.from(responseStream, {
statusCode: 403,
});
console.log('before pipeline');
await pipeline(
Readable.from(Buffer.alloc(0)),
responseStream,
{ end: true },
);
responseStream.end();
console.log('after pipeline');
}); In lambda logs, I can see both messages |
Hm... now I remembered that I already had an issue like this in my lib: https://github.com/H4ad/serverless-adapter/blob/250221f3e89a08d28d48c1258768175b5d176b15/src/handlers/aws/aws-stream.handler.ts#L307-L311 You need at least to call once This is probably a bug. |
I have tested adding the empty text |
Strangely, this is supposed to solve the issue. You can try my lib, which is basically a port of |
I just tested my code again (not |
I suppose AWS infrastructure Function URL uses code similar to this: if (lambdaResponseStatusCode >= 400 && lambdaResponseStatusCode < 600) {
await fetchResponse();
}
end(); So if there is an HTTP status code indicating error, the Function URL hangs if there is no response body because they assume error response must include response body. That's my theory at least. |
I have a lambda with response streaming enabled. Invoked via Function URL. I am trying to return a status code with no response body. I have reduced my code to the below sample to reproduce the issue:
I can see the HTTP headers are sent correctly and received by the client. But the connection remains open for up to 16 minutes. It seems like the runtime expects a response body, and if there is none, it just hangs and does not close the connection.
What's even stranger is that I have tested this in 2 different accounts. One of the accounts has been created ages ago, and the code above actually works fine as one would expect. The other account is newer (and it's where that code is supposed to run), and it just hangs and doesn't close the connection. Region is
us-east-1
.The text was updated successfully, but these errors were encountered: