本页面介绍了如何在 Cloud Storage 中使用通过方法调用启动的长时间运行的操作。如需详细了解从特定方法调用返回的长时间运行的操作语义,请参阅特定于功能的文档。
获取所需角色
如需获得管理 Cloud Storage 中长时间运行的操作所需的权限,请让您的管理员为您授予存储桶或用于执行底层操作的项目的 Storage Admin (roles/storage.admin) 角色或 Storage Legacy Bucket Owner (roles/storage.legacyBucketOwner 角色。
这些预定义角色可提供以下权限,这些权限是管理 Cloud Storage 中长时间运行的操作所必需的:
storage.bucketOperations.cancelstorage.bucketOperations.getstorage.bucketOperations.list
如需了解如何授予存储桶的角色,请参阅设置和管理存储桶的 IAM 政策。如需了解如何授予项目的角色,请参阅管理访问权限。
获取长时间运行的操作的详细信息
命令行
如需获取长时间运行的操作的详细信息或检查其状态,请使用 gcloud storage operations describe 命令:
gcloud storage operations describe projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID
您需要进行如下替换:
BUCKET_NAME替换为包含长时间运行的操作的存储桶的名称。例如my-bucket。OPERATION_ID替换为长时间运行的操作的 ID,该 ID 会在您调用的方法的响应中返回。例如,调用gcloud storage restore会返回以下响应,长时间运行的操作 ID 为BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization标头生成访问令牌。使用
cURL,通过operations.get请求调用 JSON API:curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/operations/OPERATION_ID"
您需要进行如下替换:
将
BUCKET_NAME替换为与长时间运行的操作关联的存储桶的名称。OPERATION_ID替换为长时间运行的操作的 ID,该 ID 会在您调用的方法的响应中返回。例如,调用gcloud storage restore会返回以下响应,长时间运行的操作 ID 为BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP
如果请求成功,系统会返回 operations 资源:
{
"kind": "storage#operation",
"name": "projects/_/buckets/bucket/operations/operation_id",
"metadata": {
"@type": OperationMetadataType*,
metadata OperationMetadata*
},
"done": boolean,
"response": {
"@type": ResponseResourceType*,
response ResponseResource*
}
}列出存储桶中长时间运行的操作
命令行
如需列出存储桶中长时间运行的操作,请使用 gcloud storage operations list 命令:
gcloud storage operations list gs://BUCKET_NAME
您需要进行如下替换:
- 将
BUCKET_NAME替换为包含长时间运行的操作的存储桶的名称。例如my-bucket。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization标头生成访问令牌。使用
cURL,通过operations.get请求调用 JSON API:curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/operations"
您需要进行如下替换:
- 将
BUCKET_NAME替换为与您要列出的长时间运行的操作关联的存储桶的名称。
- 将
如果请求成功,您会收到类似于以下内容的响应:
{
"kind": "storage#operations",
"nextPageToken": string,
"operations": [
operations Resource
]
}取消长时间运行的操作
命令行
如需取消长时间运行的操作,请使用 gcloud storage operations cancel 命令:
gcloud storage operations cancel projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID
您需要进行如下替换:
BUCKET_NAME替换为包含长时间运行的操作的存储桶的名称。例如my-bucket。OPERATION_ID替换为长时间运行的操作的 ID,该 ID 会在您调用的方法的响应中返回。例如,调用gcloud storage restore会返回以下响应,长时间运行的操作 ID 为BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization标头生成访问令牌。使用
cURL,通过operations.post请求调用 JSON API:curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/operations/OPERATION_ID/cancel"
您需要进行如下替换:
将
BUCKET_NAME替换为与要取消的长时间运行的操作关联的存储桶名称。OPERATION_ID替换为长时间运行的操作的 ID,该 ID 会在您调用的方法的响应中返回。例如,调用gcloud storage restore会返回以下响应,长时间运行的操作 ID 为BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP
元数据
长时间运行的操作具有关联的元数据。以下元数据用于标识长时间运行操作的属性:
创建时间:长时间运行的操作的创建时间。
结束时间:长时间运行的操作完成运行的时间。
更新时间:上次修改长时间运行的操作的时间。
类型:调用的长时间运行操作的类型。
已请求取消:指示用户是否已请求取消长时间运行的操作。
进度百分比:长时间运行的操作的估算进度,以百分比表示。值
-1表示进度未知。
错误处理
长时间运行的操作通过异步 API 启动,需要的错误处理做法与同步 API 不同。与同步 API 不同,即使长时间运行的操作最终失败,对异步 API 调用的响应也可能指示成功。您应该解析响应正文中的长时间运行的操作元数据以确定 API 调用是否成功,而不是依赖于响应标头中返回的状态代码。
例如,如果您发出软删除批量恢复请求,则即使操作过程中发生错误,该请求也会返回成功的 HTTP 状态代码 (200 OK)。如需检查批量恢复操作是否成功,请获取长时间运行的操作的状态。
请注意,长时间运行的操作 API(Get、List、Cancel)是同步的,会返回正常错误。