如何使用gcloud sql operation wait?操作标识符获取方法
gcloud sql operations wait需要传入的操作ID是Cloud SQL每一个异步操作生成的唯一字符串,获取方式有两种,可直接解决创建实例时未等待操作完成触发报错的问题:
触发操作时直接获取:所有会触发Cloud SQL异步变更的命令(创建实例、重启、修改配置、创建备份等),加上
--async参数后,不会阻塞等待操作完成,会直接返回当前触发操作的唯一ID。
比如创建实例时执行:gcloud sql instances create 你的实例名称 --async
命令返回结果里会明确标注当前操作的ID,格式类似Wait for operation [xxxx-operation-id-xxxx] to complete,方括号里的字符串就是可以直接传给wait命令的标识符。
如果是写自动化脚本,还可以直接用格式化参数把ID提取到变量里,不用手动复制:# 触发实例创建,将操作ID存入变量 OP_ID=$(gcloud sql instances create 你的实例名称 --async --format="value(name)") # 等待操作完成,可自定义超时时间,单位秒 gcloud sql operations wait $OP_ID --timeout=600 # wait命令执行完成(无论操作成功还是失败)后,再执行后续实例配置、数据导入等步骤事后从操作列表查询:如果之前执行创建命令时没加
--async、也没留存返回的操作ID,可以直接过滤查询对应实例的操作记录找ID:gcloud sql operations list --instance=你的实例名 --filter="type=CREATE AND status=RUNNING"
加实例名和操作状态、类型过滤可以直接缩小查找范围,返回结果第一列NAME字段就是你需要的操作ID。如果不加过滤参数,gcloud sql operations list会返回项目下所有历史操作,你可以根据对应的实例名、操作类型、操作状态手动筛选。
官方文档对该参数的说明为:可唯一标识对应操作的专属ID,没有额外的格式要求,只要是通过上述两种方式拿到的ID字符串直接传入即可。你遇到的创建实例后未等操作完成就触发后续逻辑报错的问题,只要在创建实例后紧跟wait命令阻塞到操作结束,就可以完全规避。
内容的提问来源于stack exchange,提问作者Scorb

