loading...
Cover image for Seu primeiro serviço Go na Google Cloud App Engine.

Seu primeiro serviço Go na Google Cloud App Engine.

odilonjk profile image Odilon Jonathan Kröger ・6 min read

Você já pensou em subir um serviço na Google Cloud (GCP) mas não sabe por onde começar?
Então acompanhe essa publicação onde mostrarei como subir um serviço simples utilizando a GCP App Engine. É mais fácil o que parece! :)
Ah, sabe aquelas playlists de LoFi Hip Hop (tem no Youtube, Spotify, etc.)? É uma boa pedida para acompanhar a leitura. ;D

Primeiros passos

Antes de mais nada, e necessário criar uma conta na Google Cloud.
Você irá receber um valor de bônus para testar a plataforma. Não precisa se preocupar, esse exemplo não chega nem perto de causar algum gasto para você. Mas é importante SEMPRE que for parar de realizar testes, parar os serviços para evitar surpresas no futuro.

Feita a conta, agora vamos acessar o console da plataforma.
No canto direito, é possível ir em preferências e escolher o idioma que você prefere, seja português, inglês ou outro.

Preferências

Beleza, agora no canto esquerdo, é possível selecionar um projeto ou criar um novo. Clique ali nessa opção, pois iremos criar um projeto novo! :D

Selecionar projeto

Nesta nova tela, clique em novo projeto.

Novo projeto

A tela a seguir é bastante intuitiva, como podemos ver abaixo. Eu coloquei no nome do projeto como sendo primeiro-servico-gcp.

Meu primeiro serviço GCP

Pronto! Agora que já temos um projeto criado na GCP, podemos seguir para os próximos passos. ^^

Criando o primeiro serviço

Vamos abrir o Menu de navegação no canto esquerdo superior. Basta acessar o menu e em seguida App Engine -> Painel.
Se tudo der certo, provavelmente você verá a tela abaixo.

Criar aplicativo

Basta clicar em Criar aplicativo. No próximo passo você deve escolher a partir de qual região você quer que seu código fique rodando. Pode manter como US Central. Cada região tem uma tabela de preços e também uma gama diferente de serviços disponíveis, mas para nosso exemplo isso não faz diferença, então não precisa se preocupar com isso.

Após selecionar a região, chegou o momento de escolher qual linguagem vamos utilizar. Para esse exemplo a linguagem escolhida foi Go ❤️.
Para o campo Environment, pode deixar Padrão.

Aplicativo em Go

Mais uma etapa concluída! Agora falta pouco.

Utilizando Cloud Shell

Uma das formas de criar a aplicação e realizar o deploy, é criando o código com seu editor favorito (Atom, VS Code, Sublime, etc.), baixando a SDK da GCP e realizando o deploy pelo seu terminal.
Outra forma, é utilizar o próprio terminal, chamado de Cloud Shell que a GCP nos oferece. Essa é a forma que vamos utilizar hoje.
Caso você já queira baixar a SDK para utilizar no futuro, basta acessar o Quickstart e selecionar de acordo com o seu sistema operacional. Se vocês quiserem, posso escrever uma publicação falando sobre isso! :D

Bom, vamos voltar ao assunto de hoje!
No canto superior direito, conseguimos acessar o Cloud Shell que utilizaremos. Pense no Cloud Shell como sendo um terminal rodando na plataforma da Google Cloud, que já tem a SDK deles instalada e mais algumas outras coisinhas, como o Vim e nano.

Menu Cloud Shell

Clicando nesse botão acima, você irá acessar o Cloud Shell, que aparecerá na parte inferior da tela. Se for da sua preferência, você pode expandir o Cloud Shell para cima, de forma que ocupe praticamente o browser inteiro. Eu gosto de utilizar o terminal assim, então fica assim a tela:

Cloud Shell aberto

Se você quiser, pode rodar o comando go version, que verá a versão atual instalada no seu ambiente.

Quero código! Cadê?

Lá vamos nós! Código!!!
Primeiro vamos acessar o diretório gopath.
cd gopath
Em seguida, vamos criar o diretório do nosso serviço. Você pode, por exemplo, executar o comando abaixo.
mkdir meu_primeiro_servico && cd $_
Esse comando cria o diretório meu_primeiro_servico e logo em seguida usa o comando $_ para entrar no diretório recém criado.

A primeira coisa que vamos criar, é um arquivo de configuração, necessário para rodar o serviço. Vamos utilizar o editor nano para codificar, ou se você preferir o Vim, também pode ser utilizado.
Execute o comando abaixo para criar o arquivo app.yaml.
nano app.yaml
Agora com o editor aberto no arquivo, basta adicionar a linha: runtime: go113. Como na imagem abaixo.

app.yaml

Agora basta pressionar Ctrl+o e em seguida Enter para salvar o arquivo. Para sair do nano, pressione Ctrl+x.

E finalmente, vamos o código Go. É possível criar um projeto modularizado, mas para esta publicação, vou seguir o caminho mais simples. Crie o arquivo com o comando abaixo.
nano main.go

Dentro do arquivo, vamos iniciar informando que é o pacote main. Em seguida adicionamos os imports necessários:

import (
    "fmt"
    "log"
    "net/http"
    "os"
)

Vamos também criar a função main, conforme abaixo.

func main() {
    http.HandleFunc("/", imprimirOlaMundo)
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
        log.Printf("Utilizando porta padrão %s", port)
    }

    if err := http.ListenAndServe(":"+port, nil); err != nil {
        log.Fatal(err)
    }

}

Esta função está utilizando o client HTTP nativo da linguagem Go. Nele estamos monitorando chamadas para o caminho raiz /. Também tem uma condição, para caso não tenha sido setada uma porta no ambiente, seja utilizada a porta 8080. Mas você não precisa se preocupar com isso agora.
Também foram adicionados alguns logs, apenas para informar qual porta está sendo utilizada.

Repare que no mapeamento do caminho /, estamos chamando a função imprimirOlaMundo. Bora lá implementar essa função!

func imprimirOlaMundo(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Olá mundo! Eu consegui!!! :D")
}

Essa função recebe por parâmetro o http.ResponseWriter e o ponteiro *http.Request. É o padrão do client HTTP que mencionei acima.
Dentro da função basta imprimir a mensagem desejada, que no nosso caso é um Olá mundo.

Seu arquivo deve estar parecido como o da imagem abaixo.

main.go

Para salvar o arquivo, novamente utilize Ctrl+o e em seguida Enter. Para sair pressione Ctrl+x.

Chegou a hora do deploy!

Agora que temos os arquivos app.yaml e main.go criados, vamos realizar o deploy do serviço. É muito simples! Basta executar o comando abaixo.
gcloud app deploy
Ele vai pedir para continuar, basta responder com y.
Pronto! Seu serviço já está disponível na nuvem!!! \o/
Provavelmente no seu Cloud Shell, você deve estar vendo algo similar ao que existe na imagem abaixo.

Deploy

Note que os logs inclusive nos informam o endereço onde o serviço está disponível. Basta copiar o endereço e abrir em uma nova aba do seu browser para testar o seu serviço.

Olá mundo

Meus parabéns!!! Você acabou de disponibilizar seu primeiro serviço utilizando App Engine da GCP!

Ah, agora você já pode fechar o Cloud Shell. O botão de fechar fica na parte superior do Cloud Shell, no canto direito.

E agora?

Se você quiser ver dados sobre suas chamadas do serviço, pode ir no Menu de navegação no canto superior esquerdo, App Engine -> Painel. Nessa tela existem dados como quantas chamadas foram realizadas e até mesmo o custo.

Como eu mencionei no início da publicação, após realizarmos nossos testes, é sempre bom desligar os serviços, apenas para evitar ficar no esquecimento e daqui um ano receber uma conta indesejada. Acredite, já vi isso acontecer mais de uma vez com colegas de trabalho.
Para desligar o serviço, vamos acessar o Menu de navegação no canto superior esquerdo e ir em IAM e Admin -> Configurações.

Menu IAM e Admin

Em seguida, com o projeto que acabos de criar selecionado, basta clicar em encerrar e na tela que for abrir, para permitir o encerramento do projeto, preencher o campo com o nome do projeto e confirmar.

Encerrar projeto

Prontinho! Agora não precisa se preocupar em receber uma conta por causa de algum serviço que ficou de pé.

Curtiu?

E aí, curtiu a experiência de criar um serviço na nuvem utilizando GCP? Achou complicado, achou fácil? Deixe seu comentário abaixo. :)

Discussion

markdown guide
 

Muito de boa pra fazer, abrindo o código pelo editor do cloud shell ficou melhor pra visualizar.