amazon-web-services - AWS Lambda (URL) 重写流程
问题描述
我是 Lambda 新手,所以我想了解如何部署以下场景:
- Lambda 连接到 API 网关(后者又连接到反向代理)
- 从 API 网关到 lambda 的请求需要路由到 3 个不同的 ALB,每个 ALB 位于不同的 (VPC) 私有子网中。
除了编写 Lambda 函数(使用 python)来重写 url 之外,我需要进行哪些配置更改才能实现此目的?
如果有人可以在这里解释消息流,那就太好了。
谢谢阿比吉特
解决方案
这对我来说似乎是多个问题,我将尝试分解试图实现的目标。
将 ALB 与 API 网关一起使用
API Gateway 如何使用负载均衡器来服务 http 流量有很多选择。解决方案实际上取决于您尝试使用的 API 网关类型。
假设您的 API 是REST或WebSockets,您有 2 个选择来启用入站到负载均衡器的 HTTP 流量:
- 直接作为
HTTP
orHTTP_PROXY
请求,列出 API 网关将流量转发到的可公开访问的主机名。 - 如果您想保持传输私有,那么您唯一的选择是创建一个网络负载均衡器并使用VPCLink在 API Gateway 和您的网络资源之间创建私有连接。
如果您正在创建HTTP API(有时称为 API Gateway v2),那么您可以使用与私有 ALB 的直接连接,但是请注意,此时 HTTP API 不支持 REST API 的所有功能,因此您在执行此操作之前会想要比较功能集。
使用多个负载均衡器来引导流量
您确定每个资源/方法组合的值,例如POST /example
将分配其目标端点,但只有一个.
如果您使用 REST API 来指定转发流量的任何端点,我的建议是使用阶段变量,原因如下:
- 防止域名输入错误
- 允许快速替换主机名
- 为金丝雀部署提供在 2 个变量名称之间按比例转移流量的功能(只要类型相同,这些名称可以是任何东西,例如 Lambda 到另一个 Lambda,而不是 Lambda 到负载均衡器)。
使用 Lambda 重定向
从技术上讲,Lambda 可以通过使用以下语法返回响应来执行重定向
{
statusCode: 302,
headers: {
Location: 'https://api.example.com/new/path',
}
}
但是请注意,这会将请求更改为GET
请求,这还将在重定向发生时删除正文请求的有效负载。此外,您需要为要重定向的每个资源/方法组合进行设置。
您可以使用 2 个选项来解决这些问题,它们都涉及将CloudFront与Lambda@Edge函数结合使用。
Origin Request
如果您可以修改 Request URI 属性以匹配新的 URI 结构,第一个解决方案可以作为请求类型更改的解决方法。通过这样做,您的客户仍然可以使用 API,同时您会通知他们对您正在迁移的某些路径的弃用。
第二种解决方案是一种解决方法,可以解决向每个资源/方法组合添加重定向的需要,这可能会为重定向创建大量混乱的方法。您可以创建一个 Lambda@Edge 函数来对Origin Response
事件执行相同的重定向。您可以在您的 Lambda 函数中创建映射来确定它应该重定向到哪个 URL。
Lambda@Edge 示例函数页面上有很多很棒的示例
推荐阅读
- javascript - 如何将图像与更新 JSON/API 密钥数据链接并将其显示到 HTML 网页
- android - 片段:通过覆盖 OnActivityCreated 避免 getActivity() 返回 null?
- javascript - 保存令牌并在发布请求 nodejs 上使用它
- laravel - Laravel 5.6 Vue.js eo app.js (404) 的问题
- google-apps-script - 是否可以将图表转换为嵌入式图表?
- python - TF 2.0:在哪里可以找到 tf.contrib.training 的升级?
- haskell - id 函数的默认类型
- c# - 使用 EF Core 的 AspNet Core Web API 高内存使用率
- c# - 如何为与时间相关的逻辑创建单元测试
- java - JsonPath 从完整对象中删除对象