Conteinerizar um app Kotlin do Spring Boot e implantá-lo no Cloud Run

Conteinerizar um app Kotlin do Spring Boot e implantá-lo no Cloud Run

Sobre este codelab

subjectÚltimo abr. 22, 2020 atualizado
account_circleEscrito por um Googler

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

  1. 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.

  1. 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

  1. 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.

  1. 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

  1. 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.

  1. Mude para o diretório do app de modelo.
$ cd kotlin-jib-cloud-run
  1. Crie e execute o app usando o Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. 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.

  1. 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

  1. 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!"
 
}
}
  1. Recrie e execute o app.
$ ./mvnw spring-boot:run
  1. 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 com Control+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.

  1. 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
  1. 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).

  1. 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.

  1. 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.

  1. Na página do Cloud Run, clique em Criar serviço.

  1. Na próxima tela, clique em Selecionar em Origem. A origem é a imagem que você quer executar no Cloud Run.

  1. A caixa de diálogo mostrará a imagem que você criou anteriormente. Selecione a imagem e clique em Continuar.

  1. 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

  1. 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.

  1. 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