Shim para executar o armazenamento da gcloud

Informações gerais

O SDK do Cloud inclui uma nova CLI, o gcloud storage, que pode ser consideravelmente mais rápida do que a gsutil ao realizar uploads e downloads com menos ajustes de parâmetros. Essa nova CLI tem uma sintaxe e uma estrutura de comando conhecidas pelos usuários do gsutil, mas fundamentalmente diferentes de várias maneiras importantes. Para facilitar a transição para essa nova CLI, a gsutil fornece um shim que converte seus comandos da gsutil em comandos de armazenamento do gcloud se um equivalente existir e volta ao comportamento normal do gsutil se não houver um equivalente.

Para ativar

Defina use_gcloud_storage=True no arquivo de configuração .boto na seção [GSUtil]:

[GSUtil]
use_gcloud_storage=True

Também é possível definir a flag para comandos individuais usando a flag -o de nível superior:

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

Comandos disponíveis

A CLI de armazenamento do gcloud só oferece suporte a um subconjunto de comandos da gsutil. Veja a seguir uma lista de comandos compatíveis com o paliativo, com todas as diferenças de comportamento notadas.

acl

  • O subcomando ch não é compatível.

autoclass

  • Funciona como esperado.

bucketpolicyonly

  • Funciona como esperado.

gato

  • Mostra os dados de um segundo objeto, mesmo que o primeiro seja inválido.

compose

  • Funciona como esperado.

cors

  • O subcomando get exibe "[]" em vez de "gs://[bucket name]" sem configuração do CORS.

cp

  • Copia um segundo objeto mesmo que o primeiro objeto seja inválido.

  • Não é possível copiar um arquivo para outro.

  • Permite copiar objetos de nuvem para nuvem com barras no nome.

  • A flag de todas as versões (-A) permite silenciosamente a execução sequencial em vez de gerar um erro.

defacl

  • O subcomando ch não é compatível.

defstorageclass

  • Funciona como esperado.

hash

  • Na gsutil, as sinalizações -m e -c que afetam quais hashes são exibidos são ignoradas para objetos na nuvem. Esse comportamento foi corrigido para o armazenamento do shim e gcloud.

iam

  • O subcomando ch não é compatível.

  • A sinalização -f continuará com qualquer erro, não apenas com erros da API.

kms

  • O subcomando "autorize" retorna mensagens informativas em um formato diferente.

  • O subcomando de criptografia retorna mensagens informativas em um formato diferente.

rótulos

  • O subcomando get exibe "[]" em vez de "gs://[bucket name]" e não tem rótulos configurados.

lifecycle

  • Funciona como esperado.

logging

  • O subcomando "get" tem espaçamento JSON diferente e não imprime uma mensagem informativa se nenhuma configuração for encontrada.

ls

  • Funciona como esperado.

mb

  • Funciona como esperado.

mv

  • Consulte as observações sobre cp.

notificação

  • O subcomando list gera informações de configuração como YAML.

  • O subcomando "delete" oferece acompanhamento de progresso e carregamento em paralelo.

pap

  • Funciona como esperado.

rb

  • Funciona como esperado.

requesterpays

  • Funciona como esperado.

rewrite

  • A flag -k não gera um erro se for chamada sem uma nova chave. Nos casos de paliativo e de não paliativo, a chave antiga é mantida

rm

  • $folder$ marcadores de exclusão não são compatíveis.

rpo

  • Funciona como esperado.

setmeta

  • Não gera um erro se nenhum cabeçalho for alterado.

stat

  • Inclui um campo "Horário da atualização da classe de armazenamento", que pode jogar fora da tabulação.

ubla

  • Funciona como esperado.

controle de versões

  • Funciona como esperado.

web

  • O subcomando "get" tem espaçamento JSON diferente e não imprime uma mensagem informativa se nenhuma configuração for encontrada.

Configuração do Boto

A configuração encontrada no arquivo boto é mapeada individualmente para as variáveis de ambiente do gcloud quando apropriado.

[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 gerais de compatibilidade

  • Devido à compatibilidade com todas as principais plataformas, o multiprocessamento é ativado para todos os comandos por padrão (equivalente à opção -m que sempre está incluída na gsutil).

  • Uma sequência de asteriscos maiores que 2 (ou seja, ***) é sempre tratada como um único asterisco.

  • Ao contrário do gsutil, o gcloud não foi projetado para ser usado em invocações paralelas, e fazer isso (ou seja, executar o paliativo de dois terminais de uma só vez) pode gerar um comportamento imprevisível.

  • Supondo que um bucket contenha um objeto gs://bucket/nested/foo.txt, o iterador de caractere curinga da gsutil corresponderá a foo.txt, considerando um URL como gs://bucket/*/nested/*. O shim não corresponderá a foo.txt considerando o mesmo URL.

  • Isso será atualizado à medida que novos comandos forem compatíveis com o gcloud storage e o paliativo.

  • Se o Unicode estiver com problemas, tente definir a variável de ambiente PYTHONUTF8 como 1. Especificamente, isso pode ser útil na linha de comando (CMD) do Windows.