0

我的CloudFormation堆栈会生成一个将MinSize和MaxSize设置为1的ScalingGroup。它还会创建一个以该ScalingGroup为目标的DeploymentGroup。带有AllAtOnce的Amazon CodeDeploy无法在具有1个EC2实例的新CloudFormation堆栈上执行

  • 如果部署组配置了配置名称CodeDeployDefault.OneAtATime,则部署将成功启动。
  • 当部署组配置了配置名称CodeDeployDefault.AllAtOnce,然后在创建堆栈时,codedeploy不执行任何操作,并且在EC2上看不到任何事件或日志跟踪。只有一处提到错误代码HEALTH_CONSTRAINTS。如果我终止实例,那么扩展组将启动一个新实例,但CodeDeploy不会再执行任何操作。如果我手动开始部署CodeDeployDefault.OneAtATime然后它的工作。

从我的文档中读过,这不应该发生

  • 不应该有健康检查,因为没有实例部署组
  • CodeDeployDefault.AllAtOnce有一个最低限度的卫生百分比存在0.因此,可能是提高错误的原因是它等于0,它决定不继续提到健康错误代码
  • CodeDeployDefault.AllAtOnce提及,这应该是我的理解,它不会做一个健康因为在概念上检查没有意义,因为所有实例都将在同一时间进行配置。

我的期望还是正确,还是我做错了什么?

+0

经过几次迭代后,我发现这个错误并不总是会发生。 6次使用完全相同的CloudFormation模板,3次出错,代码为'HEALTH_CONSTRAINTS'。 –

回答

0

错误代码HEALTH_CONSTRAINTS意味着CodeDeploy部署失败,并且不满足配置的健康主机比率。您可能想要访问AWS CodeDeploy控制台并单击在CloudFormation运行过程中创建的部署,并检查部署失败的原因。 CodeDeployDefault.OneAtATime和CodeDeployDefault.AllAtOnce之间的不同可以在这里找到:http://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html

CodeDeployDefault.AllAtOnce尝试一次部署应用程序的修订,以尽可能多的情况下,尽可能地。如果将应用程序修订部署到一个或多个实例,则整体部署的状态将显示为“成功”。如果应用程序修订未部署到任何实例,则整体部署的状态将显示为“失败”。使用九个实例的示例,CodeDeployDefault.AllAtOnce将尝试一次部署到所有九个实例。如果部署到单个实例成功,则整体部署将会成功;它只会在所有九个实例的部署失败时才会失败。

CodeDeployDefault.OneAtatime一次只将应用程序修订部署到一个实例。 对于包含多个实例的部署组: 如果将应用程序修订部署到所有实例,则整体部署会成功。此规则的例外是,如果部署到最后一个实例失败,则整体部署仍然成功。这是因为AWS CodeDeploy一次只允许一个实例通过CodeDeployDefault.OneAtATime配置进行脱机。 只要应用程序修订未能部署到除最后一个实例以外的任何应用程序,整个部署就会失败。 在使用九个实例的示例中,它将一次部署到一个实例。如果前8个实例的部署成功,则整体部署会成功;如果部署到前八个实例中的任何一个失败,则整体部署将失败。 对于只包含一个实例的部署组,仅当部署到单个实例成功时,整体部署才会成功。

由于您的部署组仅包含一个单一实例,因此如果您设置了CodeDeployDefault.OneAtATime并且单个实例部署失败,则部署仍将标记为成功。请检查AWS CodeDeploy控制台上的部署详细信息。

+0

我也读过文档。我的理解是,OneAtATime和AllAtOnce通过最低健康实例进行控制,如果部署应该开始。在每个ec2上执行代理之前,它都是漫画。如果有新的cfn堆栈,则有0个健康保险,但这种情况不在文档中说明。我注意到有一个保险和AllAtOnce配置的扫描组在创建堆栈时没有任何其他解释,因此不一致。这与文档相矛盾,加上它的不可预知性指向了一个问题。 –

+0

我再读过一遍,我需要更新我的评论。在你提供了一个链接的文章中,它描述的确是部署的结果。但是当我在寻找一个答案,为什么它从不开始,立即停止出现错误,我读[this](http://docs.aws.amazon.com/codedeploy/latest/userguide/instances-health.html) 。在此链接中,它描述了由配置名称派生的最小健康实例决定应该启动执行的系统。 –

相关问题