使用 Application Elastic Load Balancer 對備用埠進行 AWS Elastic Beanstalk 執行狀況檢查
我正在嘗試使用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::Init
AWS 的cfn-init
幫助腳本替換軟體安裝和實例配置。我還將推薦對流層來生成 CloudFormation 模板。該語法與 CloudFormation 的資源語法一對一地映射,但會為拼寫錯誤的屬性名稱或無效的屬性類型生成錯誤。結合使用
boto
簡單的 python 命令行實用程序可以完全自動化我的應用程序部署生命週期。