aws / aws/aws-lambda-go

The state of AWS Lambda Go Streaming support

Open
#565 2 comments 0 reactions 0 assignees View on GitHub
question
Dominant language
Go
Stars
3.8k
Forks
578
Avg merge
8h 18m
Merged PRs (30d)
1

Description

**Is your feature request related to a problem? Please describe.**
I had been trying make the AWS Lambda [response streaming](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/) work with `aws-lambda-go` runtime and I was not able to succeed. Neither the Lambda Function URLs or direct API call using `InvokeWithResponseStream` work and instead I was retrieving the entire response serialized to JSON.

I made my Lambda function return the `events.LambdaFunctionURLStreamingResponse`, but the entire response had been serialized and returned as JSON. The passed `io.Reader` had not been proceesed and suprisingly enough the response contain JSON serialized representation of the `io.Reader` implementation i.e.

```
{"StatusCode":200,"Headers":{"Content-Type":"application/octet-stream"},"Body":{"ReadCloser":{}},"Cookies":null}
```

I had been runing the GO Lambda function on `al2023` runtime, compiled the binary with `-tags lambda.norpc` option and set up the Function URL.

```
FunctionUrl:
Type: AWS::Lambda::Url
Properties:
TargetFunctionArn: !Ref Function
AuthType: NONE
InvokeMode: RESPONSE_STREAM
```

Neither of this had any impact and the behavior persisted. Even the documented in code example is not working correctly:

```
// Example:
//
// lambda.Start(func() (*events.LambdaFunctionURLStreamingResponse, error) {
// return &events.LambdaFunctionURLStreamingResponse{
// StatusCode: 200,
// Headers: map[string]string{
// "Content-Type": "text/html",
// },
// Body: strings.NewReader("Hello World!"),
// }, nil
// })
//
// Note: This response type requires compiling with `-tags lambda.norpc`, or choosing the `provided` or `provided.al2` runtime.
```

Which results in response from Function URL:

```
{"StatusCode":200,"Headers":{"Content-Type":"text/html"},"Body":{},"Cookies":null}
```

Is Response Streaming not supported with Go runtime?

**Describe the solution you'd like**
I would like to use Lambda Response Streaming with my Go runtime.

**Describe alternatives you've considered**
I am not using AWS Lambda for this use case today.

**Additional context**
`github.com/aws/aws-lambda-go v1.47.0`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.