使用无服务器调用函数时传递 JSON

Passing JSON when invoking function using serverless

我是 运行 使用无服务器用 Go 编写的 lambda 函数,我想在调用它时向它传递几个参数。

这是我为接收请求而创建的结构:

type RequestStruct struct {
    StartAt int `json:"startAt"`
    EndAt   int `json:"endAt"`
}

在处理程序中,我试图打印出值:

func Handler(ctx context.Context,request RequestStruct) (Response, error) {
    fmt.Printf("Request: %v",request)

我尝试使用 --raw 选项调用它,所以我尝试这样做

serverless invoke -f orders --raw -d '{"startAt":1533513600,"endAt":1534118399}'

我试着用双引号括起来

serverless invoke -f orders --raw -d "{startAt:1533513600,endAt:1534118399}"

serverless invoke -f orders --raw -d "{\"startAt\":1533513600,\"endAt\":1534118399}"

我收到了所有三个的编组错误:

{
    "errorMessage": "json: cannot unmarshal string into Go value of type main.RequestStruct",
    "errorType": "UnmarshalTypeError"
}

我不确定我做错了什么,我可以在网上找到任何例子,只有这个 serverless doc about how to do the invoke and this aws doc about how to handle the event in Go

更新 我尝试从 AWS 控制台调用事件并且成功了,所以问题很可能出在无服务器调用命令中。

我通过将 JSON 放在文件中而不是命令本身找到了解决此问题的方法,这并不能解决我在问题中遇到的问题,但它是一种调用函数 Json

我添加了一个 events/startAndEnd.json 文件,其中包含我的 json 数据:

{
    "startAt":1533513600,
    "endAt":1534118399
}

并在调用命令中引用该文件:serverless invoke -f orders --path events/startAndEnd.json

以防您在通过 npm 运行 命令时遇到此问题。我在调用它时也遇到了类似的错误:

    "invoke": "serverless invoke --function myfunction --data \"{ \"Records\": []}\"",

通过将 data 上的双引号更改为单引号,它突然开始工作:

    "invoke": "serverless invoke --function myfunction --data '{ \"Records\": []}'",