Amazon-Web-Services

使用 Application Elastic Load Balancer 對備用埠進行 AWS Elastic Beanstalk 執行狀況檢查

  • May 30, 2017

我正在嘗試使用Saved Configs自動配置我的 Elastic Beanstalk 應用程序。

有沒有人舉例說明如何讓從 Elastic Beanstalk 創建的應用程序負載均衡器使用不同的執行狀況檢查埠?

如果沒有,有沒有辦法訪問基礎資源,以便我可以將自定義應用HealthCheckPort: 8081到目標組?


迄今為止的詳細資訊和嘗試:

該應用程序是一個簡單的基於 DropWizard 的 Java 應用程序,它在埠 8080 上提供 HTTP API,在埠 8081 上提供健康檢查 API。

我已經通過以下選項設置成功地使用經典 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應用程序負載均衡器的類型。

使用 Terraform 或 CloudFormation 管理所需的負載均衡器、EC2 實例和其他資源。儘管它比 ElasticBeanstalk 需要更多的前期工作,但可以精確控制資源的各個方面。.ebextensions可以使用AWS::CloudFormation::InitAWS 的 cfn-init幫助腳本替換軟體安裝和實例配置。

我還將推薦對流層來生成 CloudFormation 模板。該語法與 CloudFormation 的資源語法一對一地映射,但會為拼寫錯誤的屬性名稱或無效的屬性類型生成錯誤。結合使用boto簡單的 python 命令行實用程序可以完全自動化我的應用程序部署生命週期。

引用自:https://serverfault.com/questions/837088