我的 CloudFormation 堆栈生成一个 ScalingGroup,其 MinSize 和 MaxSize 设置为 1。它还会创建一个针对此 ScalingGroup 的 DeploymentGroup。
- 当使用配置名称
CodeDeployDefault.OneAtATime
配置部署组时然后部署成功启动。 - 当使用配置名称
CodeDeployDefault.AllAtOnce
配置部署组时然后在创建堆栈后,codedeploy 不会执行任何操作,并且您在 EC2 上看不到任何事件或日志跟踪。仅一处提及错误代码HEALTH_CONSTRAINTS
。如果我终止该实例,则扩展组会启动一个新实例,但 CodeDeploy 不会再执行任何操作。如果我使用CodeDeployDefault.OneAtATime
手动启动部署然后就可以了。
根据我在文档中读到的内容,这种情况不应该发生
- 不应进行运行状况检查,因为部署组中不存在实例
-
CodeDeployDefault.AllAtOnce
最小健康百分比为 0。因此引发错误的原因可能是它等于 0 并且决定不继续使用健康错误代码 -
CodeDeployDefault.AllAtOnce
提到过,这应该是我的理解,它不会进行健康检查,因为从概念上讲没有意义,因为所有实例都将同时配置。
我的期望是正确的还是我做错了什么?
最佳答案
错误代码 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 一次仅将应用程序修订版部署到一个实例。 对于包含多个实例的部署组: 如果应用程序修订版部署到所有实例,则整体部署成功。此规则的异常(exception)是,如果部署到最后一个实例失败,则整体部署仍然会成功。这是因为 AWS CodeDeploy 使用 CodeDeployDefault.OneAtATime 配置一次仅允许一个实例离线。 一旦应用程序修订版无法部署到除最后一个实例之外的任何实例,整个部署就会失败。 在使用九个实例的示例中,它将一次部署到一个实例。如果前8个实例部署成功,则整体部署成功;如果前八个实例中任何一个实例的部署失败,则整个部署都会失败。 对于仅包含一个实例的部署组,只有部署到单个实例成功,整体部署才成功。
由于您的部署组仅包含一个单实例,因此如果您设置了 CodeDeployDefault.OneAtATime 并且单实例部署失败,部署仍将标记为成功。请在 AWS CodeDeploy 控制台上检查部署详细信息。
关于amazon-web-services - 带有 AllAtOnce 的 Amazon CodeDeploy 无法在具有 1 个 EC2 实例的新 CloudFormation 堆栈上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46000336/