我正试图使用CodeDeploy部署我的应用程序,但每次遇到Deployment Failed
消息时,都会附上附加信息,内容是:No hosts succeeded. (Error code: HEALTH_CONSTRAINTS)
。
我不明白这是什么原因。以下是按顺序执行的步骤:
-
我启动了一个IAM角色的实例,该角色附加了两个策略
AmazonEC2FullAccess
和AmazonS3FullAccess
。后来的政策建议如下:{ "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 中提供相同的键值对