为什么AWS API Gateway Websocket发送错误

时间:2019-08-12 21:02:18

标签: go websocket aws-lambda serverless-framework

我正在使用无服务器框架来设置一个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}"
}

2 个答案:

答案 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为我指出正确的方向。