AWS CodeDeploy在BeforeBlockTraffic阶段超时失败,更新策略后仍未解决
问题排查方案
1. 优先检查CodeDeploy Agent状态与日志
- 登录EC2实例,执行以下命令确认Agent是否运行:
若未运行,启动Agent并设置开机自启:sudo service codedeploy-agent statussudo service codedeploy-agent start sudo systemctl enable codedeploy-agent # 适用于systemd系统 - 查看Agent日志定位具体问题,日志路径通常为:
重点搜索连接失败、权限拒绝相关的日志内容。/var/log/aws/codedeploy-agent/codedeploy-agent.log
2. 验证EC2实例权限与网络配置
- 确认EC2实例关联的IAM角色已附加AmazonEC2RoleforAWSCodeDeploy策略(或包含以下核心权限的自定义策略):
codedeploy:RegisterInstancecodedeploy:UpdateInstanceInformations3:GetObject(若部署包存放在S3)
注意:直接给实例"全权限"不等于角色配置正确,需确保IAM角色已正确附加到实例。
- 检查VPC网络连通性:
- 若实例在私有子网,需配置VPC端点(
com.amazonaws.<你的区域>.codedeploy)或NAT网关,确保实例能出站访问AWS CodeDeploy服务。 - 可在EC2实例上执行
telnet codedeploy.<区域>.amazonaws.com 443测试连通性。
- 若实例在私有子网,需配置VPC端点(
3. 检查appspec.yml配置
针对Angular静态应用,appspec.yml需满足以下基本要求:
- 结构完整,示例参考:
version: 0.0 os: linux files: - source: /dist/your-angular-app # 需与CodeBuild打包的dist目录名称一致 destination: /var/www/html # 目标部署目录(如Nginx根目录) hooks: BeforeInstall: - location: scripts/stop_nginx.sh timeout: 300 runas: root AfterInstall: - location: scripts/start_nginx.sh timeout: 300 runas: root - 确认
source路径与CodeBuild的artifacts配置匹配,buildspec.yml中需确保打包了dist目录:artifacts: files: - 'dist/**/*' - 检查hooks中的脚本路径正确,且脚本具备执行权限(可在buildspec的
post_build阶段添加chmod +x scripts/*.sh)。
内容的提问来源于stack exchange,提问作者LJR
相关产品推荐
相关产品推荐

