AWS 代码部署部署失败

Posted

技术标签:

【中文标题】AWS 代码部署部署失败【英文标题】:AWS code deploy Deployment Failed 【发布时间】:2016-07-10 07:05:30 【问题描述】:

我有一个弹性负载均衡器,上面运行了 2 个实例。我想将一个应用程序部署到这个弹性伸缩组。我听说是编码和尝试。我对此没有什么疑问。当我创建一个新部署时,我总是会重新连接到 GitHub。我无法解决这个问题。其次,当我尝试部署时,我收到此错误“部署无法继续:约束‘默认’需要至少 1 个健康主机才能继续。剩余的主机被跳过。”。 所以我检查了我的弹性负载平衡,我发现我有 2 个所需实例和 2 个最小健康实例的配置。所以我尝试将最小健康实例修改为 1,它会自动终止一个实例。我不知道我在哪里做错了。请帮我解决这个问题。

【问题讨论】:

我无法解决这个问题,可能是一些脚本问题。,所以我尝试了 elastik beanstalk,它按预期工作。而且配置也很简单 【参考方案1】:

对于第一个问题,如果您尝试从 Github 存储库进行部署,则在开始部署之前,您需要使用 Github 完成身份验证过程。

对于第二个问题,您可以通过在部署组中添加标签来指定要部署到的实例。确保正确标记您的实例,以便 CodeDeploy 可以在部署期间找到实例。

【讨论】:

面临同样的问题@ponraj【参考方案2】:

我认为您使用 CodeDeployDefault.OneAtATime (最低健康主机:99%)

100个Instances正在运行,你可以成功。

如何使用 CodeDeployDefault.AllAtOnce(MinimumHealthyHosts:0%) 要么 CodeDeployDefault.HalfAtATime(MinimumHealthyHosts:50%)

我成功了 AllAtOnce 和 HalfAtATime。 ※使用Auto Scaling Group,1instance在AZ1a,1instance在AZ1c。

【讨论】:

【参考方案3】:

这件事也让我很头疼。这是我修复它的方式。 发生这种情况是因为 codeDeploy 通过默认在端口 80 上点击实例来检查 ec2 实例的运行状况。在部署之前,您需要在实例上运行以下 bash 脚本并检查脚本是否有效。必须启动 httpd 服务。重启实例。

    #!/bin/bash
    sudo su
    yum update -y
    yum install httpd -y
    yum install ruby
    yum install aws-cli
    cd ~
    aws s3 cp s3://aws-codedeploy-us-east-1/latest/install . --region us-east-1
    chmod +x ./install
    ./install
    echo 'hello world' > /var/www/html/index.html
    hostname >> /var/www/html/index.html
    chkconfig httpd on
    service httpd start

【讨论】:

【参考方案4】:

确保您拥有现有的健康主机。如果不是,则暂时将部署配置类型更改为 AllAtOnce,因为这不需要在部署之前运行健康的主机。部署完成后,您可以将其更改回原来的设置。

还要检查 CodeDeploy 应用程序配置中的 Auto Scaling Group 目标是否有效。蓝绿部署将复制并替换 Auto Scaling 组,因此请确保应用程序配置开始使用有效的源 Auto Scaling 组。

【讨论】:

以上是关于AWS 代码部署部署失败的主要内容,如果未能解决你的问题,请参考以下文章

将应用程序部署到 AWS Elastic Beanstalk 环境

在 AWS opsworks 部署应用程序。为啥随机部署失败?

CodeDeploy allowTraffic失败,但我的代码仍然部署在实例上

AWS CodePipeline ElasticBeanstalk 部署失败

.net 中的 AWS BeanStalk 部署失败?

由于 aws-exports,AWS 放大部署失败