我實際上是在使用Go 文檔中的示例函數:package mainimport ( "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)}如果我使用測試事件控制臺并輸入{ "name": "John" }它就可以正常工作。但是如果我轉到添加觸發器,單擊 API 網關,然后單擊創建新 API,將安全性設置為打開,保留其他所有默認值,然后單擊添加,然后單擊保存。如果我看到它在底部列為“API 端點:”的 URL 并單擊它,我會收到“內部服務器錯誤”。如果我做curl -XPOST -d "{ \"name\": \"Paul\" }" https://AWS-URL-ENDPOINT/amazonaws.com/default/mytestfunction我收到“內部服務器錯誤”。我究竟做錯了什么?
2 回答

心有法竹
TA貢獻1866條經驗 獲得超5個贊
最常見的原因之一Internal server error
是您的 Lambda 函數崩潰或未返回觸發服務預期的內容。
在這種情況下,我懷疑兩者都有。
當您通過 API 網關代理時,您的事件負載不僅僅是您發布的內容。
您的 lambda 正在崩潰,因為您從 API 網關獲得的事件無法轉換為您的type MyEvent struct
,因為它沒有name
屬性;事實上,請求的主體實際上是event.body
一個必須解碼的字符串。

慕少森
TA貢獻2019條經驗 獲得超9個贊
我遇到了這個問題并通過在我的代碼中使用 AWS 結構類型修復了它。
我遵循此處的示例函數,并使用events.APIGatewayProxyRequest
和events.APIGatewayProxyResponse
來自“github.com/aws/aws-lambda-go/events”作為我的 DTO。是APIGatewayProxyRequest
您的處理程序需要的參數,events.APIGatewayProxyResponse
也是您的處理程序需要返回的參數。
- 2 回答
- 0 關注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消