【问题标题】:AWS TargetGroup/LoadBalancer checks vs CodeDeploy deployment group statusAWS TargetGroup/LoadBalancer 检查与 CodeDeploy 部署组状态
【发布时间】:2018-02-10 22:28:45
【问题描述】:

让我们假设以下情况。

TargetGroup 正在检查 http 端口 80 以验证 EC2 主机是否正常。

CodeDeploy 代理执行了这样的序列

  1. ApplicationStop SUCCESS(停止的网络引擎。无法为端口 80 提供服务)
  2. 安装成功之前
  3. 安装成功后
  4. ApplicationStart SUCCESS(已启动 Web 引擎。可服务于端口 80)
  5. ValidateService FAILED(与端口 80 的可用性无关)

使用此序列,CodeDeploy 部署被标记为 FAILED。目标群体在做什么?由于它的健康检查会成功,它会认为 EC2 主机是健康的吗?但 CodeDeploy 并非如此。

我不清楚 TargetGroup 运行状况检查如何与每个 EC2 上的 CodeDeploy 部署状态重叠。

由于文档提到 CodeDeploy 与负载均衡器协作以不路由流量,因此我的问题也扩展到负载均衡器。

任何见解将不胜感激。

经过与@tangerini 的讨论

AppSpec 'hooks' Section 中提到,例如允许/阻止流量挂钩可用。但也在同一主题上提到有人只能使用它们 - 经典的负载均衡器 - 蓝/绿部署。

我正在使用 ApplicationLoadBalancer 和就地部署。但据我观察,流量在 ValidateService 挂钩期间到达 ec2 服务器。

【问题讨论】:

    标签: amazon-web-services aws-code-deploy


    【解决方案1】:

    CodeDeploy 的部署状态仅取决于在您的实例上执行的生命周期事件挂钩的成功或失败,不一定遵循 TargetGroup 运行状况检查。在您的示例中,ApplicationStart 步骤成功完成,这将导致它开始成功进行 TargetGroup 健康检查,即使 ValidateService 步骤失败从而导致部署失败。

    理想情况下,您希望 TargetGroup 运行状况检查状态每次都与 CodeDeploy ValidateService 结果匹配。如果 ValidateService 步骤失败,则意味着您的服务无法正常运行,应该无法通过运行状况检查。但这取决于您在 ValidateService 步骤中所做的验证。

    【讨论】:

    • 感谢您的回答。我理解两个验证点之间对齐的概念。但是 CodeDeploy 钩子 (docs.aws.amazon.com/codedeploy/latest/userguide/…) 的文档提到了允许/禁用流量的概念,这意味着与 LoadBalancer 或 TargetGroup 的某种连接。允许流量步骤发生在 ValidateService 挂钩之后。我看到的内容与您的解释相符,但文档让我感到困惑。
    • 我在回答您的问题时假设您没有允许/禁用流量挂钩,因为您没有在示例中指定它们。允许/禁用步骤将分别将您的实例绑定和取消绑定到目标组,因此如果您的 ValidateService 失败并且 AllowTraffic 被跳过,甚至不会执行目标组健康检查,因为失败的实例已绑定到目标组。
    • 我没有,因为据我了解,它们是系统挂钩,您无法实现它们。但是你们两个答案指出我可能忽略了一些东西,所以我再看看,我很感激。关于我可能忽略的任何提示都会很棒。
    • AppSpec 'hooks' Section 中提到例如Allow/BlockTrafic 仅适用于经典负载均衡器或蓝/绿部署。我正在使用 ApplicationLoadBalancer 和就地部署。我会尝试更新原来的问题
    猜你喜欢
    • 2018-04-27
    • 2018-12-13
    • 1970-01-01
    • 2020-05-19
    • 2020-07-23
    • 2015-12-12
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多