Conteinerizar um app Kotlin do Spring Boot e implantá-lo no Cloud Run
Sobre este codelab
1. Antes de começar
O Google oferece uma ferramenta avançada de criação de imagens com que você pode criar e publicar facilmente uma imagem de contêiner otimizada do Docker para aplicativos Java sem necessidade de Docker ou Dockerfile. O Google Cloud também leva a computação sem servidor para os contêineres com o Cloud Run, uma plataforma de computação gerenciada que escalona automaticamente seus contêineres sem estado. Neste codelab, você verá como é fácil contentorizar o app Kotlin do Spring Boot, publicar no Container Registry e executar a imagem no Google Cloud de maneira perfeita.
O codelab mostra como configurar um app simples em Kotlin, que demonstra o uso dos serviços e das ferramentas do Google Cloud, incluindo Jib, Container Registry e Cloud Run.
Prerequisites
- Familiaridade com uma linguagem de programação Java e ferramentas
- Conhecimento sobre os editores de texto padrão do Linux, como Vim, Emacs e nano
Atividades do laboratório
- Configure um app Kotlin de inicialização do Spring.
- Crie uma imagem otimizada do Docker.
- Publique a imagem no Container Registry.
- Execute o app em contêiner no Cloud Run.
Pré-requisitos
- um projeto do Google Cloud;
- Um navegador, como o Google Chrome
2. Etapas da configuração
Configuração de ambiente personalizada
- Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Se você ainda não tem uma conta do Gmail ou do G Suite, crie uma.
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID
.
- Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução por este codelab não deve custar mais do que alguns dólares, mas pode ser mais se você decidir usar mais recursos ou se deixá-los em execução.
Novos usuários do Google Cloud estão qualificados para um teste sem custo financeiro de US$ 300.
Cloud Shell
Embora o Google Cloud possa ser operado remotamente do seu laptop, neste codelab você usará o Cloud Shell, um ambiente de linha de comando executado no Google Cloud.
Ativar o Cloud Shell
- No Console do Cloud, clique em Ativar o Cloud Shell
.
Se você nunca tiver iniciado o Cloud Shell, verá uma tela intermediária (abaixo da dobra) com a descrição do que ele é. Se esse for o caso, clique em Continuar e você não o verá novamente. Esta é uma tela única:
Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.
Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Praticamente todo o seu trabalho neste codelab pode ser feito em um navegador ou no seu Chromebook.
Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto já estará configurado com seu ID do projeto.
- Execute o seguinte comando no Cloud Shell para confirmar que você está autenticado:
gcloud auth list
Resposta ao comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Resposta ao comando
[core] project = <PROJECT_ID>
Se o projeto não estiver configurado, faça a configuração usando este comando:
gcloud config set project <PROJECT_ID>
Resposta ao comando
Updated property [core/project].
3. Inicializar um app Spring Boot
- Gere um novo app Spring Boot com o Spring Initializr.
$ curl https://start.spring.io/starter.tgz \ -d language=kotlin \ -d dependencies=web \ -d baseDir=kotlin-jib-cloud-run | tar -xzvf -
O Initializr adicionará automaticamente o spring-boot-starter-web
às suas dependências no pom.xml
do app modelo.
- Mude para o diretório do app de modelo.
$ cd kotlin-jib-cloud-run
- Crie e execute o app usando o Maven.
$ ./mvnw -DskipTests spring-boot:run
- Depois de iniciado, o app começará a ouvir na porta 8080. Clique em Visualização na Web
na barra de ferramentas do Cloud Shell e selecione Visualizar na porta 8080 para acessar o app.
- Você receberá uma resposta 404 porque o app ainda não faz nada de útil. Pare o app com o app
Control+C
.
4. Adicionar um controlador da Web
- Crie a seguinte classe
Controller
no pacote de demonstração:
$ vi src/main/kotlin/com/example/demo/Controller.kt or $ nano src/main/kotlin/com/example/demo/Controller.kt
src/main/kotlin/com/example/demo/Controller.kt (link em inglês)
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class Controller {
@GetMapping("/")
fun saySomething(): String {
return "Kotlin app on Cloud Run, containerized by Jib!"
}
}
- Recrie e execute o app.
$ ./mvnw spring-boot:run
- Verifique o app novamente usando a Visualização na Web
. Desta vez, você verá a mensagem "quoquo;
Kotlin app on Cloud Run, containerized by Jib!
"quot;. Pare o aplicativo comControl+C
.
5. Coloque seu app em contêiner e publique no Container Registry
Com o Jib, é possível colocar seu app em contêineres de maneira otimizada, sem o Docker e publicar em qualquer registro de contêiner.
- Antes de continuar, ative a API Container Registry. Isso só precisa ser feito uma vez por projeto para tornar a API acessível.
$ gcloud services enable containerregistry.googleapis.com
- Execute o Jib para criar uma imagem do Docker e publicá-la no Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run
Depois você verá a mensagem abaixo, em um contêiner, que será enviado ao Container Registry.
[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run ... [INFO] BUILD SUCCESS
Se ocorrer um erro, verifique se $GOOGLE_CLOUD_PROJECT
está definido corretamente no ID do projeto do Google Cloud (PROJECT_ID
).
- Antes de continuar, verifique se a imagem foi publicada. Volte para o Console do Cloud, clique em Menu de navegação
e selecione Container Registry.
Você verá que a imagem foi publicada.
6. Executar o app em contêiner no Cloud Run
O Cloud Run traz os contêineres para a computação sem servidor.
- Clique em Menu de navegação
novamente e selecione Cloud Run.
Se esta for a primeira vez que você acessa o Cloud Run, a caixa de diálogo para configuração única será exibida. Clique em Começar a usar o Cloud Run se ele aparecer.
- Na página do Cloud Run, clique em Criar serviço.
- Na próxima tela, clique em Selecionar em Origem. A origem é a imagem que você quer executar no Cloud Run.
- A caixa de diálogo mostrará a imagem que você criou anteriormente. Selecione a imagem e clique em Continuar.
- Falta pouco para você implantar o app. Em Plataforma de implantação, escolha Cloud Run (totalmente gerenciado) para que o serviço seja totalmente gerenciado no Google Cloud. Escolha uma região apropriada para seu local, selecione Permitir invocações não autenticadas e clique em Criar. Pronto!
Quando a imagem estiver totalmente implantada, a página do Cloud Run exibirá um URL para acessar o app. Confira!
No final, você verá a mensagem esperada no app.
Kotlin app on Cloud Run, containerized by Jib!
Pronto! No futuro, para implantar novas versões do app, clique em Implantar nova revisão na página.
7. Limpar
- Para limpar o ambiente, é necessário excluir o app implantado no Cloud Run e a imagem publicada no Container Registry. Acesse o Cloud Run, selecione o app e clique em Excluir.
- Da mesma forma, acesse a página do Container Registry e exclua a imagem.
8. Parabéns
Parabéns! Você colocou o app Kotlin da Spring Boot em um contêiner e o implantou no Cloud Run.
Usando o Jib, você criou uma imagem de contêiner otimizada sem que o Docker tenha sido instalado ou gravado um Dockerfile e o publicou no Container Registry. O Jib otimiza a construção de imagens para que qualquer pessoa sem conhecimento detalhado do Docker possa conteinerizar aplicativos Java de maneira rápida e eficiente. Em seguida, com alguns cliques, você implantou o app no Cloud Run para começar a veicular em pouco tempo.
Saiba mais
- Implantar um app Java no Kubernetes no Google Kubernetes Engine
- Documentação do Cloud Run
- Visão geral do Cloud Run
- Conheça a Jib: crie imagens Java do Docker melhor
- Crie contêineres mais rapidamente com o Jib, uma ferramenta de criação de imagens do Google para apps Java
- Jib: conteinerizar seu app Java
- Canal do Jib Gitter
- Lista de e-mails de usuários do Jib