【发布时间】:2018-11-21 13:00:36
【问题描述】:
我一直在尝试通过 Amazon API Gateway 运行我在 Go 中的第一个 lambda 函数。
我在 go 中设置了以下包。目标是发送 JSON 请求并记录并返回该请求的正文:
package main
import (
"net/http"
"log"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/events"
)
func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
//These log statements return empty regardless of JSON input.
log.Print(request.body)
return events.APIGatewayProxyResponse{
StatusCode: http.StatusOK,
Body: request.Body
}, nil
}
func main() {
lambda.Start(Handler)
}
我可以构建和压缩它并将其上传到 AWS lambda 管理器。 AWS lambda 管理器包含一个使用测试事件的选项,我可以使用 JSON 字符串进行配置
{
"testint": 1,
"teststring": "test"
}
但是,如果我运行这个测试,我会得到以下结果:
{
"statusCode": 200,
"headers": null,
"body": ""
}
我希望正文实际上包含我传递给函数的 json,但显然出了点问题。
【问题讨论】:
-
首先,在您的日志记录中,您有一个错字:
log.Print(request.body)应该是log.Print(request.Body) -
其次,
lamda.Start不先发送上下文吗? -
例如,你的处理程序应该是:
Handler(ctx context.Context, request events.APIGatewayProxyRequest) -
@Derek 添加上下文似乎没有什么区别。它仍然返回一个空主体(即使大写正确)。亚马逊示例也没有列出上下文:aws.amazon.com/blogs/compute/…
-
事实上,该网站上的示例甚至不适合我......它会返回错误“HTTP正文中没有提供名称”
标签: amazon-web-services go aws-lambda