Amazon web services 使用Go设置AWS Lambda,为什么我总是得到;“内部服务器错误”;用这个简单的函数?
我正在使用下面的示例函数: 如果我使用测试事件控制台并输入Amazon web services 使用Go设置AWS Lambda,为什么我总是得到;“内部服务器错误”;用这个简单的函数?,amazon-web-services,go,aws-lambda,Amazon Web Services,Go,Aws Lambda,我正在使用下面的示例函数: 如果我使用测试事件控制台并输入{“name”:“John”}就可以了 但如果我要添加触发器,请单击API网关,然后单击创建新API,将安全设置为打开,保留所有其他默认设置,然后单击添加然后保存 如果我看到它在底部列出的URL是“API端点:”并单击它,我会得到“Internal server error” 如果我做了curl-XPOST-d“{\“name\:\“Paul\”}”https://AWS-URL-ENDPOINT/amazonaws.com/defaul
{“name”:“John”}
就可以了
但如果我要添加触发器,请单击API网关,然后单击创建新API,将安全设置为打开,保留所有其他默认设置,然后单击添加然后保存
如果我看到它在底部列出的URL是“API端点:”并单击它,我会得到“Internal server error”
如果我做了curl-XPOST-d“{\“name\:\“Paul\”}”https://AWS-URL-ENDPOINT/amazonaws.com/default/mytestfunction
我得到“内部服务器错误”
我做错了什么?导致
内部服务器错误的最常见原因之一是Lambda函数正在崩溃或没有返回触发服务所期望的结果
在这种情况下,我怀疑两者兼而有之
当您通过API网关代理时,您的事件负载不仅仅是您发布的内容。您可以在此处找到有关事件形状的更多信息,包括API网关请求的形状:()
您的lambda正在崩溃,因为您从API网关获得的事件无法强制转换到您的类型MyEvent struct
,因为它没有名称
属性;事实上,请求的主体实际上以字符串形式存在于event.body
中,必须对其进行解码
关于使用lambda的API网关响应的预期事件,可以在此处找到一个很好的指南()
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
type MyEvent struct {
Name string `json:"name"`
}
func HandleRequest(ctx context.Context, name MyEvent) (string, error) {
return fmt.Sprintf("Hello %s!", name.Name), nil
}
func main() {
lambda.Start(HandleRequest)
}