aws / aws/aws-lambda-go

The state of AWS Lambda Go Streaming support

Aperta
#565 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
question
Lingua principale
Go
Stelle
3.8k
Fork
578
Merge medio
8h 18m
PR unite (30g)
1

Descrizione

**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`

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start by reproducing the documented lambda.Start example returning events.LambdaFunctionURLStreamingResponse with -tags lambda.norpc on the al2023 or provided runtime, using a Function URL configured with InvokeMode: RESPONSE_STREAM. Trace how the response is encoded and verify whether Body is serialized instead of streamed. Done means the documented Go response reaches the Function URL as streamed content, or the limitation and required runtime conditions are clearly documented.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
aws, go
Ambito
backend, cloud
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.