亚马逊AWS官方博客

新推出 – AWS Application Load Balancer 的高级请求路由

AWS Application Load Balancer 自 2016 年夏使用至今! 它们支持基于内容的路由,适用于无服务器且基于容器的应用程序,并且具有高度可扩展性。很多 AWS 客户使用现有的基于主机和路径的路由来增强 HTTP 和 HTTPS 应用程序,同时利用其他 ALB 功能,例如端口转发(非常适合基于容器的应用程序)、健康检查服务发现重定向固定应答以及内置身份验证

高级请求路由

基于主机的路由功能允许您编写规则,以使用主机标头将流量路由到所需的目标组。我们正在扩展和推广此功能,使您能够基于标准和自定义 HTTP 标头和方法、查询字符串以及源 IP 地址来编写规则(和路由流量)。我们还致力于使规则和条件更强大;规则可以有多个条件(AND 关系),每个条件可以指定与多个值的匹配(OR 关系)。

您可以使用此新功能来简化应用程序架构,无需使用代理队列进行路由,并在负载均衡器阻止不需要的流量。以下是一些用例:

  • 将人为流量与机器人/爬虫流量分开。
  • 将客户或客户组分配到单元(不同的目标组)并相应地路由流量。
  • 执行 A/B 测试。
  • 执行金丝雀或蓝绿部署。
  • 根据方法将流量路由到微服务处理程序(例如,PUT 到一个目标组或 GET 到另一个目标组)。
  • 执行基于 IP 地址或 CDN 的访问限制。
  • 有选择地将流量路由到本地或云端的目标组。
  • 为各种类型和类别的设备提供不同的页面或用户体验。

使用高级请求路由

只需编辑现有规则,即可将此功能用于现有的 Application Load Balancer。下面我将从一个简单的规则开始,即返回一个固定的纯文本响应(这篇博文中的示例仅供测试和说明;相信您的情况更实际,也更有趣):

我可以使用curl 来测试:

$ curl http://TestALB-156468799.elb.amazonaws.com
符合默认规则!

单击 Insert Rule(插入规则)来设置一些高级请求路由:

然后单击 Add condition(添加条件)并检查可用的选项:

选择 Http header(Http 标头)并创建一个条件,查找名为“user”且值为 jeff 的 cookie。然后创建一个返回固定响应的操作:

单击 Save(保存),等待几秒钟,然后在更改生效后发出一对请求:

$ curl http://TestALB-156468799.elb.amazonaws.com
符合默认规则!

$ curl --cookie "user=jeff" http://TestALB-156468799.elb.amazonaws.com
Hello Jeff

我还可以创建一个匹配一个或多个 IP 地址 CIDR 块的规则:

$ curl http://TestALB-156468799.elb.amazonaws.com
Hello EC2 实例

我可以匹配查询字符串(这对 A/B 测试非常有用):

$ curl http://TestALB-156468799.elb.amazonaws.com?ABTest=A
A/B测试,已选择选项 A 

如果我只关心是否存在特定的字段名称,也可以使用通配符:

我可以匹配标准或自定义 HTTP 方法。我可以创建一个名为 READ 的方法:

$ curl --request READ http://TestALB-156468799.elb.amazonaws.com
已调用自定义 READ 方法

针对以下操作有很多灵活处理(并不新鲜,但绝对值得了解):

转发,将请求路由到目标组(一组 EC2 实例、一个 Lambda 函数或一个 IP 地址列表)。

重定向,生成 301(永久)或 302(找到)响应,还可用于在 HTTP 与 HTTPS 之间切换。

返回固定响应,生成带有任何所需响应代码的静态响应,如之前所展示的那样。

身份验证,使用 Amazon Cognito 或 OIDC 提供程序对请求进行身份验证(仅适用于 HTTPS 侦听器)。

注意事项

关于这个强大的新功能有以下几点注意事项:

指标 – 您可以查看规则评估HTTP 固定响应计数 CloudWatch 指标,以了解规则相关活动的更多信息(了解更多):

编程访问 – 您还可以使用ALB APICLI创建、修改、检查和删除规则(即将推出 CloudFormation 支持)。

规则匹配 – 这些规则由字符串匹配提供支持,因此请仔细测试并反复检查您的规则是否按预期运行。调试和测试时,ALB 访问日志中的matched_rule_priorityactions_executed 字段很有帮助(了解更多)。

限制 – 每个 ALB 最多可以有 100 条规则,不包括默认值。每条规则最多可引用 5 个值,最多可使用 5 个通配符。条件数量仅受引用的唯一值的数量限制。

现已推出

现在,所有 AWS 地区都提供高级请求路由,无需额外付费(您只需支付 Application Load Balancer 的正常价格)。

 

本篇作者

Jeff Barr

AWS 首席布道师; 2004年开始发布博客,此后便笔耕不辍。