无法使用CodeDeploy部署代码



我正试图使用CodeDeploy部署我的应用程序,但每次遇到Deployment Failed消息时,都会附上附加信息,内容是:No hosts succeeded. (Error code: HEALTH_CONSTRAINTS)

我不明白这是什么原因。以下是按顺序执行的步骤:

  • 我启动了一个IAM角色的实例,该角色附加了两个策略AmazonEC2FullAccessAmazonS3FullAccess。后来的政策建议如下:

     {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "s3:*",
          "Resource": "*"
        }
      ]
    }
    
  • 在从aws控制台启动实例时,我在高级部分指定了以下内容:(作为文本选择)

    apt-get -y update
    apt-get -y install awscli
    apt-get -y install ruby2.0
    cd /home/ubuntu
    aws s3 cp s3://aws-codedeploy-us-west-2/latest/install . --region us-west-2
    chmod +x ./install
    ./install auto
    
  • 为了推送代码,我写道:

    aws deploy push --application-name CDTestApp --s3-location s3://codedeploy-test-bucket-pc/PC.zip --source PulsarCloud/
    
  • 为了部署,我写道:

    aws deploy create-deployment --application-name CDTestApp --s3-location bucket=codedeploy-test-bucket-pc,key=PC.zip,bundleType
    zip,eTag="834db424710b1819b753444460dd361d" --deployment-group-name CDGroup 
    --deployment-config-name CodeDeployDefault.OneAtATime  --description 
    MyTestApplication
    
  • 我得到了deployment id作为回报。

  • 过了一段时间,部署就失败了!

  • appspec.yml:

    version: 0.0
    os: linux 
    files:
    - source: /sdk/js/index.html
      destination: /var/www/html
    hooks:
     BeforeInstall:
      - location: /installerassets/installer.sh
        timeout: 6000
        runas: root
    

这可能是什么原因?

当我登录机器并输入:

sudo service codedeploy-agent status

我得到了:codedeploy-agent: unrecognized service

但后来我尝试使用这里的步骤重新安装它。服务正在运行,但无法部署代码。

需要指出的几点:

  • (只是为了检查理智),发布的角色只有s3,但没有ec2
  • codedeploy.amazonaws.com是否包含在角色的信任关系中
  • 要安装代理,请使用sudo/应该使用install auto

无法识别codedeploy代理意味着未安装该代理。这可能是由于没有使用sudo。

为了解释您看到的错误代码:HEALTH_CONSTRAINT被破坏意味着使用默认的逐个部署配置。当第一个实例的部署失败时,将违反最小健康实例限制(即1),因此部署将失败。

此外,在确认安装了codedeploy代理后,请确保
1.EC2实例有权从推送修订的s3 bucket中取数据
2.Codedeploy服务角色还附加了以下策略:

     {
       "Version": "2012-10-17",
       "Statement": [
         {
           "Effect": "Allow",
           "Action": [
             "ec2:DescribeInstances",
             "ec2:DescribeInstanceStatus",
             "tag:GetTags",
             "tag:GetResources"
           ],
           "Resource": "*"
         }
       ]
     }

3.正确标记EC2实例,并在codedeploy 中提供相同的键值对

相关内容

  • 没有找到相关文章

最新更新