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

时间:2019-04-26 16:05:05

标签: amazon-web-services amazon-cloudformation amazon-elastic-beanstalk amazon-elb

匹配某些规则时,我想从我的Elastic Beanstalk环境中的应用程序负载平衡器(ALB)返回fixed response

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

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

Something like this...

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

此外,除非我缺少任何内容,否则CloudFormation似乎通过环境here上的OptionSettings公开了与.ebextensions相同的选项。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

AWS Documentation

要配置应用程序负载平衡器以发送404错误网址请求而无需接触应用程序服务器,请将应用程序负载平衡器侦听器规则添加到:

  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]   模板的资源块