Implantar um aplicativo do Spring Boot no ambiente padrão do App Engine

1. Antes de começar

Os aplicativos do App Engine são fáceis de criar, manter e escalonar de acordo com as mudanças necessárias no tráfego e no armazenamento de dados. Com o App Engine, você não precisa se preocupar com a manutenção dos servidores. Basta fazer upload do app.

Os aplicativos do App Engine são escalonados automaticamente com base no tráfego de entrada. Balanceamento de carga, microsserviços, autorização, bancos de dados SQL e NoSQL, armazenamento em cache de memória, divisão de tráfego, geração de registros, pesquisa, controle de versões, lançamentos, reversões e verificações de segurança têm suporte nativo e são altamente personalizáveis.

Os ambientes padrão e flexível do App Engine oferecem suporte a várias linguagens de programação, incluindo Java, Python, PHP, NodeJS e Go. Com esses dois ambientes, os desenvolvedores têm o máximo de flexibilidade no comportamento dos apps. Cada ambiente tem certos pontos fortes. Para mais informações, consulte Como escolher um ambiente do App Engine.

Você vai aprender a implantar um app Spring Boot no ambiente padrão do App Engine. Quando ninguém está usando o ambiente padrão, ele escalona verticalmente para zero, e o escalonamento é feito de forma automática.

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.

O que você aprenderá

  • Como criar um app Java do Spring Boot no App Engine

O que é necessário

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Cloud Shell

Você vai usar o Cloud Shell, um ambiente de linha de comando em execução no Google Cloud.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud Shell853e55310c205094.png.

55efc1aaa7a4d3ad.png

Se você estiver iniciando o Cloud Shell pela primeira vez, verá uma tela intermediária com a descrição dele. Se aparecer uma tela intermediária, clique em Continuar.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.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. Grande parte do trabalho neste codelab, se não todo, pode ser feito em um navegador.

Depois de se conectar ao Cloud Shell, você verá sua autenticação e o projeto estará configurado com o ID do seu projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
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. Criar um novo app da Web do Spring Boot

Depois que o Cloud Shell for iniciado, você poderá usar a linha de comando para gerar um novo aplicativo Spring Boot com o Spring Initializr.

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=3.0.5 \
  -d dependencies=web \
  -d type=maven-project \
  -d baseDir=gae-standard-example | tar -xzvf -
$ cd gae-standard-example

4. Atualizar o pom.xml do Maven

Há duas maneiras de implantar um app de servidor Java: usando o plug-in do Maven para App Engine ou para o Gradle ou com a implantação do diretório de pacotes war. Você vai usar o Maven App Engine Plugin para implantar o app.

Adicionar o plug-in do Maven App Engine

Atualize o pom.xml para incluir um plug-in do Google Cloud que simplifique o processo de implantação. Você pode usar o Vim, nano ou Emacs para editar o arquivo.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.4.4</version>
        <configuration>
          <version>1</version>
          <projectId>GCLOUD_CONFIG</projectId>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
</project>

5. Adicionar descritor do App Engine

  1. Para implantar o app no ambiente padrão do App Engine, é preciso criar um novo arquivo descritor src/main/appengine/app.yaml.
$ mkdir -p src/main/appengine/
$ touch src/main/appengine/app.yaml
  1. Edite o arquivo src/main/appengine/app.yaml e adicione o seguinte conteúdo:

src/main/appengine/app.yaml

runtime: java17
instance_class: F1

6. Adicionar um controlador

Adicione um novo controle que retorne "hello world!" em DemoApplication.java.

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

...

// Add imports
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

// Add the controller.
@RestController
class HelloWorldController {
  @GetMapping("/")
  public String hello() {
    return "hello world!";
  }
}

7. Executar o app localmente

  1. Verifique se JAVA_HOME está definido como a versão correta do JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
  1. É possível iniciar o aplicativo Spring Boot com o plug-in Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Depois que o app for iniciado, clique em Visualização na Web 1a94d5bd10bfc072.pngna barra de ferramentas do Cloud Shell e selecione Visualizar na porta 8080.

3aca52f76c6c22a3.png

Uma guia será aberta no navegador, conectando você ao servidor iniciado.

7b0d8494f647822a.png

8. Implantar o aplicativo no App Engine

  1. Primeiro, inicialize o projeto para executar aplicativos do App Engine. Além disso, inicialize o projeto para ser executado na região central dos EUA.
$ gcloud app create --region us-central
You are creating an app for project [...].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
https://cloud.google.com/appengine/docs/locations
  1. Em seguida, implante o app no ambiente padrão do App Engine executando mvn appengine:deploy.
$ ./mvnw -DskipTests package appengine:deploy
... first time deploy may take a couple of minutes
  1. Após a implantação do app, abra http://<project-id>.appspot.com no navegador da Web ou use o comando a seguir no Cloud Shell:
$ gcloud app browse
... [It may print out the URL for your app]

9. Limpeza

Não é possível excluir um aplicativo do App Engine, mas é possível desativá-lo.

Acesse App Engine e Settings no console do Google Cloud e selecione Disable Application:

8052c1e4ad73d70e.png

Se preferir, exclua todo o projeto:

$ gcloud projects delete YOUR-PROJECT-ID

10. Parabéns

Você aprendeu a criar seu primeiro app da Web no App Engine.

Saiba mais