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

1. Antes de começar

O Google oferece uma ferramenta eficiente de criação de imagens com que você cria e publica facilmente uma imagem otimizada de contêiner do Docker para apps Java sem precisar do Docker ou do 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 contêineres sem estado. Neste codelab, você verá como é fácil conteinerizar seu app Spring Boot Kotlin, publicar no Container Registry e executar a imagem no Google Cloud de maneira integrada.

Este codelab mostra como configurar um app simples em Kotlin, que demonstra o uso de serviços e ferramentas do Google Cloud, incluindo Jib, Container Registry e Cloud Run.

Pré-requisitos

  • Conhecer a linguagem de programação e as ferramentas Java
  • Conhecimento sobre editores de texto padrão do Linux, como Vim, Emacs e nano.

Atividades deste laboratório

  • Configure um app Kotlin do Spring Boot.
  • Criar uma imagem do Docker otimizada.
  • Publique a imagem no Container Registry.
  • Execute o app conteinerizado no Cloud Run.

O que é necessário

  • um projeto do Google Cloud;
  • Um navegador, como o Google Chrome

2. Etapas da configuração

Configuração de ambiente autoguiada

  1. Faça login no console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.

A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$300 de avaliação sem custo financeiro.

Cloud Shell

Embora o Google Cloud possa ser operado remotamente em um laptop, neste codelab você vai 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 Shell4292cbf4971c9786.png.

bce75f34b2c53987.png

Se você nunca iniciou o Cloud Shell antes, uma tela intermediária (abaixo da dobra) será exibida com a descrição dele. Se esse for o caso, clique em Continuar (e você não verá mais esse aviso). Esta é a aparência dessa tela única:

70f315d7b402b476.png

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

fbe3a0674c982259.png

Essa máquina virtual tem 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`
  1. Execute o seguinte comando no Cloud Shell para confirmar que o comando gcloud sabe sobre seu projeto:
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, configure-o usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

3. Inicializar um aplicativo 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 vai adicionar o spring-boot-starter-web automaticamente às dependências no pom.xml do app de 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. Uma vez iniciado, o aplicativo começará a escutar na porta 8080. Clique em Visualização na Web 396bfd51f55afb5d.pngna barra de ferramentas do Cloud Shell e selecione Visualizar na porta 8080 para acessar o app.

4172e1e141daf0c1.png

  1. Você vai receber uma resposta 404 porque o app ainda não faz nada útil. Interrompa o app usando Control+C.

4. Adicionar um controlador da Web

  1. Crie a classe Controller abaixo 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

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 da Web a6cfcaa1d2119c52.png. Desta vez, a mensagem "Kotlin app on Cloud Run, containerized by Jib!" vai aparecer. Interrompa o app com Control+C.

5. conteinerize seu app e publique no Container Registry

Com o Jib, você conteineriza seu aplicativo de maneira otimizada sem usar o Docker e publica em qualquer registro de contêiner.

  1. Antes de continuar, você precisa ativar 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 publicar no Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

Por fim, você verá a mensagem a seguir informando que o aplicativo foi conteinerizado e enviado ao seu Container Registry.

[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run
...
[INFO] BUILD SUCCESS

Se você receber um erro, verifique se $GOOGLE_CLOUD_PROJECT está definido corretamente com o ID do projeto do Google Cloud (PROJECT_ID).

  1. Antes de continuar, confira se a imagem foi publicada. Volte ao console do Cloud, clique no Menu de navegação c8b4ea3c68f4c1e3.png e selecione Container Registry.

6421550ba806beab.png

38ae0ca573c3dcd.png

Você verá que a imagem foi publicada.

c9086605411691c3.png

6. Executar o app conteinerizado no Cloud Run

O Cloud Run leva os contêineres sem servidor para os contêineres, escalonando automaticamente seus contêineres sem estado.

  1. Clique no Menu de navegação c8b4ea3c68f4c1e3.png novamente e selecione Cloud Run.

812c7c87527ebe4a.png

Se esta for a primeira vez que você acessa o Cloud Run, a seguinte caixa de diálogo de configuração única será exibida. Clique em Começar a usar o Cloud Run se ele aparecer.

1b2bf05712f6150a.png

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

c0b4b980662f7807.png

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

2049621ae97d62ee.png

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

564367bc65caefbf.png

  1. Faltam apenas alguns cliques para implantar o aplicativo. Em Plataforma de implantação, escolha Cloud Run (totalmente gerenciado) para ter o serviço 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!

3eb0f51d15326cac.png

Quando a imagem estiver totalmente implantada, a página do Cloud Run exibirá um URL para acessar o app. Confira!

8bf800dd6e2f44f2.png

No final, você verá a mensagem esperada do app.

Kotlin app on Cloud Run, containerized by Jib!

Pronto! No futuro, se você precisar implantar novas versões do app, clique em Implantar nova revisão na página.

7. Limpar

  1. Para limpar o ambiente, exclua o app implantado no Cloud Run e a imagem publicada no Container Registry. Acesse o Cloud Run, selecione o app e clique em Excluir.

1dfc2f51c1b5f6e.png

  1. Da mesma forma, acesse a página do Container Registry e exclua a imagem.

1b724136c1655935.png

8. Parabéns

Parabéns! Você conteinerizou o app Spring Boot em Kotlin e o implantou no Cloud Run.

Com o Jib, você criou uma imagem de contêiner otimizada sem instalar o Docker ou gravou um Dockerfile e a publicou no Container Registry. A Jib otimiza a construção de imagens para que qualquer pessoa sem conhecimento profundo do Docker possa conteinerizar apps Java de maneira rápida e eficiente. Em seguida, com alguns cliques, você implantou o app no Cloud Run e começou a funcionar rapidamente.

Saiba mais