Corrección para ejecutar el almacenamiento de gcloud

Descripción general

El SDK de Cloud incluye una CLI nueva, un almacenamiento de gcloud, que puede ser mucho más rápida que gsutil cuando se realizan cargas y descargas con menos ajustes de parámetros. Esta nueva CLI tiene una estructura de sintaxis y comandos que es familiar para los usuarios de gsutil, pero muy diferente en muchos aspectos importantes. Para facilitar la transición a esta CLI nueva, gsutil proporciona una corrección que traduce tus comandos de gsutil a los comandos de almacenamiento de gcloud si existe un equivalente y recurre al comportamiento habitual de gsutil si no existe un equivalente.

Habilítalo de esta forma

Configura use_gcloud_storage=True en el archivo de configuración .boto en la sección [GSUtil]:

[GSUtil]
use_gcloud_storage=True

También puedes establecer la marca para comandos individuales mediante la marca de nivel superior -o:

gsutil -o "GSUtil:use_gcloud_storage=True" -m cp -p file gs://bucket/obj

Comandos disponibles

La CLI de almacenamiento de gcloud solo admite un subconjunto de comandos de gsutil. Lo que sigue es una lista de comandos compatibles con la corrección con cualquier diferencia en el comportamiento indicado.

acl

  • El subcomando ch no es compatible.

autoclass

  • Funciona como se espera.

bucketpolicyonly

  • Funciona como se espera.

gato

  • Imprime datos de objeto para un segundo objeto incluso si el primer objeto no es válido.

compose

  • Funciona como se espera.

cors

  • El subcomando get imprime “[]” en lugar de “gs://[nombre del bucket] no tiene configuración de CORS”.

cp

  • Copia un segundo objeto incluso si el primer objeto no es válido.

  • No admite copias de archivos a archivos.

  • Admite la copia de objetos nube a nube con barras finales en el nombre.

  • La marca de todas las versiones (-A) habilita la ejecución secuencial de forma silenciosa en lugar de generar un error.

defacl

  • El subcomando ch no es compatible.

defstorageclass

  • Funciona como se espera.

hash

  • En gsutil, las marcas -m y -c que afectan a los hashes que se muestran se ignoran para los objetos en la nube. Este comportamiento se corrige para la corrección y el almacenamiento de gcloud.

iam

  • El subcomando ch no es compatible.

  • La marca -f continuará con cualquier error, no solo con errores de la API.

KMS

  • El subcomando de autorización muestra mensajes informativos en un formato diferente.

  • El subcomando de encriptación muestra mensajes informativos en un formato diferente.

etiquetas

  • El subcomando get imprime “[]” en lugar de “gs://[nombre del bucket] no tiene configuración de etiquetas”.

lifecycle

  • Funciona como se espera.

registro

  • El subcomando get tiene diferente espacio JSON y no imprime un mensaje informativo si no se encuentra una configuración.

ls

  • Funciona como se espera.

mb

  • Funciona como se espera.

mv

  • Consulta las notas sobre cp.

notificación

  • El subcomando list muestra la información de configuración como YAML.

  • El subcomando delete ofrece seguimiento del progreso y paralelización.

pap

  • Funciona como se espera.

rb

  • Funciona como se espera.

requesterpays

  • Funciona como se espera.

rewrite

  • La marca -k no genera un error si se llama sin una clave nueva. En la corrección y la corrección de casos, la clave anterior se mantiene.

rm

  • No se admiten los marcadores de eliminación $folder$.

rpo

  • Funciona como se espera.

setmeta

  • No genera un error si no se cambian los encabezados.

stat

  • Incluye un campo “Storage class update time”, que puede generar pestañas.

ubla

  • Funciona como se espera.

control de versiones

  • Funciona como se espera.

web

  • El subcomando get tiene diferente espacio JSON y no imprime un mensaje informativo si no se encuentra una configuración.

Configuración de Boto

La configuración que se encuentra en el archivo boto se asigna 1:1 a las variables de entorno de gcloud cuando corresponda.

[Credentials]

  • aws_access_key_id: AWS_ACCESS_KEY_ID

  • aws_secret_access_key: AWS_SECRET_ACCESS_KEY

  • use_client_certificate: CLOUDSDK_CONTEXT_AWARE_USE_CLIENT_CERTIFICATE

[Boto]

  • proxy: CLOUDSDK_PROXY_ADDRESS

  • proxy_type: CLOUDSDK_PROXY_TYPE

  • proxy_port: CLOUDSDK_PROXY_PORT

  • proxy_user: CLOUDSDK_PROXY_USERNAME

  • proxy_pass: CLOUDSDK_PROXY_PASSWORD

  • proxy_rdns: CLOUDSDK_PROXY_RDNS

  • http_socket_timeout: CLOUDSDK_CORE_HTTP_TIMEOUT

  • ca_certificates_file: CLOUDSDK_CORE_CUSTOM_CA_CERTS_FILE

  • max_retry_delay: CLOUDSDK_STORAGE_BASE_RETRY_DELAY

  • num_retries: CLOUDSDK_STORAGE_MAX_RETRIES

[GSUtil]

  • check_hashes: CLOUDSDK_STORAGE_CHECK_HASHES

  • default_project_id: CLOUDSDK_CORE_PROJECT

  • disable_analytics_prompt: CLOUDSDK_CORE_DISABLE_USAGE_REPORTING

  • use_magicfile: CLOUDSDK_STORAGE_USE_MAGICFILE

  • parallel_composite_upload_threshold: CLOUDSDK_STORAGE_PARALLEL_COMPOSITE_UPLOAD_THRESHOLD

  • resumable_threshold: CLOUDSDK_STORAGE_RESUMABLE_THRESHOLD

[OAuth2]

  • client_id: CLOUDSDK_AUTH_CLIENT_ID

  • client_secret: CLOUDSDK_AUTH_CLIENT_SECRET

  • provider_authorization_uri: CLOUDSDK_AUTH_AUTH_HOST

  • provider_token_uri: CLOUDSDK_AUTH_TOKEN_HOST

Notas de compatibilidad generales

  • Debido a su compatibilidad en todas las plataformas principales, el multiprocesamiento se habilita para todos los comandos de forma predeterminada (equivalente a la opción -m que siempre se incluye en gsutil).

  • Una secuencia de asteriscos mayores a 2 (es decir, ***) siempre se trata como un solo asterisco.

  • A diferencia de gsutil, gcloud no está diseñado para usarse en invocaciones paralelas, y hacerlo (es decir, ejecutar la corrección de compatibilidad de 2 terminales a la vez) puede generar un comportamiento impredecible.

  • Supongamos que un bucket contiene un objeto gs://bucket/nested/foo.txt, el iterador comodín de gsutil coincidirá con foo.txt con una URL como gs://bucket/*/nested/*. La corrección no coincidirá con foo.txt dada la misma URL.

  • Esto se actualizará como nuevos comandos compatibles con gcloud storage y la corrección.

  • Si Unicode tiene problemas, intenta configurar la variable de entorno PYTHONUTF8 como 1. Específicamente, esto puede ser útil en la línea de comandos (CMD) de Windows.