如何通过CLI等待AWS AppRunner部署操作完成,避免CodeBuild提前结束
AppRunner 部署异步等待CLI实现方案
核心逻辑
调用aws apprunner start-deployment启动部署后捕获返回的操作ID,循环调用操作查询接口判断部署状态,直到进入终态后再退出流程。
完整适配CodeBuild的脚本
你可以直接将以下代码加入你的buildspec.yml对应执行阶段,无需额外安装依赖(CodeBuild默认环境已预置AWS CLI):
# 请提前配置你的AppRunner服务ARN到环境变量 APPRUNNER_SERVICE_ARN # 启动部署并直接提取操作ID(使用AWS CLI内置query能力,无需额外工具) OPERATION_ID=$(aws apprunner start-deployment \ --service-arn $APPRUNNER_SERVICE_ARN \ --query 'Operation.Id' \ --output text) echo "部署已启动,操作ID:$OPERATION_ID" # 循环查询部署状态 while : do # 查询当前操作状态 CURRENT_STATUS=$(aws apprunner describe-operation \ --operation-id $OPERATION_ID \ --service-arn $APPRUNNER_SERVICE_ARN \ --query 'Operation.Status' \ --output text) echo "当前部署状态:$CURRENT_STATUS" # 匹配终态逻辑 case $CURRENT_STATUS in SUCCEEDED) echo "✅ 部署完成" exit 0 ;; FAILED|ROLLBACK_COMPLETED|ROLLBACK_FAILED) echo "❌ 部署失败,最终状态:$CURRENT_STATUS" exit 1 ;; *) # 中间状态等待10秒后重试,规避API限流 sleep 10 ;; esac done
关键说明
- 权限配置:CodeBuild的执行角色需要增加
apprunner:StartDeployment、apprunner:DescribeOperation两个权限,否则会调用API报错。 - 状态规则:只有
SUCCEEDED、FAILED、ROLLBACK_COMPLETED、ROLLBACK_FAILED属于部署终态,其余PENDING、IN_PROGRESS等状态均为运行中状态,需要继续等待。 - 自定义调整:你可以根据部署的平均时长调整
sleep的等待时长,平衡实时性和限流风险。
内容的提问来源于stack exchange,提问作者Jared Christensen
相关产品推荐
相关产品推荐

