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)
}