首页 > 解决方案 > 如何使用 .ebextensions 将 Application Load Balancer 固定响应添加到 AWS Elastic Beanstalk

问题描述

为了将我在 AWS ElasticBeanstalk 上提供的 API 终端节点列入白名单:

当我的 Elastic Beanstalk 环境中的应用程序负载均衡器 (ALB) 收到意外请求时,我想从它返回固定响应。

我需要以可重现和自动化的方式执行此操作。目前,我使用 CloudFormation 模板和 .ebextensions 配置我的 Elastic Beanstalk 应用程序。

我知道如何通过添加侦听器规则在控制台中手动配置固定响应:

像这样的东西...

我无法在 .ebextensions 中找到支持此功能的选项设置组合。

此外,除非我遗漏了什么,否则 CloudFormation 似乎通过此处环境上的 OptionSettings 公开了与 .ebextensions 相同的选项。

是否可以在 .ebextensions 或 CloudFormation 中配置固定响应?

如果没有,是否有另一种自动化友好的方法来完成同样的任务?也许通过 AWS API?

标签: amazon-web-servicesamazon-cloudformationamazon-elastic-beanstalkamazon-elb

解决方案


ElasticBeanstalk 允许您使用 .ebextensions 配置文件中的 Resources 标签来使用 CloudFormation。

EB 使用 CloudFormation 部署您的应用程序。Resources 标签允许您添加到此 CloudFormation 模板。它还允许您参考 EB 模板的输出资源。

AWS 文档

要将应用程序负载均衡器配置为在不接触应用程序服务器的情况下发送 404 错误 URL 请求,请将应用程序负载均衡器侦听器规则添加到:

  1. 高优先级规则:侦听预期的请求 URL 并将请求转发到应用服务器 (TargetGroupArn)
  2. 低优先级规则:捕获所有其他请求 URL 并发送 404 固定响应。

这是 YAML。

将其保存在 .ebextensions/X.config 中并运行“eb deploy”。AWS 机器负责使用新侦听器更新环境。

Resources:
  validAPIRequestListenerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties: 
      Actions: 
        -   Type: forward
            TargetGroupArn: { "Ref" : "AWSEBV2LoadBalancerTargetGroup" }
      Conditions: 
        -   Field: path-pattern
            PathPatternConfig:
              Values:
                - "/api/*"
       ListenerArn: { "Ref" : "AWSEBV2LoadBalancerListener443" }
       Priority: 10001

  defaultListenerRejectingInvalidUrls:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties: 
      Actions: 
        -   Type: fixed-response
            FixedResponseConfig:
              StatusCode: 404
              ContentType: "application/json"
              MessageBody: "Fixed"
      Conditions: 
        -   Field: path-pattern
            PathPatternConfig:
              Values: 
                - "*"
      ListenerArn: { "Ref" : "AWSEBV2LoadBalancerListener443" }
      Priority: 40000

笔记

  1. 注意优先级,他们从 1 到 50,000,数字越小获胜。此片段中的侦听器处理默认 EB 侦听器规则之前的所有请求(它将不匹配的请求转发到您的目标组)
  2. AWS 文档中注明的可用于 Ref/Fn::GetAtt 标签的逻辑 ID 不完整。如果您收到此类错误,请在控制台中打开 CloudFormation,查看与您的 EB 部署对应的资源选项卡,并查看可用的逻辑 ID。

服务:AmazonCloudFormation,消息:模板格式错误:模板的资源块中未解决的资源依赖项 [AWSEBV2LoadBalancerListener]


推荐阅读