AWS Beanstalk 应用程序运行状况检查

Posted

技术标签:

【中文标题】AWS Beanstalk 应用程序运行状况检查【英文标题】:AWS Beanstalk Application Health Check 【发布时间】:2013-11-13 05:07:02 【问题描述】:

我们使用 Beanstalk 来部署节点应用程序。效果很好。我在 .ebextensions 目录中创建了几个配置文件,以便在我们加载应用程序时将配置信息应用到我们的应用程序。再次大多运作良好。我有一件事没有,那就是定义应用程序运行状况检查 URL。我不能让它去。关于它的一件奇怪的事情,它似乎是迄今为止我遇到的唯一一个参数,其中有空格,我想知道这一点。我已经尝试将值括在引号中,只是为了看看这是否是问题所在,但它仍然不起作用。以前有没有人这样做过,可以告诉我它是否有效,以及这是否有一些不正确的语法?正如我所说,其余的参数在 beanstalk 中设置正确,只是最后一个没有。注意 #environment# 在部署之前会被替换为 grunt 脚本。

这是配置文件:

 option_settings:
   - namespace: aws:elasticbeanstalk:application:environment
     option_name: NODE_ENV
     value: #environment#
   - namespace: aws:elasticbeanstalk:container:nodejs
     option_name: NodeVersion
     value: 0.10.10
   - namespace: aws:autoscaling:trigger
     option_name: LowerThreshold
     value: 40
   - namespace: aws:autoscaling:trigger
     option_name: MeasureName
     value: CPUUtilization
   - namespace: aws:autoscaling:trigger
     option_name: UpperThreshold
     value: 60
   - namespace: aws:autoscaling:trigger
     option_name: Unit
     value: Percent
   - namespace: aws:elasticbeanstalk:application
     option_name: Application Healthcheck URL
     value: /load_balance_test

【问题讨论】:

更新。亚马逊告诉我们,是的,那个参数不起作用。他们正在调查。 您是否能够让选项正常工作? 很久没有回去重试了。刚刚手动输入。他们没有就这个问题回复我。 我刚试过。它对我有用。只有原始问题中指定的格式对我有用。 【参考方案1】:

添加这个对我有用:

# .ebextensions/healthcheckurl.config
option_settings:
  - namespace: aws:elasticbeanstalk:application
    option_name: Application Healthcheck URL
    value: /health
  - namespace: aws:elasticbeanstalk:environment:process:default
    option_name: HealthCheckPath
    value: /health

我通过eb config 发现了第二个设置,它很好地概述了可以在.ebextensions/yet-another.config 文件中用option_settings 覆盖的环境设置。

【讨论】:

感谢您的回答。这是我在任何地方都找不到记录的第二个选项。【参考方案2】:

此属性名称中的空格很奇怪,但与选项的替代速记语法一起使用时可以使用:

option_settings:

  aws:elasticbeanstalk:application:
    Application Healthcheck URL: /

【讨论】:

【参考方案3】:

我为 EB 使用 CloudFormation,而在 CF 中,该参数的语法非常奇怪。如果该配置文件的工作方式与 CF 相同,则以下字符串应该适合您:

HTTP:80/load_balance_test

【讨论】:

这确实很奇怪。你会认为他们会遵循某种规范。【参考方案4】:

如果您使用的是Terraform,那么只要确保name 中有空格,它就可以正常工作:

  setting 
    namespace = "aws:elasticbeanstalk:application"
    name = "Application Healthcheck URL"
    value = "/api/health"
  

【讨论】:

【参考方案5】:

我刚试过。它对我有用。只有原始问题中指定的格式对我有用,即

option_settings:
  - namespace:  aws:elasticbeanstalk:application
    option_name:  Application Healthcheck URL
    value:  /api/v1/health/

【讨论】:

【参考方案6】:

您可能还想将 health_check_type 设置为 ELB 而不是默认的 EC2。 这就是我的配置方式

$ cat .ebextensions/0090_healthcheckurl.config 
Resources:
   AWSEBAutoScalingGroup:
     Type: "AWS::AutoScaling::AutoScalingGroup"
     Properties:
       HealthCheckType: "ELB"
       HealthCheckGracePeriod: "600"
option_settings:
  - namespace:  aws:elasticbeanstalk:application
    option_name:  Application Healthcheck URL
    value:  /_status

【讨论】:

以上是关于AWS Beanstalk 应用程序运行状况检查的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 AWS Elastic Beanstalk Django 运行状况检查问题

AWS Elastic Beanstalk - CodePipeline 部署不工作 - 健康状况 - 严重

AWS 负载均衡器运行状况检查:运行状况检查失败,代码如下:[301]

AWS 容器运行状况检查

DevOps on AWS之Elastic BeanStalk

ECS 服务的 AWS 网络负载均衡器运行状况检查失败