You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Opsworks中等待超过10分钟的部署完成?

解决AWS Opsworks部署超时后重新等待的问题

你的问题出在递归调用后的退出逻辑上——当aws opsworks wait返回255超时码时,你递归调用了wait_deploy_output,但递归执行完成后,程序会回到最初的函数实例,执行exit $wait_status,而这个wait_status还是最初的255,所以脚本最终还是会以这个码退出,不会持续重试。

另外,递归在bash中如果遇到多次超时,还可能触发栈上限的问题,改用循环会更可靠。这里给你调整后的脚本:

#!/bin/bash

wait_deploy_output() {
  local deployment_id="$1"
  echo "Waiting for deploy to finish..."

  while true; do
    # 执行AWS等待命令
    aws opsworks \
      --profile "$AWS_PROFILE" \
      --region "$AWS_REGION" \
      wait deployment-successful \
      --deployment-ids "$deployment_id"

    local wait_status=$?

    case $wait_status in
      0)
        echo "Deployed successfully!"
        return 0
        ;;
      255)
        echo "Deployment timed out after 10 minutes, retrying immediately..."
        ;;
      *)
        echo "Deployment failed with exit code $wait_status"
        return $wait_status
        ;;
    esac
  done
}

# 调用函数,传入部署ID
wait_deploy_output "$deployment_id"

脚本说明:

  • 用while true实现无限循环,直到部署成功或出现非超时的失败
  • 使用local关键字定义变量,避免全局变量污染
  • 对不同的退出码做分支处理:
    • 退出码0:部署成功,输出提示并返回0,结束脚本
    • 退出码255:超时,输出重试提示,继续循环执行等待命令
    • 其他退出码:判定为部署失败,输出错误码并返回该码,终止脚本
  • 给变量加上引号,避免部署ID或配置变量包含空格时出现问题

如果需要在重试前添加一段等待时间(比如避免频繁调用AWS API),可以在255的分支里加上sleep 30(等待30秒),比如:

255)
  echo "Deployment timed out after 10 minutes, retrying in 30 seconds..."
  sleep 30
  ;;

内容的提问来源于stack exchange,提问作者William Pollet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:11:42