调试Pulumi部署ECS Fargate CodeDeploy模式出现ResourceNotReady错误
调试定位Pulumi等待资源的方法
- 运行部署命令时添加调试参数:执行
pulumi up时带上--logtostderr -v=9,输出的全量日志会明确标注当前处于等待状态的资源类型、ARN以及关联的AWS API调用返回值,可直接定位卡住的具体资源。 - 核对Pulumi栈资源状态:执行
pulumi stack export导出栈的全量资源状态,对比AWS控制台中对应资源的实际运行状态,找到处于CREATE_IN_PROGRESS或UPDATE_IN_PROGRESS状态的异常资源。 - 查看AWS侧资源事件:优先查看ECS服务的事件面板定位服务启动失败原因,再查看CodeDeploy控制台对应应用的部署记录,明确蓝绿部署流程卡在任务启动、健康检查还是流量切换环节。
ECS蓝绿部署(CODE_DEPLOY控制器)的隐藏依赖要求
使用CODE_DEPLOY作为部署控制器时,仅修改deploymentController.type无法完成部署,还需要满足以下前置条件:
- 必须提前创建CodeDeploy ECS应用与对应部署组:部署组需要绑定目标ECS集群、ECS服务、负载均衡的两个目标组(分别用于蓝、绿版本流量挂载)、生产流量监听器,上述CodeDeploy侧资源不会由Pulumi自动创建,缺失会导致部署流程无法启动。
- 负载均衡需完成双目标组配置:不能使用默认ECS部署的单目标组方案,两个目标组需配置相同的健康检查规则,供CodeDeploy切换流量使用。
- 权限配置需覆盖CodeDeploy访问需求:ECS任务执行角色、CodeDeploy服务角色需要添加对应IAM权限,允许CodeDeploy操作ECS服务、修改负载均衡目标组挂载规则,同时ECS任务的安全组需要放行负载均衡的健康检查端口,避免绿版本任务健康检查失败。
- 移除ECS服务原生滚动部署参数:使用CODE_DEPLOY控制器时,ECS服务的
maxPercent、minHealthyPercent参数会失效,相关的部署策略需要在CodeDeploy部署配置中定义,保留上述参数会触发配置冲突导致部署超时。
内容的提问来源于stack exchange,提问作者sitick
相关产品推荐
相关产品推荐

