如何使用 .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 扩展?