使用应用程序Elastic Load Balancer在备用端口上进行AWS Elastic Beanstalk运行状况检查

我试图使用Saved Configs自动configuration我的Elastic Beanstalk应用程序。

有没有人有一个如何让从Elastic Beanstalk创build的应用程序负载均衡器使用不同的健康检查端口的例子?

如果没有,是否有方法访问底层资源,以便我可以将自定义HealthCheckPort: 8081应用于目标组?


细节和尝试迄今:

该应用程序是一个简单的基于DropWizard的Java应用程序,它在端口8080上提供HTTP API,在端口8081上提供运行状况检查API。

我已经成功地使用Classic ELB通过以下OptionSettingsconfiguration环境:

 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 

但是,当我更新configuration以使用应用程序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是types为AWS::ElasticLoadBalancing::LoadBalancer ,它是一个经典的负载平衡器,但是我需要进行的修改是在typesAWS::ElasticLoadBalancingV2::TargetGroup为应用程序负载平衡器。

使用Terraform或CloudFormation来pipe理所需的负载均衡器,EC2实例和其他资源。 尽pipe比ElasticBeanstalk需要更多的工作,但是可以精确地控制资源的每个方面。 .ebextensions软件安装和实例configuration可以用AWS::CloudFormation::Init和AWS的cfn-init帮助程序脚本cfn-init

我也会build议对stream层生成CloudFormation模板。 该语法针对CloudFormation的资源语法映射1对1,但会为拼写错误的属性名称或无效的属性types生成错误。 结合boto ,可以使用简单的python命令行实用程序完全自动化我的应用程序部署生命周期。