Antes de fazer solicitações ao Serviço de transferência do Cloud Storage, verifique se a API Storage Transfer Service está ativada no seu projeto e se seu aplicativo está configurado para autorização, usando o protocolo OAuth 2.0 (em inglês). Recomendamos que você também implemente a espera exponencial truncada para lidar com tentativas de repetição em caso de falhas de solicitação.
Como ativar o serviço
Para acessar o Serviço de transferência do Cloud Storage usando uma biblioteca de APIs Google ou diretamente usando a API Storage Transfer Service, é necessário ativar a API Google Storage Transfer.
Ative a Google Storage Transfer API.Fluxo de autenticação
Como todas as operações do Storage Transfer Service ocorrem sem a necessidade de intervenção humana ou consentimento do usuário, o melhor fluxo de autenticação para um aplicativo do Storage Transfer Service é de servidor para servidor, usando uma conta de serviço. O App Engine e o Compute Engine têm contas de serviço integradas que podem ser usadas. Também é possível criar uma credencial de serviço no Console do Google Cloud.
Quando você usa uma conta de serviço, as bibliotecas de cliente de APIs do Google lidam com o processo de autenticação e autorização nos seguintes cenários:
- Aplicativo do App Engine
Se o aplicativo for executado no App Engine, ele será autenticado com a conta de serviço padrão do aplicativo do App Engine.
O código também funciona com o emulador local do App Engine, desde que você use o SDK do Cloud (
mvn gcloud:run
). Para isso, use uma conta de serviço e configure a variável de ambienteGOOGLE_APPLICATION_CREDENTIALS
.Para mais informações, consulte a seção Host local ou de terceiros.
- Aplicativo do Compute Engine
Se o aplicativo for executado em uma instância do Compute Engine, ele será autenticado usando a conta de serviço padrão do Compute Engine associada ao projeto.
Configure a instância para usar contas de serviço e inclua o escopo listado na seção Escopo de autorização.
Para mais informações, consulte Como configurar o escopo do acesso à conta de serviço para instâncias na documentação do Compute Engine.
- Host local ou de terceiros
Se você estiver executando um cliente local ou o programa em um ambiente que não seja do Google Cloud, crie uma nova conta de serviço, faça o download do arquivo de chave JSON e defina a variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
para indicar o arquivo de chave JSON.Para mais informações, consulte Autenticação como uma conta de serviço.
Escopo de autorização
Os aplicativos que acessam o Serviço de transferência do Cloud Storage usando o OAuth 2.0 precisam
especificar o escopo de autorização cloud-platform
.
Escopo | Significado |
---|---|
https://www.googleapis.com/auth/cloud-platform |
Acesso total. |
Criar um cliente
É possível usar o código de amostra abaixo para criar um cliente do Serviço de transferência do Cloud Storage em qualquer um dos ambientes discutidos no Fluxo de autenticação. Como o código usa Google Application Default Credentials, ele seleciona a conta de serviço apropriada para uso.
É preciso atribuir um dos seguintes papéis à conta de serviço:
- roles/owner
- roles/editor
- roles/storagetransfer.admin
- roles/storagetransfer.user
Um papel personalizado que inclui, no mínimo, permissões roles/storagetransfer.user.
Para mais informações sobre como adicionar e visualizar permissões para envolvidos no projeto, consulte Permissões do IAM para métodos do Serviço de transferência do Cloud Storage e Exemplos de permissões e papéis do IAM.
Para verificar, acesse a página de permissões do seu projeto.
Java
Neste exemplo, usamos a
biblioteca de cliente de APIs do Google para Java. A classe
RetryHttpInitializerWrapper
personalizada está descrita na seção
Manipulação de repetição.
Python
Neste exemplo, usamos a biblioteca de cliente de APIs do Google para Python.
Manipulação de repetição
Nesse caso de falhas de RPC, implemente o código para lidar com tentativas de repetição com uma estratégia de espera exponencial truncada.
Java
Neste exemplo, usamos a
biblioteca de cliente de APIs do Google para Java. A classe
RetryHttpInitializerWrapper
manipula as tentativas de repetição para você.
Python
É possível passar o argumento num_retries=n
para o método
execute
da biblioteca para repetição com retirada exponencial em
caso de falhas que podem ser repetidas.
resp = client.projects().subscriptions().pull(
subscription=subscription, body=body).execute(num_retries=3)