在 AWS Lambda 代理集成中从请求路径中剥离资源

问题描述

我有一个通过 terraform 部署的 lambda 函数和 API 网关。 API 网关在顶级根资源 / 下有多个资源,例如 /first/second/first 的资源是使用 lambda 代理集成(ANY/first 以及 ANY 上的 /first/{proxy+})设置的。 /second 资源指向不同的集成。

我的 lambda 是一个带有 Lambda 自定义运行时的 ASP.NET Core 3.1,最初使用 dotnet new serverless.AspNetCore30WebApi 生成,但后来在向 AWS 添加支持后更新为 3.1。

我的问题是,当 lambda 代理集成转换要发送到 lambda 函数的请求时,它包含完整的资源名称(即 /first/Product 而不仅仅是 /Product)。由于我在 lambda 函数中的 REST API 只知道产品并且不知道首先是什么,因此对于通过 API 网关转发的任何内容,我都会得到 404 结果。在将资源名称转发到 lambda 函数之前,我似乎找不到从路径中删除资源名称的地方,因为使用 lambda 代理集成,您似乎没有机会执行任何请求映射模板或替换。

Thu Jun 03 12:24:52 UTC 2021 : HTTP Method: GET,Resource Path: /first/Product
Thu Jun 03 12:24:52 UTC 2021 : Method request path: {proxy=Product}
Thu Jun 03 12:24:52 UTC 2021 : Method request query string: {}
Thu Jun 03 12:24:52 UTC 2021 : Method request headers: {}
...
Thu Jun 03 12:24:52 UTC 2021 : Endpoint request body after transformations: <<relevant snippet parts formatted below>>

{
    "resource": "/first/{proxy+}","path": "/first/Product","httpMethod": "GET","pathParameters": {
        "proxy": "Product"
    },"requestContext": {
        "resourcePath": "/first/{proxy+}","path": "/first/{proxy+}","protocol": "HTTP/1.1"
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)