问题描述
在this tutorial之后设置CodeDeploy时,在Setup CodePipeline的最后一步下
如果我单击失败下的详细信息
如果我单击链接到执行详细信息
部署失败,因为找不到您的实例 部署组。检查您的部署组设置以确保 您的Amazon EC2实例或Auto Scaling组的标签 正确标识要部署到的实例,然后尝试 再次。
这很可能是由于位置问题所致-有时在弗吉尼亚北部和伦敦使用过。
- IAM-不需要选择区域。
- S3-不需要区域选择。
- LightSail实例-伦敦,A区(eu-west-2a)
- CodeDeploy应用程序-弗吉尼亚北部(us-east-1)
- CodeDeploy管道-伦敦,A区(eu-west-2a)
因此,我去了CodeDeploy,删除了北弗吉尼亚州的应用程序,并在伦敦的部署组创建了一个应用程序。然后,在伦敦在那里创建一条新管道。
这次部署也失败了,但是原因不同
整体部署失败,因为单个实例过多 部署失败,可用的健康实例太少 部署,或部署组中的某些实例是 遇到问题。
为了解决这个问题,我删除了两个管道并创建了一个新管道。由于我不得不更改角色,因此我使用了AWSCodePipelineserviceRole-eu-west-2-CodeDeployLightsailDemoPipeline
,但这在创建管道的那一刻给我带来了麻烦
无法创建角色 AWSCodePipelineserviceRole-eu-west-2-CodeDeployLightsailDemoPipeline
因此,我将其更改为AWSCodePipelineserviceRole-eu-west-2-CodeDeployLightsailDemoP
。然后,这使我陷入另一个问题
称为 AWSCodePipelineserviceRole-eu-west-2-CodeDeployLightsailDemoPipeline 已经存在。不允许重复的名称。
因此,我回过头来,将管道名称更改为CodeDeployLightsailDemoPi
,并将角色名称更改为AWSCodePipelineserviceRole-eu-west-2-CodeDeployLightsailDemoPi
。
这使我陷入困境
整体部署失败,因为单个实例过多 部署失败,可用的健康实例太少 部署,或部署组中的某些实例是 遇到问题。
我决定等待30分钟,并创建一个新管道,以其命名CodeDeployLightsailPipeline
和角色名称AWSCodePipelineserviceRole-eu-west-2-CodeDeployLightsailPipelin
,但是发生了相同的问题。
这是“部署ID”>“查看事件”中显示的信息
根据Marcin,我应该已经找到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
其中提到了destination: /var/www/html/
,但是在实例中没有这样的/var/www/html
路径
所以,我在其中创建了这两个文件夹
并重新启动部署
但是它像以前一样失败了。
如何使部署状态成功?
编辑
根据the documentation,此错误代码显示 HEALTH_CONSTRAINTS 。所以,我现在正在阅读:
解决方法
基于评论:
为了尝试重现问题,我在自己的具有CodeDeploy的Amazon Linux 2实例上部署了OP使用的应用程序CodeDeployGitHubDemo。我可以验证,CodeDeployGitHubDemo
及其appspec.yml
文件是正确的并且可以按预期工作。
由于OP使用的是CodePipline(CP),因此建议退后一步并仅专注于使用CodeDeploy(CD)进行部署,而不会增加使用CP + CD组合的复杂性。这允许仅关注CD问题,并且应简化查找问题的根本原因。独立CD部署完成后,下一步就是将CP纳入部署过程,确切了解CD应该如何设置才能工作。
更具体地说,这就是完成的事情
-
在https://console.aws.amazon.com/iam/的IAM控制台中
1.1。删除了一个角色(CodeDeployServiceRole)。
1.2。创建了服务角色。
-
在https://console.aws.amazon.com/s3/的S3控制台中
2.1。清空并删除一个存储桶(tiagocodedeploylightsailbucket)。
2.2。在欧盟伦敦(eu-west-2)中创建了一个新存储桶。
-
返回到https://console.aws.amazon.com/iam/的IAM控制台
3.1。删除了一个策略(CodeDeployS3BucketPolicy)。
3.2。创建了新政策。
-
留在https://console.aws.amazon.com/iam/的IAM控制台中
4.1。删除一个用户(LightSailCodeDeployUser)
4.2。创建了一个新用户(请注意,该用户需要使用其他名称,否则将获得this problem)。
-
导航至https://lightsail.aws.amazon.com/上的Lightsail主页
5.1。删除以前的实例(codedeploy)。
5.2。使用Amazon Linux(Amazon_Linux_1)创建一个新实例(请注意,如果使用Amazon Linux 2,则将达到this problem)
使用脚本
mkdir /etc/codedeploy-agent/
mkdir /etc/codedeploy-agent/conf
cat <<EOT >> /etc/codedeploy-agent/conf/codedeploy.onpremises.yml
---
aws_access_key_id: ACCESS_KEY
aws_secret_access_key: SECRET_KEY
iam_user_arn: arn:aws:iam::525221857828:user/GeneralUser
region: eu-west-2
EOT
wget https://aws-codedeploy-us-west-2.s3.us-west-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
-
在两个实例中都使用
-
SSH
6.1。验证codedeploy-agent是否正在运行(
sudo service codedeploy-agent status
) -
在具有本地设备上的AWS CLI的PowerShell中
7.1。
运行
aws deploy register-on-premises-instance --instance-name Amazon_Linux_1 --iam-user-arn arn:aws:iam::525221857828:user/GeneralUser --region eu-west-2
然后
aws deploy add-tags-to-on-premises-instances --instance-names Amazon_Linux_1 --tags Key=Name,Value=CodeDeployLightsailDemo --region eu-west-2
然后
aws deploy list-on-premises-instances --region eu-west-2
最后,得到了输出
{
"instanceNames": [
"Amazon_Linux_1","codedeploy"
]
}
-
在https://eu-west-2.console.aws.amazon.com/codesuite/codedeploy/start?region=eu-west-2#上导航到CodeDeploy控制台
8.1。删除应用程序(CodeDeployLightsailDemo)。
8.2。使用新的部署组(CodeDeployLightsailDemoDeploymentGroup)创建一个新应用程序。
-
在https://eu-west-2.console.aws.amazon.com/codesuite/codepipeline/start?region=eu-west-2上浏览至CodePipeline控制台
9.1。删除管道(CodeDeployLightsailDemoPipeline)。
9.2。使用“新服务角色”创建新管道。