使用应用程序弹性负载均衡器对备用端口进行 AWS Elastic Beanstalk 运行状况检查

J M*_*ger 5 healthcheck amazon-web-services elastic-beanstalk

我正在尝试使用Saved Configs自动配置我的 Elastic Beanstalk 应用程序。

有谁有如何让从 Elastic Beanstalk 创建的应用程序负载均衡器使用不同的运行状况检查端口的示例吗?

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


迄今为止的详细信息和尝试:

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

我已经通过以下 OptionSettings 使用经典 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
Run Code Online (Sandbox Code Playgroud)

但是,当我更新配置以使用应用程序 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'
Run Code Online (Sandbox Code Playgroud)

我在 AWS Elastic Beanstalk 命令选项文档中找不到任何其他相关字段。

我也考虑过进行自定义资源修改,但唯一引用的 ELB 类型是经典负载均衡器AWSEBLoadBalancer类型AWS::ElasticLoadBalancing::LoadBalancer,但我需要进行的修改是AWS::ElasticLoadBalancingV2::TargetGroup应用程序负载均衡器类型。

J M*_*ger 0

使用 Terraform 或 CloudFormation 管理所需的负载均衡器、EC2 实例和其他资源。尽管它比 ElasticBeanstalk 需要更多的前期工作,但可以精确控制资源的各个方面。软件安装和实例配置.ebextensions可以替换为AWS::CloudFormation::InitAWS 的 cfn-init帮助程序脚本。

我还将推荐使用对流层来生成 CloudFormation 模板。该语法与 CloudFormation 的资源语法进行一对一映射,但会因拼写错误的属性名称或无效的属性类型而生成错误。结合boto使用简单的 python 命令行实用程序,可以完全自动化我的应用程序部署生命周期。