首頁 > 後端開發 > Golang > 使用 API Gateway HTTP API 解決 Go Lambda 函數中的空白路徑問題

使用 API Gateway HTTP API 解決 Go Lambda 函數中的空白路徑問題

Patricia Arquette
發布: 2024-12-26 08:49:09
原創
1002 人瀏覽過

Solving the Empty Path Issue in Go Lambda Functions with API Gateway HTTP API

將基於 Golang/Docker 的 HTTP API 部署到 AWS Lambda 時,您可能會遇到 APIGatewayProxyRequest 中的路徑屬性為空的問題。發生這種情況是因為 Lambda 函數正在從 API Gateway HTTP API (v2) 接收事件,與 REST API (v1) 相比,它使用不同的事件結構。

問題

APIGatewayProxyRequest 是為較舊的 REST API 設計的,與 HTTP API 一起使用時將導致空路徑欄位。解決方案是使用正確的事件結構:APIGatewayV2HTTPRequest.

切換到使用 APIGatewayV2HTTPRequest 結構,其中包含 RawPath 欄位以正確處理路由。

他們文件中的原始程式碼(不起作用):

package main

import (
    "context"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func handler(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    response := events.APIGatewayProxyResponse{
        StatusCode: 200,
        Body:       "\"Hello from Lambda!\"",
    }
    return response, nil
}

func main() {
    lambda.Start(handler)
}
登入後複製

這是更新的 Lambda 函數範例:

package main

import (
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func handler(request events.APIGatewayV2HTTPRequest) (*events.APIGatewayV2HTTPResponse, error) {
    if request.RawPath == "/health" {
        return &events.APIGatewayV2HTTPResponse{
            StatusCode: 200,
            Body:       "Health check passed",
        }, nil
    }
    return &events.APIGatewayV2HTTPResponse{
        StatusCode: 404,
        Body:       "Not Found",
    }, nil
}

func main() {
    lambda.Start(handler)
}
登入後複製

部署您的 Lambda

  1. 將 Lambda 函數部署到 AWS。
  2. 在 API Gateway 中建立 HTTP API 並將其與您的 Lambda 函數整合。
  3. 測試端點:向 /health 發送請求應該返回成功訊息,而任何其他路徑都會傳回 404。

結論

切換到 APIGatewayV2HTTPRequest 可以解決使用 API Gateway HTTP API (v2) 時 Lambda 函數中的空路徑問題。請務必測試您的端點以確保路徑路由能如預期運作。

源自 github 問題:

https://github.com/aws/aws-lambda-go/issues/60

以上是使用 API Gateway HTTP API 解決 Go Lambda 函數中的空白路徑問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板