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

1. Antes de começar

Os apps 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 apps do App Engine são escalonados automaticamente com base no tráfego de entrada. O balanceamento de carga, os microsserviços, a autorização, os bancos de dados SQL e NoSQL, o armazenamento em cache na memória, a divisão de tráfego, a geração de registros, a pesquisa, o controle de versões, as implantações e reversões e a verificação de segurança são todos compatíveis nativamente e altamente personalizáveis.

O ambiente padrão do App Engine e o ambiente flexível do App Engine são compatíveis com várias linguagens de programação, incluindo Java, Python, PHP, Node.js e Go. Os dois ambientes oferecem aos desenvolvedores a máxima flexibilidade em relação ao comportamento do app. Cada ambiente tem 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. O ambiente padrão reduz a escala para zero instâncias quando ninguém está usando e aumenta automaticamente.

Pré-requisitos

  • Noções básicas sobre a linguagem de programação Java e ferramentas
  • Conhecimento de 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 executado no Google Cloud.

Ativar o Cloud Shell

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

55efc1aaa7a4d3ad.png

Se esta for a primeira vez que você inicia o Cloud Shell, uma tela intermediária vai aparecer com a descrição dele. Se isso acontecer, clique em Continuar.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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. Neste codelab, quase todo o trabalho pode ser feito com um navegador.

Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto está 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 comando a seguir no Cloud Shell para confirmar se 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 app da Web do Spring Boot

Depois que o Cloud Shell for iniciado, use a linha de comando para gerar um novo app 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 Maven App Engine Plugin ou o Gradle App Engine Plugin ou implantando o diretório de pacotes war. Você vai usar o Maven App Engine Plugin para implantar o app.

Adicionar o Maven App Engine Plugin

Atualize pom.xml para incluir um plug-in do Google Cloud que simplifica o processo de implantação. Você pode usar o Vim, o nano ou o 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 um descritor do App Engine

  1. Para implantar o app no ambiente padrão do App Engine, crie um 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 controlador 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 para a versão correta do JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
  1. Você pode iniciar o app Spring Boot com o plug-in Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Depois que o app for iniciado, clique em Visualização da Web 1a94d5bd10bfc072.png na barra de ferramentas do Cloud Shell e selecione Visualizar na porta 8080.

3aca52f76c6c22a3.png

Uma guia será aberta no navegador, conectando você ao servidor que acabou de iniciar.

7b0d8494f647822a.png

8. Implantar o aplicativo no App Engine

  1. Primeiro, inicialize o projeto para poder executar apps 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. Depois que o app for implantado, abra http://<project-id>.appspot.com no navegador da Web ou use o seguinte comando 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 ele pode ser desativado.

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 escrever seu primeiro app da Web do App Engine.

Saiba mais