使用无服务器调用功能时传递JSON

时间:2018-09-16 23:36:35

标签: amazon-web-services go aws-lambda serverless-framework

我正在使用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 invokeaws doc about how to handle the event in Go

更新 我尝试从AWS控制台调用该事件,并且该事件有效,因此很有可能是无服务器调用命令中的问题。

1 个答案:

答案 0 :(得分:1)

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

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

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

并在调用命令serverless invoke -f orders --path events/startAndEnd.json

中引用了该文件