Alura > Cursos de DevOps > Cursos de Google Cloud Platform > Conteúdos de Google Cloud Platform > Primeiras aulas do curso Google Cloud Serverless: crie aplicações robustas e escaláveis

Google Cloud Serverless: crie aplicações robustas e escaláveis

Conectando com o Google Cloud - Introdução

Boas-vindas ao curso de Google cloud, meu nome é Mateus e vou te acompanhar durante essa jornada. Nesse curso vamos aprender várias tecnologias diferentes. Vamos criar uma aplicação que recebe atividades do fórum da Alura e passa para o pubsub, que é um serviço de filas do Google cloud.

Depois a gente vai pegar esses dados do pubsub e vai persistir dentro dos bancos de dados, para isso a gente vai utilizar cloud functions do tipo background, http, e com o banco de dados também vamos usar o big query, onde a gente cria algumas tabelas e datasets para a gente conseguir trabalhar nos nossos dados.

Para configurar tudo isso, vamos utilizar o serverless, é um framework feito para trabalhar com serviços em nuvem. No caso estamos usando o Google cloud, mas também podemos utilizar com vários outros tipos de provedores de serviços.

A gente também vai criar uma API para conseguir consumir os dados que a gente salvou na tabela. A gente vai passar por como criar uma autenticação básica para restringir o acesso à nossa API, e para a gente conseguir facilitar o uso de tudo a gente vai criar uma imagem do docker.

A partir dessa imagem do docker a gente vai conseguir publicar essa imagem dentro do Google cloud para conseguir compartilhar somente com as pessoas que a gente quer que acessem nossa aplicação.

Falando em Google cloud, tudo isso que a gente vai fazer também conseguimos acompanhar usando um painel do Google cloud. Aqui a gente consegue ver as funções que a gente vai criar, as nossas tabelas, os dados que a gente usar na nossa tabela, conseguimos acompanhar nossas imagens do docker que a gente publica, que todas são sempre privadas, a gente pode alterar o acesso, a visibilidade das nossas imagens.

E para conseguir trabalhar com a imagem que a gente criou da nossa aplicação a gente também vai usar o Kubernetes engine, que é a engine do Kubernetes usando o Google cloud. Aqui a gente pode criar algum cluster ou vários clusters para trabalhar com nossas aplicações.

A gente consegue expor nossas aplicações através de serviços, e também acomodar dados sensíveis usando segredos do Google cloud. Se você tem interesse em qualquer uma dessas tecnologias, esse curso é feito especialmente para você. Vamos começar?

Conectando com o Google Cloud - Primeira função com Serverless

Quando o aluno ou aluna da Alura faz alguma atividade dentro do fórum, como fazer uma pergunta ou responder alguém, a gente precisa que o fórum pegue essas informações e persista no banco de dados. Para isso, a gente vai criar um endpoint http, que vai ser hospedado dentro do Google cloud function, e através desse endpoint o fórum vai pegar as informações sobre a atividade e persistir no banco de dados por esse endpoint.

Para começar, a gente vai abrir o visual studio. Mas a gente vai ter que trabalhar com Google cloud function, com Google cloud, configuração, autenticação e etc. A gente vai utilizar um framework chamado service para facilitar nosso trabalho. Esse framework a gente consegue instalar pelo npm e ele basicamente ajuda e facilita a gerência de projetos que são hospedados em serviços em nuvem.

A gente está utilizando com o Google cloud, mas pode utilizar com ws, com Azure e etc. Primeiro vou clicar em terminal, new terminal, vou abrir o terminal do visual studio, e através no npm vou instalar a interface de linha de comando do serverless.

Vou digitar npm install -g serverless. Com esse parâmetro atualizando para o npm que quero instalar a interface em toda a minha máquina para todo mundo conseguir utilizar.

O comando de instalação pode demorar um pouco. Vamos esperar. Tenho o comando do serverless instalado, mas não sei como utilizo ele. Vou digitar serverless —help. Esse parâmetro help serve para saber como consigo utilizar o comando, ele serve em todo o escopo do serverless, consigo utilizar com qualquer comando.

Aqui tenho uma lista de comandos para utilizar, e a gente vai utilizar esse create pela descrição, ele cria um novo serviço no serverless. Só que não sei o que posso passar para esse comando. Vou digitar serverless, create, help, para pegar uma lista de comandos que consigo utilizar e passar para esse comando.

Aqui tenho alguns parâmetros, um deles é o template. O que é um template? Basicamente é um conjunto de configurações de arquivos para iniciar seu projeto. Tenho template para ws, para Azure, cloud flare, e para o Google node js. Vou utilizar esse aqui, já posso digitar serverless create template igual Google node js.

Tem outro parâmetro que também vou utilizar, que é o path. Ele recebe o caminho que vai conter a pasta do nosso projeto. Vou digitar path igual fórum traço Alura. Assim o serverless vai criar dentro da pasta que estou agora, que é no caso a minha home, uma pasta chamada fórum Alura contendo os arquivos iniciais do nosso projeto.

Dei um enter aqui, ele já gerou os arquivos, deu uma mensagem e até apontou o caminho. E para visualizar melhor nosso projeto, vou abrir o explorador de arquivos do visual studio, para isso vou usar o atalho "Ctrl + Shift + E", e como não selecionei o nome da pasta do projeto, ele vai pedir para a gente selecionar essa pasta.

Vou clicar no botão azul open folder. Vamos navegar até minha home, clicar na pasta fórum Alura, e vou dar ok. Ele vai recarregar o visual studio, fechar meu terminal e abrir o navegador de arquivos com a pasta aberta e os arquivos.

Agora preciso criar o arquivo que vai conter a função que vai processar o meu endpoint http. Para isso vou passar o mouse em cima do nome da pasta, no navegador de arquivos, e vou clicar nesse ícone de mais, com um arquivo na frente. Ele vai pedir para digitar um nome e um caminho de um arquivo.

Quero armazenar esses arquivos de funções dentro de uma pasta chamada funções. Vou digitar funções barra o nome do arquivo, vou chamar de recebe atividade, e a função em si vou chamar de recebe atividade. Vai ficar funções barra recebe atividade js.

Aqui ele já vai criar para mim a pasta e dentro dela o arquivo, e vai abrir o arquivo para poder digitar. O que esse arquivo vai conter? Ele vai exportar a função recebe atividade que processa requisição. Vou digitar module exports igual a function, o nome da função vai ser recebe atividade, e como é uma função do tipo http, dentro do Google cloud function, ela recebe dois parâmetros.

O primeiro parâmetro representa a informação da requisição, vou chamar de requisição, e o segundo parâmetro representa a resposta da requisição, que vou chamar de resposta. Dentro da nossa função, para a gente começar do básico a testar nossa função vou primeiro pegar as informações da requisição e vou logar no meu terminal e vou enviar de volta na resposta.

Para a gente logar as informações do terminal vou usar a função chamada console log e consigo acessar as informações da requisição dentro da propriedade de body, vou digitar requisição body, e para enviar de volta o que eu recebi vou usar o método send do objeto resposta.

Vou digitar resposta send, e aqui o visual studio já aponta para mim que essa função aceita um único parâmetro e esse parâmetro é uma string. Só que como estou recebendo de uma requisição posso receber um array, um objeto, um número ou qualquer outro valor que não seja uma string.

Como faço para enviar esse valor de volta como string? Posso usar a função stringfy do objeto JSON. Ele recebe qualquer valor em Java script e retorna esse valor como uma string em formato JSON. Vou digitar requisição body e vou salvar.

Aqui a gente já criou nosso projeto usando template do serverless, e já criei também a nossa função recebe atividade, onde ela está logando que a gente está recebendo e enviando de volta o que a gente está recebendo.

A seguir a gente vai ver como a gente consegue autenticar o serverless com Google cloud e fazer o deploy da nossa função.

Conectando com o Google Cloud - Conexão com o Google Cloud

Temos aqui nossa função recebe atividade, ela representa nossa linha de chegada dp, porém a gente ainda não consegue acessar nem utilizar nosso código porque ele só emite na nossa máquina.

O que precisamos fazer agora é configurar o service, dizer para ele quais são nossas funções, como elas funcionam, como elas devem ser utilizadas, pegar nossos dados, nossas informações, empacotar, aplicar no Google cloud function e conseguir um domínio para utilizar nossa função.

Vamos começar abrindo o service yml. Esse é um arquivo de configuração gerado pelo service quando criamos nosso projeto. A gente pode descer aqui e procurar pela parte de functions na linha 26. A chave do dicionário representa o nome da função que vai estar dentro do Google cloud function. Dentro dela a gente tem duas funções, duas propriedades importantes, uma delas é o handler, que representa o nome da nossa função em Java script, que no caso da função de exemplo está como http. E a gente tem os eventos que vão disparar nossa função, que no caso tem o evento http.

Ou seja, toda essa função vai ser do tipo http, mas como o service faz para conseguir achar e descobrir onde está nossa função só pelo nome dela? Primeiro vamos abrir o arquivo package.json. Ele vai procurar pela propriedade main. Essa propriedade representa o arquivo principal do nosso projeto, ele espera que esse arquivo esteja importando a função que a gente declarou no service yml.

Vamos abrir aqui o index js, a gente pode ver que ele está exportando duas funções, uma chama http e outra chama event, e lá no service yml a gente consegue linkar essa função com o nome do handler. A gente está declarando o http e ele vai pegar a função http que está dentro do arquivo js.

Agora o que a gente precisa fazer é configurar nossa função. Vamos aproveitar essa configuração aqui, vamos apenas renomear e ao invés de first vamos apagar e vamos colocar como recebe atividade, que é o nome da nossa função. Ou seja, lá no Google cloud a função vai se chamar recebe atividade. O handler dela, ou seja, a função Java script vai se chamar também recebe atividade.

Vamos salvar aqui e o que a gente precisa agora é declarar essa função dentro do index js. Vamos abrir o arquivo, apagar todo o código que tem aqui, selecionar com "Ctrl + A” e apagar e vamos exportar agora a função recebe atividade, só que nossa função está dentro de um arquivo na pasta de funções. Então, o que vamos fazer é requerer esse arquivo, vamos usar a função require. Vamos passar o caminho para o nosso arquivo, que é funções recebe atividade.

Feito isso podemos fechar o navegador de arquivo. Vamos abrir o terminal e fazer o deploy do nosso projeto. Para fazer o deploy a gente só precisa executar o comando deploy do serverless. Vamos digitar serverless deploy e enviar para o Google cloud.

Ao executar o comando a gente recebeu um erro. Se a gente subir para dar uma olhada podemos ver que a mensagem de erro diz que não conseguiu encontrar um arquivo chamado keyfile.json na pasta Gcloud dentro da raiz do usuário, e isso acontece porque não configuramos ainda a autenticação do usuário.

Vamos abrir agora o painel do Google cloud, vamos procurar o navegador, abrir uma nova aba, digitar console cloud Google. Assim a gente vai conseguir acessar o painel do Google cloud. Vamos clicar no ícone do menu hamburguer no canto superior esquerdo, ele vai expandir o menu para a gente. Vamos procurar em administrador, passar o mouse por cima. Ele vai expandir mais algumas opções e vamos acessar a página conta de serviço.

O que é uma conta de serviço? Conta de serviço é como se fosse uma conta de usuário. A diferença é que ao invés de representar uma pessoa, ele vai representar um programa ou um serviço que vai consumir a conta do Google cloud.

Vamos clicar no botão clicar, criar conta de serviço, ele vai abrir uma página com três etapas. Na primeira etapa precisamos definir o nome do nosso serviço, que vai ser fórum Alura. Vamos clicar em criar. Na segunda etapa precisamos escolher as permissões da conta de serviço.

Vamos clicar em procurar por proprietário na seção de projeto, já vai ser a primeira a exibir aqui, vamos clicar em continuar, e na última etapa vamos criar uma chave de acesso. Vamos descer e clicar no botão de criar chave, ele vai expandir na lateral, e aqui a gente precisa escolher duas opções de chave, a gente tem JSON e P12, vamos escolher o tipo JSON e vamos clicar em criar.

Ele vai pedir para salvar um arquivo, que a gente vai salvar na raiz do nosso projeto. Vou navegar até lá. Vamos renomear o arquivo para autenticação JSON, e vamos salvar.

Podemos voltar ao visual studio, fechar o terminal, digitar exit, dar um enter, vamos abrir o navegador de arquivos, e aqui a gente pode ver que ele já reconheceu o arquivo de indicação. Vamos abrir ele. Conseguimos ver que tem várias configurações aqui, como chave privada e etc. Vai ser uma das que a gente precisa copiar agora, que é o id do projeto. Chama project id.

Vamos copiar o valor dele, selecionar e copiar. Vamos voltar ao service yml, e aqui em cima, um pouco mais para cima temos uma seção de provider. Essa seção representa todas as configurações que a gente tem em relação ao serviço em nuvem que a gente está consumindo. No caso é o Google. A gente tem a parte de projeto, onde a gente vai colar o que a gente copiou, que é o id do nosso projeto, e um pouco mais para baixo a gente tem um caminho das credenciais do nosso projeto.

Aqui ele está apontando para o mesmo arquivo que apontou na mensagem de erro. A gente vai apagar e vamos escrever com ponto barra autenticação JSON, que é o arquivo que a gente criou. Vamos salvar, fechar o navegador de arquivo, voltar para o terminal, e agora conseguimos executar o deploy do nosso projeto. Vamos digitar serverless deploy, apertar enter.

Esse comando pode demorar, porque o serverless tem que pegar todo o nosso projeto, empacotar ele, enviar para o Google cloud, validar esse arquivo e depois aplicar as configurações, então é normal que demore um pouco. Vamos aguardar.

Com nossa função já enviada para o Google cloud a gente pode ver que aqui na mensagem do terminal a gente recebeu o nome da nossa função e a url. Essa url é o endpoint que foi criado para a gente conseguir acessar e utilizar a função. A gente precisa selecionar aqui, vou usar o comando "Ctrl + Shift + C" para copiar, voltar para o navegador, abrir uma nova aba. Vamos colar essa url e acessar.

Recebemos aqui um erro de acesso negado, e a mensagem diz que nosso cliente não tem permissão para acessar essa url, e isso acontece porque o http do Google cloud sempre recebe um acesso restrito logo de começo. A gente precisa configurar, desativar a autenticação do Google cloud.

Vamos voltar no painel, fechar esse diálogo, clicar no item do menu de novo, procurar por cloud functions. Aqui a gente vai cair numa página que vai listar nossas funções. A gente pode ver que tem as listas das funções. Dentro tem o nome da função, a gente pode ver a região, quem está acionando a função, a versão, e outras opções.

O que a gente vai selecionar aqui no canto é nossa função. Vamos clicar em mostrar painel de informações, a gente vai clicar no item adicionar membro, e a gente vai adicionar todos os usuários para essa função. Vamos digitar all users, vamos selecionar aqui, e no papel a gente vai procurar por chamador do cloud functions. Vamos selecionar nesse papel, clicar em salvar, ele vai perguntar se a gente tem certeza que quer tornar esse recurso público. Vamos clicar em permitir acesso público. Assim a gente vai ter nossa função pública e a gente consegue acessar para qualquer pessoa na internet.

Vamos voltar agora para a mesma aba, vamos recarregar, vamos acessar de novo, e agora a gente recebeu um objeto vazio porque a gente não enviou nada, então ele considera que a gente enviou um objeto vazio e responde na requisição um objeto vazio.

Já temos nossa função, que está no Google cloud. A gente vai configurar pelo serverless e a seguir a gente vai ver como consegue integrar nossa função com o Google cloud pubsub.

Sobre o curso Google Cloud Serverless: crie aplicações robustas e escaláveis

O curso Google Cloud Serverless: crie aplicações robustas e escaláveis possui 144 minutos de vídeos, em um total de 45 atividades. Gostou? Conheça nossos outros cursos de Google Cloud Platform em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Google Cloud Platform acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas