【问题标题】:ERROR: The overall deployment failed because too many individual instances failed deployment错误:整体部署失败,因为太多单个实例部署失败
【发布时间】:2016-11-06 20:11:45
【问题描述】:

我正在尝试使用 CircleCI -> S3 -> CodeDeploy -> EC2 进行部署。 我能够从 CircleCI 将部署图像上传到 S3,但无法将 S3 部署到 EC2 实例。这是错误。

整体部署失败,因为单个实例太多 部署失败,可用的健康实例太少 部署,或者您的部署组中的某些实例是 遇到问题。 (错误代码:HEALTH_CONSTRAINTS)

错误是由 CodeDeploy 提供的。我不知道为什么以及如何。 如果您能给我一些建议,我将不胜感激。

【问题讨论】:

    标签: amazon-s3 amazon-ec2 circleci aws-code-deploy


    【解决方案1】:

    如果您在 Ubuntu 上运行,可能有很多原因,这里有一个可以验证的清单

    检查代码部署代理是否安装在您的 EC2 实例上。请参考本文档安装代码部署代理。 https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

    $ sudo service codedeploy-agent status
    

    如果您运行的是 Ubuntu 20.x 版并遇到此错误

    ./install:22:in block in method_missing': undefined method path' 为 # (NoMethodError)

    尝试通过此脚本运行安装文件

    sudo ./install auto > /tmp/logfile
    
    1. 检查您是否拥有 EC2 实例代码部署角色 -> 创建代码部署角色并将其分配给实例 https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-create-service-role.html

    如果您在启动后分配 EC2 角色,请重新启动服务器。

    1. 根据最佳答案检查您的 appsec.yml 文件位置,尽量避免其中出现任何长时间超时。

    2. 登录您的实例检查您的错误日志

    $ tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log

    【讨论】:

      【解决方案2】:

      您应该能够通过深入研究部署实例的详细信息来找出导致各个实例失败的原因: http://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-view-instance-details.html

      这些应包含有关您的应用程序无法部署的原因的更详细信息。

      【讨论】:

      • 查看 /var/log/aws/codedeploy-agent/codedeploy-agent.log 后,我注意到 IAM 服务角色存在一些错误。但它似乎配置正确。 CodeDeploy Full Access 就在那里。有什么想法吗?
      • 对于分配给您的 EC2 实例的角色,您需要对其进行配置以获得从 S3 提取的权限:docs.aws.amazon.com/codedeploy/latest/userguide/…。它不需要 CodeDeploy 完全访问权限。
      • 谢谢。最后它起作用了。这是 YAML 格式的问题。我从 CodeDeploy 配置中检查了一些日志。并与您的文档一起修改。
      • @NoriakiTakamizawa 你能分享你的解决方案吗?
      • @Adnan 抱歉。我在上面写了我的解决方案。希望对您有所帮助。
      【解决方案3】:

      确保 CodeDeploy Host Agent Service 正在您的目标 EC2 实例中运行。

      【讨论】:

        【解决方案4】:

        从失败的部署中,我可以看到所有生命周期事件都被跳过。实例 i-0bcc36e73851297f2 当前处于已停止状态,但我可以看到 IAM 实例配置文件丢失。您的 Amazon EC2 实例需要访问 Amazon S3 存储桶或 GitHub 存储库的权限,这些存储库将由 AWS CodeDeploy 部署的应用程序存储在这些存储库中。要启动与 AWS CodeDeploy 兼容的 Amazon EC2 实例,您必须创建一个额外的 IAM 角色,一个实例配置文件。 1

        对于此类故障,您始终可以从失败部署的常规故障排除清单2 开始,然后查找有关部署问题和实例问题的故障排除指南3

        1[http://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-create-iam-instance-profile.html]1

        2 [http://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting-general.html]2

        3 [http://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html]3

        【讨论】:

          【解决方案5】:

          此错误通常是由于appSpec.ymlappSpec.json 文件的配置问题(取决于您使用的格式)。

          “如果你有任何 Hook 我建议你删除它们,检查它是否有效,然后你可以一一添加(Hooks),这样你就可以识别错误”

          appspec.yml 文件应位于项目的根目录:

             │-- appspec.yml
             │-- index.html
             └-- scripts
                 │-- install_dependencies
                 │-- start_server
                 └-- stop_server
          

          scripts文件夹中,你必须根据Hook

          放置你想要执行的进程

          这是appspec.yml 文件的示例

          version: 0.0
          os: linux
          files:
            - source: /index.html
              destination: /var/www/html/
          hooks:
            BeforeInstall:
              - location: scripts/install_dependencies
                timeout: 300
                runas: root
              - location: scripts/start_server
                timeout: 300
                runas: root
            ApplicationStop:
              - location: scripts/stop_server
                timeout: 300
                runas: root
          

          希望能帮到你????

          【讨论】:

            【解决方案6】:

            检查代码部署代理的状态。在我的情况下,代理没有启动。

            【讨论】:

            • 以前的答案的重复。
            【解决方案7】:

            “CodeDeploy 代理未在修订版相对路径‘appspec.yml’的解压修订版目录中找到 AppSpec 文件”

            请将您的 appspec.yml 文件放在您的根文件夹中以解决此错误

            访问您的后脚本和前脚本

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-01-30
              • 2021-01-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-11
              • 1970-01-01
              相关资源
              最近更新 更多