首页 > 后端开发 > Golang > 使用 API Gateway HTTP API 解决 Go Lambda 函数中的空路径问题

使用 API Gateway HTTP API 解决 Go Lambda 函数中的空路径问题

Patricia Arquette
发布: 2024-12-26 08:49:09
原创
944 人浏览过

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板