如何使用 .ebextensions 将 Application Load Balancer 固定响应添加到 AWS Elastic Beanstalk

Posted

技术标签:

【中文标题】如何使用 .ebextensions 将 Application Load Balancer 固定响应添加到 AWS Elastic Beanstalk【英文标题】:How to add Application Load Balancer Fixed Response to AWS Elastic Beanstalk with .ebextensions 【发布时间】:2019-09-16 04:26:52 【问题描述】:

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

当我的 Elastic Beanstalk 环境中的 Application Load Balancer (ALB) 收到意外请求时,我想返回 fixed response。

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

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

我无法在 .ebextensions 中找到支持此功能的 option settings 组合。

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

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

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

【问题讨论】:

docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/… 【参考方案1】:

ElasticBeanstalk 让您可以使用 .ebextensions 配置文件中的 Resources 标签来使用 CloudFormation。

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

AWS Documentation

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

    高优先级规则:侦听预期的请求 URL 并将请求转发到应用服务器 (TargetGroupArn) 低优先级规则:捕获所有其他请求 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 到 50,000,数字越小越好。此 sn-p 中的侦听器处理默认 EB 侦听器规则(将不匹配的请求转发到您的目标组)之前的所有请求 AWS 文档中注明的可用于 Ref/Fn::GetAtt 标签的逻辑 ID 不完整。如果您收到此类错误,请在控制台中打开 CloudFormation,查看与您的 EB 部署对应的资源选项卡,并查看可用的逻辑 ID。

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

【讨论】:

以上是关于如何使用 .ebextensions 将 Application Load Balancer 固定响应添加到 AWS Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .ebextensions 中获取负载均衡器的 ARN?

AWS Elastic Beanstalk:如何在 ebextensions 中使用环境变量?

AWS Elastic Beanstalk - .ebextensions

AWS Elastic Beanstalk如何将get.ebextensions写入/etc/httpd/conf.d/里面的conf文件?

如何在 .ebextensions 配置中使用条件(AWS Elastic Beanstalk)

如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?