使用 Deployment Manager API 管理长时间运行的操作

当您向 Deployment Manager 发出 API 请求时,Deployment Manager 会向其他 API 发出相应请求。 Google Cloud 例如,当您创建包含 Compute Engine 实例的部署时,Deployment Manager 会向 Compute Engine API 发送 instances.insert 请求。

创建、更新或删除部署,或者使用可能需要几分钟或更长时间才能完成的其他 API 方法时,发送到 Deployment Manager 的 API 请求会返回长时间运行的操作

本页介绍了使用 Deployment Manager API 管理长时间运行的操作的准则。

准备工作

可能会启动长时间运行的操作的方法包括:

在这些请求中,响应是操作资源,如下例所示:

{
 "kind": "deploymentmanager#operation",
 "id": "7123423453456654321",  # generated ID
 "name": "operation-11233234311678-587af2c0xyz9c-0987fa54-baccd59f",  # generated name
 "operationType": "insert",
 "targetLink": "https://www.googleapis.com/deploymentmanager/v2/projects/example-project/global/deployments/wordpress-1",
 "targetId": "5123321654456321123",
 "status": "DONE",  # possible values: RUNNING, PENDING, DONE
 "user": "example@example.com",
 "progress": 100,
 "insertTime": "2019-04-29T11:08:32.190-07:00",
 "startTime": "2019-04-29T11:08:32.200-07:00",
 "endTime": "2019-04-29T11:09:38.176-07:00",
 "selfLink": "https://www.googleapis.com/deploymentmanager/v2/projects/example-project/global/operations/operation-11233234311678-587af2c0xyz9c-0987fa54-baccd59f"
}

获取操作状态

如需检查操作的状态,请使用操作的 name 字段发出 operations.get() 请求,然后检查操作的 statusprogress

statusDONEprogress100error 对象为空时,表示部署已完成,资源可以使用了。

如果操作期间出现错误,这些错误会以以下格式列在 error 对象中:

"error": {
  "errors": [
    {
      "code": "error code"  # string,
      "location": "location of the error"  # string,
      "message": "error message"   # string
    },
    ...
  ]
}

我们建议的最佳实践是,使用指数退避算法轮询操作状态。例如,在 5 秒后发出第一个请求,在 10 秒后发出下一个请求,在 20 秒后发出第三个请求,以此类推。我们建议将最大回退时间设置为几分钟。达到最大退避时间后,您无需继续增加退避时间。