首页 > 解决方案 > 通过 cloudformation 部署的 Elastic beanstalk 不会更新健康检查目标

问题描述

我有一个通过 CloudFormation 部署的 Elastic Beanstalk 环境。

目前它是 LoadBalancer 后面的单个 Web 服务器,但将来会通过 Auto Scaling 组扩展。

这是我的模板中的相关片段

"BeanstalkEnvironment": {
    "Type": "AWS::ElasticBeanstalk::Environment",
        "Properties": {
        ...
            "OptionSettings": [
                ...
                {
                    "Namespace": "aws:elasticbeanstalk:application",
                    "OptionName": "Application Healthcheck URL",
                    "Value": "/health"
                },
                {
                    "Namespace": "aws:elasticbeanstalk:environment",
                    "OptionName": "EnvironmentType",
                    "Value": "LoadBalanced"
                },
                {
                    "Namespace": "aws:elasticbeanstalk:environment",
                    "OptionName": "LoadBalancerType",
                    "Value": "application"
                },
                {
                    "Namespace": "aws:elbv2:listener:default",
                    "OptionName": "ListenerEnabled",
                    "Value": "true"
                },
                {
                    "Namespace": "aws:elbv2:listener:443",
                    "OptionName": "ListenerEnabled",
                    "Value": "true"
                },
                {
                    "Namespace": "aws:elbv2:listener:443",
                    "OptionName": "Protocol",
                    "Value": "HTTPS"
                },
                {
                    "Namespace": "aws:elbv2:listener:443",
                    "OptionName": "SSLCertificateArns",
                    "Value": {"Ref": "Certificate"}
                },
                {
                    "Namespace": "aws:autoscaling:asg",
                    "OptionName": "MinSize",
                    "Value": "1"
                },
                {
                    "Namespace": "aws:autoscaling:asg",
                    "OptionName": "MaxSize",
                    "Value": "1"
                }
                ...
            ],
            "SolutionStackName": "64bit Amazon Linux 2 v3.0.3 running PHP 7.4",
        ...
        }
    }
}

负载均衡器目标组仍/用作运行状况检查的路径。由于我的 Web 服务器重定向/运行状况检查失败,因为它没有获得所需的 200 状态代码。
如果我手动将目标路径更改为,/health则运行状况检查将按预期工作。

我缺少什么配置才能将运行状况检查路径设置为环境的 CloudFormation 模板的一部分?

标签: amazon-elastic-beanstalk

解决方案


我认为此设置aws:elasticbeanstalk:application适用于经典负载均衡器 (CLB)。

但是,由于您使用的是ALB(应用程序负载均衡器),因此您应该使用aws:elasticbeanstalk:environment:process:default

此选项允许您设置(除其他外):

  • HealthCheckPath:将 HTTP 请求发送到的路径以进行健康检查。
  • MatcherHTTPCode:以逗号分隔的HTTP 代码列表,指示实例运行状况良好。

推荐阅读