我正在使用无服务器框架来设置一个AWS API Gateway Websocket,该Websocket调用用Go编写的lambda函数。现在,处理程序仅记录一条消息。我可以连接到网络套接字,通过套接字发送消息时,可以看到消息记录在Cloudwatch中,但是我总是收到类似
的错误消息{
"message": "Internal server error",
"connectionId": "eU3C1cE7CYcCJPw=",
"requestId": "eU3EQFX0iYcFysQ="
}
在Cloudwatch中没有为lambda记录任何错误。 AWS API Gateway配置对我来说很好。我不知所措,想不知道是什么原因造成的。
我的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}"
}
答案 0 :(得分:0)
不确定这是否是代码中唯一的问题,但是您的处理程序签名应该是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)
答案 1 :(得分:-1)
好吧,这需要大量的反复试验,但这是有效的方法签名
type Response events.APIGatewayProxyResponse
func Handler(context context.Context, request events.APIGatewayWebsocketProxyRequest) (Response, error)
我真的希望golang的文档更好。感谢Clement为我指出正确的方向。