首页 > 后端开发 > Golang > 正文

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

霞舞
发布: 2024-12-23 14:27:48
转载
976人浏览过

将基于 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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号