为什么AWS API Gateway websocket发送错误
Why does AWS API Gateway websocket send error
我正在使用无服务器框架来设置 AWS API 网关 websocket,它调用用 Go 编写的 lambda 函数。现在处理程序只记录一条消息。我可以连接到 websocket,当我通过套接字发送消息时,我可以看到消息已记录在 Cloudwatch 中,但我总是收到一条看起来像
的错误消息
{
"message": "Internal server error",
"connectionId": "eU3C1cE7CYcCJPw=",
"requestId": "eU3EQFX0iYcFysQ="
}
Cloudwatch 中没有记录 lambda 的错误。 AWS API 网关配置在我看来不错。我不知道是什么原因造成的。
我的main.go:
package main
import (
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func Handler(request events.APIGatewayWebsocketProxyRequest) {
fmt.Println("default function ran")
}
func main() {
lambda.Start(Handler)
}
可能不是特别相关,但 serverless.yaml 配置:
functions:
websocket-default:
handler: bin/ws
events:
- websocket:
route: $default
我发送的负载:
{
"action": "whatever",
"data": "{whatever}"
}
不确定这是否是您代码中的唯一问题,但您的处理程序签名应该是 doc:
中列出的签名
func ()
func () error
func (TIn) error
func () (TOut, error)
func (context.Context) error
func (context.Context, TIn) error
func (context.Context) (TOut, error)
func (context.Context, TIn) (TOut, error)
好吧,这需要大量的反复试验,但这是有效的方法签名
type Response events.APIGatewayProxyResponse
func Handler(context context.Context, request events.APIGatewayWebsocketProxyRequest) (Response, error)
我真的希望 golang 的文档更好。感谢 Clement 为我指明了正确的方向。
我正在使用无服务器框架来设置 AWS API 网关 websocket,它调用用 Go 编写的 lambda 函数。现在处理程序只记录一条消息。我可以连接到 websocket,当我通过套接字发送消息时,我可以看到消息已记录在 Cloudwatch 中,但我总是收到一条看起来像
的错误消息{
"message": "Internal server error",
"connectionId": "eU3C1cE7CYcCJPw=",
"requestId": "eU3EQFX0iYcFysQ="
}
Cloudwatch 中没有记录 lambda 的错误。 AWS API 网关配置在我看来不错。我不知道是什么原因造成的。
我的main.go:
package main
import (
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func Handler(request events.APIGatewayWebsocketProxyRequest) {
fmt.Println("default function ran")
}
func main() {
lambda.Start(Handler)
}
可能不是特别相关,但 serverless.yaml 配置:
functions:
websocket-default:
handler: bin/ws
events:
- websocket:
route: $default
我发送的负载:
{
"action": "whatever",
"data": "{whatever}"
}
不确定这是否是您代码中的唯一问题,但您的处理程序签名应该是 doc:
中列出的签名func ()
func () error
func (TIn) error
func () (TOut, error)
func (context.Context) error
func (context.Context, TIn) error
func (context.Context) (TOut, error)
func (context.Context, TIn) (TOut, error)
好吧,这需要大量的反复试验,但这是有效的方法签名
type Response events.APIGatewayProxyResponse
func Handler(context context.Context, request events.APIGatewayWebsocketProxyRequest) (Response, error)
我真的希望 golang 的文档更好。感谢 Clement 为我指明了正确的方向。