我正在尝试使用以下方法自动配置我的 Elastic Beanstalk 应用程序已保存的配置。
有没有人有关于如何让从 Elastic Beanstalk 创建的应用程序负载均衡器使用不同的健康检查端口的示例?
如果没有,有没有办法访问底层资源,以便我可以将自定义应用HealthCheckPort: 8081
到目标组?
迄今为止的详细信息和尝试:
该应用程序是一个简单的基于 DropWizard 的 Java 应用程序,它在端口 8080 上提供 HTTP API,并在端口 8081 上提供健康检查 API。
我已通过以下 OptionSettings 成功使用 Classic ELB 配置环境:
OptionSettings:
aws:elasticbeanstalk:environment:
EnvironmentType: LoadBalanced
LoadBalancerType: classic
aws:elasticbeanstalk:application:
Application Healthcheck URL: HTTP:8081/healthcheck
aws:elasticbeanstalk:environment:process:default:
MatcherHTTPCode: '200'
Port: '8080'
Protocol: HTTP
aws:elb:healthcheck:
HealthyThreshold: '3'
Interval: '10'
Timeout: '5'
UnhealthyThreshold: '5'
aws:elb:listener:80:
ListenerProtocol: HTTP
InstancePort: '8080'
InstanceProtocol: HTTP
ListenerEnabled: true
aws:elb:loadbalancer:
CrossZone: true
但是,当我更新配置以使用应用程序 ELB 时,与目标组关联的健康检查设置为应用程序端口 (8080),而不是健康检查端口 (8081)。这会导致应用程序启动时进入失败状态,只能通过手动更改目标组健康检查端口来纠正。
OptionSettings:
aws:elasticbeanstalk:environment:
EnvironmentType: LoadBalanced
LoadBalancerType: application
aws:elasticbeanstalk:application:
Application Healthcheck URL: HTTP:8081/healthcheck
aws:elasticbeanstalk:environment:process:default:
MatcherHTTPCode: '200'
Port: '8080'
Protocol: HTTP
aws:elbv2:listener:default:
DefaultProcess: default
ListenerEnabled: true
Protocol: HTTP
aws:elbv2:loadbalancer:
AccessLogsS3Enabled: false
IdleTimeout: '60'
我在 AWS Elastic Beanstalk 命令选项文档中找不到任何其他相关字段。
我也想过自定义资源修改但引用的唯一 ELB 是经典负载均衡器AWSEBLoadBalancer
类型AWS::ElasticLoadBalancing::LoadBalancer
,但我需要进行的修改是AWS::ElasticLoadBalancingV2::TargetGroup
应用程序负载均衡器类型。
答案1
使用 Terraform 或 CloudFormation 来管理所需的负载均衡器、EC2 实例和其他资源。虽然它比 ElasticBeanstalk 需要更多的前期工作,但它可以精确控制资源的各个方面。.ebextensions
可以使用AWS::CloudFormation::Init
AWS 的 cfn-init
帮助脚本来替换软件安装和实例配置。
我也会推荐对流层用于生成 CloudFormation 模板。语法与 CloudFormation 的资源语法一一对应,但会因属性名称拼写错误或属性类型无效而产生错误。结合使用,我boto
可以使用简单的 Python 命令行实用程序完全自动化我的应用程序部署生命周期。