Usa operaciones de larga duración en Cloud Storage

En esta página, se describe cómo usar operaciones de larga duración que se inician a partir del uso de llamadas de método en Cloud Storage. Para obtener información detallada sobre la semántica de una operación de larga duración que se muestra desde una llamada a método específica, consulta la documentación específica de la función.

Obtén las funciones necesarias

Para obtener los permisos que necesitas para administrar operaciones de larga duración en Cloud Storage, pídele a tu administrador que te otorgue el rol de administrador de almacenamiento (roles/storage.admin) o el rol de propietario de buckets heredados de almacenamiento (roles/storage.legacyBucketOwner) en el bucket o el proyecto que se usa para realizar la operación subyacente.

Estos roles predefinidos contienen los siguientes permisos, que son necesarios para administrar operaciones de larga duración en Cloud Storage:

  • storage.bucketOperations.cancel
  • storage.bucketOperations.get
  • storage.bucketOperations.list

Para obtener más información sobre cómo otorgar roles en los buckets, consulta Usa IAM con buckets. Para obtener información sobre cómo otorgar roles en proyectos, consulta Administra el acceso.

Obtén los detalles de una operación de larga duración

Línea de comandos

Para obtener los detalles o verificar el estado de una operación de larga duración, usa el comando gcloud storage operations describe:

gcloud storage operations describe projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Reemplaza lo siguiente:

  • BUCKET_NAME: con el nombre del bucket que contiene la operación de larga duración. Por ejemplo, my-bucket

  • OPERATION_ID con el ID de la operación de larga duración, que se muestra en la respuesta de los métodos a los que llamas. Por ejemplo, la siguiente respuesta se muestra cuando se llama a gcloud storage restore y el ID de la operación de larga duración es BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:

    Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP

API de REST

API de JSON

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de JSON con una solicitud operations.get:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/operations/OPERATION_ID"

    Reemplaza lo siguiente:

    • BUCKET_NAME con el nombre del bucket asociado con la operación de larga duración.

    • OPERATION_ID con el ID de la operación de larga duración, que se muestra en la respuesta de los métodos a los que llamas. Por ejemplo, se muestra la siguiente respuesta cuando se llama a gcloud storage restore y el ID de operación de larga duración es BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:

      Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP

Si la solicitud se realiza correctamente, se muestra un recurso operations:

{
  "kind": "storage#operation",
  "name": "projects/_/buckets/bucket/operations/operation_id",
  "metadata": {
    "@type": OperationMetadataType*,
    metadata OperationMetadata*
  },
  "done": boolean,
  "response": {
    "@type": ResponseResourceType*,
    response ResponseResource*
  }
}

Enumera las operaciones de larga duración de un bucket

Línea de comandos

Para enumerar las operaciones de larga duración de un bucket, usa el comando gcloud storage operations list:

gcloud storage operations list gs://BUCKET_NAME

Reemplaza lo siguiente:

  • BUCKET_NAME: con el nombre del bucket que contiene las operaciones de larga duración. Por ejemplo, my-bucket

APIs de REST

API de JSON

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de JSON con una solicitud operations.get:

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/operations"

    Reemplaza lo siguiente:

    • BUCKET_NAME con el nombre del bucket asociado con las operaciones de larga duración que deseas enumerar.

Si la solicitud se realiza correctamente, recibirás una respuesta similar a la siguiente:

{
  "kind": "storage#operations",
  "nextPageToken": string,
  "operations": [
    operations Resource
  ]
}

Cancelar una operación de larga duración

Línea de comandos

Para cancelar una operación de larga duración, usa el comando gcloud storage operations cancel:

gcloud storage operations cancel projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Reemplaza lo siguiente:

  • BUCKET_NAME: con el nombre del bucket que contiene la operación de larga duración. Por ejemplo, my-bucket

  • OPERATION_ID con el ID de la operación de larga duración, que se muestra en la respuesta de los métodos a los que llamas. Por ejemplo, la siguiente respuesta se muestra cuando se llama a gcloud storage restore y el ID de la operación de larga duración es BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:

    Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP

API de REST

API de JSON

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de JSON con una solicitud operations.post:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/operations/OPERATION_ID/cancel"

    Reemplaza lo siguiente:

    • BUCKET_NAME con el nombre del bucket asociado con la operación de larga duración que deseas cancelar.

    • OPERATION_ID con el ID de la operación de larga duración, que se muestra en la respuesta de los métodos a los que llamas. Por ejemplo, se muestra la siguiente respuesta cuando se llama a gcloud storage restore y el ID de operación de larga duración es BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP:

      Created: projects/_/buckets/my-bucket/operations/BcazhBlHv2uZwnlh1UdamOfKbpVpb67drEwVoI2hlkE1e0eaXqw7fPBWP0802TJry4pInGC4h3wxtOi31RmpCC_lvnSocj_-jP

Metadatos

Las operaciones de larga duración tienen metadatos asociados. Los siguientes metadatos identifican las propiedades de una operación de larga duración:

  • Hora de creación: Es la hora en que se creó la operación de larga duración.

  • Hora de finalización: Es la hora a la que finalizó la operación de larga duración.

  • Hora de actualización: Es la hora en la que se modificó por última vez la operación de larga duración.

  • Tipo: Es el tipo de operación de larga duración que se invocó.

  • Cancelación solicitada: Indica si el usuario solicitó la cancelación de la operación de larga duración.

  • Porcentaje de progreso: Es el progreso estimado de la operación de larga duración, expresado en porcentaje. Un valor de -1 significa que el progreso es desconocido.

Manejo de errores

Las operaciones de larga duración se inician desde las APIs asíncronas y requieren diferentes prácticas de manejo de errores que las de las APIs síncronas. A diferencia de las APIs síncronas, la respuesta a las llamadas a la API asíncronas puede indicar el éxito, incluso si la operación de larga duración falla. En lugar de depender del código de estado que se muestra en los encabezados de respuesta, debes analizar los metadatos de la operación de larga duración en el cuerpo de la respuesta para determinar si una llamada a la API se realizó correctamente.

Por ejemplo, si realizas una solicitud de restablecimiento masivo de la eliminación no definitiva, se muestra un código de estado HTTP correcto (200 OK), incluso si se produce un error en el transcurso de la operación. Para verificar si la operación de restablecimiento masivo se realizó de forma correcta, consigue el estado de la operación de larga duración.

Ten en cuenta que las APIs de operación de larga duración (Get, List, Cancel) son síncronas y muestran errores normales.