Google Cloud Storage

Google Cloud Platform na Prática

Walter Gandarella
Blog do LFDev
7 min readMar 6, 2018

--

Introdução

Com esta série de artigos vou demonstrar como construir uma aplicação no Google Cloud Platform na prática. Mas digo na prática mesmo, não só na teoria e conceitos.

Aqui vamos criar um sistema de Agenda de Eventos de TI, uma agenda prática que servirá para que organizadores consultem as datas com eventos já marcados para assim marcar a data do seu evento sem conflitar com outros, evitando dividir o público.

Nesta série não abordarei o código da aplicação em si, pois o objetivo aqui é explicar sobre a infraestrutura disponível na nuvem do Google e como podemos usá-la. Quem sabe uma outra série de artigos derive desta, explicando a codificação da aplicação.

Agenda

Dividiremos os artigos da seguinte forma:

1- Parte 1: Introdução e Registro de domínio gratuito
2- Parte 2: Google Cloud Launcher
3- Parte 3: Google Cloud Compute e Deploy com GIT
4- Parte 4: Google Cloud SQL e Acesso ao Banco
5- Parte 5: Google Cloud Storage

As tecnologias de frontend e backend escolhidas para esta série serão:

  • Angular
  • NodeJs
  • Sails.js
  • MySql
  • Apache 2
  • Git

O Cloud Storage

Chegamos no momento de nossa trilha em que precisamos armazenar arquivos no servidor, isso porque nossa aplicação de teste é uma agenda de eventos de TI, e cada evento pode fazer o upload de sua arte promocional, que será usada como capa do card na página que lista os próximos eventos.

Como temos uma VM rodando nossa aplicação com Apache e nosso serviço Node, poderíamos muito bem usar essa própria VM e seu armazenamento interno para criar uma pasta e salvar os arquivos de upload. Mas você tem que concordar que essa era uma decisão que tomaríamos há uns 5 anos, quando não tínhamos disponível as infraestruturas de cloud. Hoje podemos separar bem as responsabilidades em vários serviços especializados, onde cada um garante a persistência, redundância, disponibilidade e backups, sem que você, desenvolvedor, tenha que se preocupar em programar para que tudo isso aconteça.

Sim, é muito melhor delegar a cada serviço especializado uma função da sua aplicação, do que você próprio manter cada um deles. Imagina ter que, de tempos em tempos, adicionar unidades de armazenamento à VM, aumentar sua capacidade de processamento, à medida que sua aplicação vai crescendo e atingindo os limites? Pior que isso, imagina escalar ou replicar essa VM com todo esse conteúdo dentro?

É por isso que temos no Google Cloud Platform um serviço de armazenamento de dados, o Cloud Storage, que nos provê intervalos dinâmicos e gerenciados de armazenamento em nuvem, disponível via APIs, bibliotecas, web e protegidas ao nível de projeto ou públicas, você é quem escolhe como quer gerenciar os arquivos.

Criando um Balde de arquivos

Para criar nosso balde, que é como são chamados esses espaços de armazenamento na nuvem do Google, basta acessar o menu do console Storage > Navegador.

À princípio você não tem nenhum intervalo de armazenamento criado, então vamos começar clicando no botão Criar intervalo e preencher o formulário que aparece.

Antes de preencher, vamos lembrar quais são os limites de uso gratuito para este serviço, com base na política de uso Sempre Gratuito do Cloud Storage, que é de 5GB de armazenamento do tipo Regional por mês. O tipo regional de armazenamento é caracterizado por um acesso frequente aos arquivos armazenados (ou seja, acesso diário e não esporádico), mas alocados em somente uma região da nuvem do Google.

Isso não significa que seus arquivos não estarão disponíveis globalmente, não mesmo, pelo contrário, estará acessível em qualquer ponto do planeta (ou fora dele) que possua uma conexão com a internet. O que o armazenamento em uma única zona faz é manter o arquivo num só lugar, e seu cliente que estiver tentando acessar o arquivo pode estar longe ou perto dele (da zona) e se estiver longe vai enfrentar um tempinho (quase imperceptível na maioria dos casos) de latência da rede, já o armazenamento do tipo multi-regional faz a nuvem do Google distribuir este arquivo por várias zonas ao redor do globo, e quando um cliente solicitar um arquivo, será servido pela zona mais próxima eliminando assim boa parte da latência da rede. Este tipo de armazenamento é mais indicado para grandes (mesmo) aplicações cuja latência de até segundos no atraso de carregamento de algum arquivo possa significar perda massiva de lucros. Deu pra entender? É simples!

Então fique atento, o limite gratuito do Cloud Storage só se aplica ao tipo regional (que atende perfeitamente bem às necessidades de 95% das aplicações) e, ainda, é restrito às zonas us-east1, us-central1 e us-west1.

Agora vamos preencher nosso formulário. Dei o nome trilha ao intervalo e escolhi o tipo de armazenamento Regional, e para me manter nos limites gratuitos, escolhi umas das três zonas da política Sempre Gratuito do Cloud Storage, nesse caso a us-central1.

Pronto, já temos um intervalo de armazenamento criado e pronto para receber os arquivos da nossa aplicação. Mas falta uma configuração. Como nossa agenda é pública, ou seja, qualquer pessoa vai poder ver o conteúdo cadastrado nela, precisamos dizer que essas imagens que vou armazenar nesse balde estejam públicas para visualização. Vamos clicar no menu com três pontinhos que há em cada intervalo e escolher a opção Editar permissões do intervalo.

Uma área com mais informações aparecerá do lado direito da tela. Nela, na aba Permissões vamos criar uma nova permissão. No campo Adicionar membros digite exatamente allUsers (assim mesmo) e, no menu suspenso ao lado, escolha Visualizador de objetos do Storage, clique em Adicionar.

Se tudo correu bem, você terá agora uma nova regra de acesso ao seu balde, como mostra a imagem abaixo:

Pronto, agora sim nossos arquivos estarão disponíveis globalmente para todos os que acessarem a agenda. Isso porque eu permiti, pois preciso que os clientes vejam as artes enviadas de cada evento. Obviamente você, em seu projeto, pode criar outras regras e restringir o acesso aos arquivos somente aos seus clientes logados, por exemplo.

Enviando um arquivo pro Storage via Node

Bom, mostrarei aqui um pequeno trecho de código, já que o objetivo desta série não é focar no código da aplicação em si, mas achei interessante mostrar como é simples enviar um arquivo para o seu balde à partir de uma aplicação Node (o nosso caso).

Para tal, escolhi usar uma biblioteca que já faz todo o trabalho de conexão com a API do Cloud Storage no Node, chamada @google-cloud/storage, e pode ser instalado via NPM ou Yarn (clica em cada um se não sabe o que significam) em seu projeto. Para usar esta biblioteca, precisamos gerar uma chave válida de acesso à API do Cloud para seu projeto. Então vamos no menu do Console em IAM e Admin > Contas de serviço.

Você verá que já existe uma conta de serviço criada, porém esta conta ainda não possui um ID de Chave criado. Então vamos clicar no menu com três pontinhos na linha da conta e escolher a opção Criar chave.

No modal que se abre, escolha o Tipo de chave como sendo JSON, clique em CRIAR e salve o arquivo na pasta raiz do seu projeto Node. Mas atenção, guarde uma cópia desse arquivo em algum lugar seguro, pois é com ele que você terá acesso à outras APIs do Cloud futuramente

Agora, com a biblioteca instalada via NPM no meu projeto, vou criar um método no arquivo api/controllers/EventoController.js chamado upload e configurar esta ação. Antes temos de instanciar a biblioteca e configurar a chave da API:

E em seguida configuro meu método de upload:

E pronto! Chegamos ao final de mais um artigo da série e agora nossa aplicação já possui um método de fazer o upload das artes dos eventos e armazená-las no nosso intervalo lá no Cloud Storage.

Neste artigo aprendemos a criar um Intervalo no Cloud Storage, a configurar este intervalo para acesso público, a criar e exportar a credencial e chave de acesso à API e a utilizar uma biblioteca disponível no NPM para enviar arquivos neste intervalo.

--

--

Walter Gandarella
Blog do LFDev

Poeta, programador fullstack, aventureiro, apaixonado por fotografia e tecnologia. Photoshop Heavy User!