Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Uploads à prova de falhas no Google Cloud Storage (GCS)

By Vinay GandhiApr 13, 20205 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

O Google Cloud Storage (GCS) é uma excelente alternativa para aplicações armazenarem dados não estruturados a um custo muito baixo. As aplicações podem usar as APIs do GCS para integrar ou compartilhar uma URL direta do GCS para envio ou download de arquivos. O GCS também permite enviar dados em várias partes (chunks) por meio de uploads retomáveis.

Uploads à prova de falhas para o Google Cloud Storage

A vantagem do upload retomável em relação ao upload único é que a aplicação fica resiliente à disponibilidade da rede: ela envia partes dos dados quando há conexão e pausa quando a rede cai de repente. Isso também reduz o custo de banda, já que você não precisa reiniciar do zero o envio de arquivos grandes.

Um exemplo: ao enviar fotos ou documentos de um app mobile para o servidor somente via WiFi, o app pode pausar o upload automaticamente quando o aparelho passa para os dados móveis e retomá-lo assim que o WiFi voltar.

Os buckets do GCS expõem uma URL de endpoint para chamadas de API, conforme abaixo:

É sempre recomendável ocultar do usuário final os detalhes de implementação e as ferramentas usadas em uma aplicação. O mesmo vale para os buckets do GCS dentro da nossa aplicação — daí a recomendação de usar uma URL personalizada para expô-los.

Para acessar buckets do GCS por URLs personalizadas, como https://mydrive..com, o Google oferece um serviço configurável de "Backend Bucket" via load balancer do GCP. Veja o passo a passo a seguir.

Como conectar um Backend Bucket a um bucket do GCS

  1. Acesse o console do GCP e selecione Network Services -> Load Balancing na barra de navegação à esquerda.

2. Clique em "Create Load Balancer".

3. Selecione "HTTP(S) Load Balancing" e clique em "Start Configuration".

4. Selecione "From Internet to my VMs", já que clientes da internet vão interagir com o bucket.

5. Dê um nome ao seu load balancer e, em Backend configuration, escolha Backend buckets.

6. Dê um nome ao seu backend bucket e selecione um bucket do Cloud Storage para conectar a esse serviço de backend. No meu caso, o bucket do GCS está aberto publicamente para reduzir a complexidade de obter e enviar o token de autorização nas chamadas de API.

7. Depois que o Backend bucket for criado, a lista de Backend buckets deve aparecer.

8. A Frontend configuration conecta o IP estático ao load balancer para que nossos serviços consigam interagir com o bucket do GCS.

9. Revise e finalize a configuração.

10. O serviço de Backend bucket deve ficar criado conforme abaixo.

Com o serviço de Backend bucket e o load balancer conectados pelo IP estático, já dá para chamar as APIs do GCS usando o IP personalizado (ou a URL, caso o IP esteja associado a um nome de domínio).

Listar os objetos de um bucket

Execute o comando curl conforme abaixo:

Corpo da resposta retornada:

Enviar um único objeto para um bucket

Comando curl para enviar "map.png" como "worldmap_001.png" no bucket do GCS.

Liste os objetos para confirmar que "worldmap_001.png" está no bucket do GCS.

Enviar um arquivo em várias partes com URL retomável

Divida o arquivo "map.png", de 312806 bytes, em duas partes em múltiplos de 256 kilobytes. A API de URL retomável do Google Cloud Storage exige que cada parte enviada seja múltipla de 256kb, exceto a parte final.

  1. Chame a API "uploadType=resumable" para obter a URL de localização no cliente REST POSTMAN ou em qualquer outro cliente REST.

2. Pegue a URL de localização da resposta recebida — é por ela que as partes serão enviadas.

3. Envie a 1ª parte, "xaa", para o bucket usando o cliente POSTMAN. Garanta que o header "Content-Range" esteja configurado de 0 até ("Content-Length" - 1).

4. A chamada de upload retorna o status HTTP "308 Resume Incomplete".

5. Envie a 2ª parte (parte final) "xab" para o bucket.

6. Após o envio da parte final, o status HTTP "200 OK" é retornado.

7. Confira no bucket a imagem enviada (map.png).

Referências

Choosing a load balancer | Load Balancing | Google Cloud \ This document helps you determine which Google Cloud load balancer best meets your needs. To decide which load balancer…\ cloud.google.com

Adding backend buckets to load balancers | Load Balancing \ Backend buckets allow you to use Google Cloud Storage buckets with HTTP(S) Load Balancing. An external HTTP(S) load…\ cloud.google.com

Making data public | Cloud Storage | Google Cloud \ This page shows you how to make objects you own readable to everyone on the public internet. To learn how to access…\ cloud.google.com

Performing resumable uploads | Cloud Storage | Google Cloud \ This page describes how to make a resumable upload request in the Cloud Storage JSON and XML API. This protocol allows…\ cloud.google.com

JSON API: Performing a multipart upload | Cloud Storage | Google Cloud \ This page describes how to make a multipart upload request in the Cloud Storage JSON API. A multipart upload request…\ cloud.google.com

Resumable uploads | Cloud Storage | Google Cloud \ This page discusses Cloud Storage resumable uploads in JSON API and XML API. To learn how to perform a resumable…\ cloud.google.com

POST Object | Cloud Storage | Google Cloud \ Uploads objects by using HTML forms. For tips on uploading to Cloud Storage, see best practices. Unless you need to use…\ cloud.google.com

Resumable uploads | Cloud Storage | Google Cloud \ This page discusses Cloud Storage resumable uploads in JSON API and XML API. To learn how to perform a resumable…\ cloud.google.com

Requests \ You can send requests in Postman to connect to APIs you are working with. Your requests can retrieve, add, delete, and…\ learning.postman.com