amazon-web-services - 如何使用 .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?
解决方案
ElasticBeanstalk 允许您使用 .ebextensions 配置文件中的 Resources 标签来使用 CloudFormation。
EB 使用 CloudFormation 部署您的应用程序。Resources 标签允许您添加到此 CloudFormation 模板。它还允许您参考 EB 模板的输出资源。
要将应用程序负载均衡器配置为在不接触应用程序服务器的情况下发送 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,数字越小获胜。此片段中的侦听器处理默认 EB 侦听器规则之前的所有请求(它将不匹配的请求转发到您的目标组)
- AWS 文档中注明的可用于 Ref/Fn::GetAtt 标签的逻辑 ID 不完整。如果您收到此类错误,请在控制台中打开 CloudFormation,查看与您的 EB 部署对应的资源选项卡,并查看可用的逻辑 ID。
服务:AmazonCloudFormation,消息:模板格式错误:模板的资源块中未解决的资源依赖项 [AWSEBV2LoadBalancerListener]
推荐阅读
- hibernate - ModelMapper 在子表双向 OneToMany 中设置父 id
- uibutton - 尝试在点击时更改按钮背景图像时出现错误
- google-analytics - 如何从 GA 销售网站视图中排除网络应用流量
- node.js - 如何在其他一些 js 文件中使用导出对象
- excel - 如何在不设置引用的情况下从另一个 Office 应用程序打开 Excel?
- reactjs - 无法在地图上渲染路径
- rest - 如何使用 Trello REST API 获取当前用户?
- django - get_context_data 破破 django listview
- python - python / geopandas中跨空间(或空间平滑)的密度
- java - 现有应用程序从 Cassandra DB 迁移到 Cosmos DB