Guia de início rápido do Java no ambiente flexível do App Engine

ID da região

O REGION_ID é um código abreviado que o Google atribui com base na região que você selecionou ao criar o aplicativo. O código não corresponde a um país ou estado, ainda que alguns IDs de região sejam semelhantes aos códigos de país e estado geralmente usados. A inclusão de REGION_ID.r em URLs do App Engine é opcional para aplicativos atuais. Em breve, será necessária para todos os aplicativos novos.

Para garantir uma transição tranquila, estamos atualizando o App Engine gradativamente para usar IDs de região. Se ainda não tivermos atualizado o projeto do Google Cloud, você não verá um ID da região para o app. Como o ID é opcional para os apps atuais, não é necessário atualizar os URLs ou fazer outras alterações quando o ID da região estiver disponível para os apps já existentes.

Saiba mais sobre IDs da região.

Neste guia de início rápido, você aprenderá a criar um pequeno app do App Engine que exibe uma mensagem curta.

Antes de começar

Neste guia de início rápido, é presumido que você tenha o Java SE 8 Development Kit (JDK) instalado.

Antes de executar e implantar este guia de início rápido, instale o SDK do Cloud e configure um projeto do Cloud para o App Engine:

  1. Faça o download e instale o SDK do Cloud:

    Fazer o download do SDK

    Observação: se o SDK do Cloud já estiver instalado, atualize-o executando o comando a seguir:

    gcloud components update
    
  2. Crie um novo projeto:

    gcloud projects create [YOUR_PROJECT_ID] --set-as-default
    

    Substitua [YOUR_PROJECT_ID] por uma string de caracteres que identifique seu projeto de maneira exclusiva. Por exemplo, my-project-24.

    Verifique se o projeto foi criado:

    gcloud projects describe [YOUR_PROJECT_ID]
    

    Você verá detalhes do projeto parecidos com o seguinte:

    createTime: year-month-hour
    lifecycleState: ACTIVE
    name: project-name
    parent:
    id: '433637338589'
    type: organization
    projectId: project-name-id
    projectNumber: 499227785679
    
  3. Inicialize seu aplicativo do App Engine com o projeto e escolha a região:

    gcloud app create --project=[YOUR_PROJECT_ID]
    

    Quando solicitado, selecione a região em que o aplicativo do App Engine estará localizado.

  4. Verifique se o faturamento está ativado no projeto. Uma conta de faturamento precisa estar vinculada ao projeto para que o aplicativo seja implantado no App Engine.

    Ativar faturamento

    A implantação do ambiente flexível gerará custos enquanto estiver ativa. Limpe o projeto quando terminar para evitar custos contínuos.

  5. Instale os pré-requisitos a seguir:

Locais do App Engine

O App Engine é regional. Isso significa que a infraestrutura que executa os aplicativos está em uma determinada região que é gerenciada pelo Google para estar disponível de modo redundante em todas as zonas dessa região.

Atender aos requisitos de latência, disponibilidade ou durabilidade são os principais fatores para selecionar a região de execução dos aplicativos. Geralmente, é possível selecionar a região mais próxima dos usuários do aplicativo, mas considere os locais em que o App Engine está disponível, bem como os locais dos outros produtos e serviços do Google Cloud usados pelo aplicativo. O uso de serviços em vários locais pode afetar a latência e o preço do aplicativo.

Não é possível alterar a região de um aplicativo depois de defini-la.

Se você já criou um aplicativo do App Engine, será possível ver a região dele com um dos seguintes procedimentos:

Fazer o download do app Hello World

Criamos um aplicativo Hello World simples para Java. Assim, você pode ter uma ideia de como implantar um aplicativo no Google Cloud.

  1. Clone o repositório do app de amostra Hello World na máquina local.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples
    

    Outra alternativa é fazer download da amostra como um arquivo zip e extraí-la.

  2. Acesse o diretório que contém o código de amostra.

    cd java-docs-samples/flexible/helloworld
    

Como executar o Hello World na máquina local

Para executar o aplicativo Hello World no seu computador:

  1. Inicie o servidor da Web local Jetty usando o plug-in do Jetty Maven:
    mvn jetty:run-exploded
  2. No navegador da Web, digite este endereço:

    http://localhost:8080

A mensagem Hello World do aplicativo de amostra é exibida na página. Na janela do terminal, pressione Ctrl+C para sair do servidor da Web.

Implantar e executar o Hello World no App Engine

Para implantar o app Hello World no ambiente flexível do App Engine:

  1. Implemente o app Hello World executando o comando a seguir no diretório helloworld:

    gcloud app deploy

    Saiba mais sobre sinalizações opcionais.

    Sinalizações comuns do comando gcloud

    • Inclua a sinalização --version para especificar um ID exclusivo da versão do seu aplicativo. Quando a sinalização não é incluída, o ID é gerado automaticamente. Exemplo: --version [YOUR_VERSION_ID]
    • Inclua a sinalização --project para especificar um ID de projeto alternativo do Cloud para o que você inicializou como padrão na ferramenta gcloud. Exemplo: --project [YOUR_PROJECT_ID]

    Exemplo:

    gcloud app deploy --version pre-prod-5 --project my-sample-app

    Para aprender a implantar o app pela linha de comando, consulte Como testar e implantar o app . Para uma lista de todas as sinalizações de comando, consulte a referência do gcloud app deploy.

  2. Inicie o navegador para visualizar o aplicativo em https://PROJECT_ID.REGION_ID.r.appspot.com

    gcloud app browse
    em que PROJECT_ID representa o ID do projeto do Google Cloud.

Nesse momento, a página que exibe a mensagem "Hello World" é enviada por um servidor da Web executado em uma instância do App Engine.

Parabéns! Você implantou seu primeiro app Java no ambiente flexível do App Engine.

Se você encontrar erros na implantação do app, verifique as dicas de solução de problemas.

Veja as seções a seguir para informações sobre limpeza e links das próximas etapas.

Limpar

Exclua o projeto do Google Cloud para não ser cobrado pelos recursos usados nele.

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar a página "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir

Conheça a plataforma inteira

Agora que você sabe como é desenvolver e implantar aplicativos do App Engine, explore o restante do Google Cloud. Você já tem o SDK do Cloud instalado, que oferece as ferramentas para interagir com produtos como Cloud SQL, Cloud Storage, Firestore e muito mais.

Para ver um passo a passo sobre como criar um aplicativo que usa toda a plataforma, em vez de somente o App Engine, confira nosso guia de início rápido sobre a criação do app Bookshelf.

Saiba mais sobre o ambiente flexível do App Engine

Listamos alguns tópicos para você continuar aprendendo sobre o App Engine.

Revisão do código do Hello World

O Hello World é o app mais simples possível do App Engine. Nele, há apenas um serviço e uma versão, e todo o código é armazenado no diretório raiz. Nesta seção, cada arquivo do app é descrito em detalhes.

HelloServlet.java

O arquivo HelloServlet.java contém a especificação de um padrão de URL que descreve o local em que o aplicativo escutará solicitações e responde a todas elas com a mensagem “Hello World”.

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "helloworld", value = "")
@SuppressWarnings("serial")
public class HelloServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    PrintWriter out = resp.getWriter();
    out.println("Hello, world - App Engine Flexible");
  }
}

app.yaml

O arquivo app.yaml descreve a configuração de implantação do app:

runtime: java
env: flex

handlers:
- url: /.*
  script: this field is required, but ignored

Neste caso, app.yaml especifica o ambiente de execução usado pelo app e configura o env: flex, que determina o uso do ambiente flexível.

pom.xml

O Hello World também inclui um arquivo pom.xml, que contém informações sobre o projeto, como suas dependências e o destino da versão.

<!--
  Copyright 2016 Google Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<project>
  <modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <groupId>com.example.flexible</groupId>
  <artifactId>flexible-helloworld</artifactId>

  <!--
    The parent pom defines common style checks and testing strategies for our samples.
    Removing or replacing it should not affect the execution of the samples in anyway.
  -->
  <parent>
    <groupId>com.google.cloud.samples</groupId>
    <artifactId>shared-configuration</artifactId>
    <version>1.0.21</version>
  </parent>

  <properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>

    <failOnMissingWebXml>false</failOnMissingWebXml> <!-- REQUIRED -->

    <appengine.maven.plugin>2.4.0</appengine.maven.plugin>
    <jetty>9.4.32.v20200930</jetty>
  </properties>

  <dependencies>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <type>jar</type>
      <scope>provided</scope>
    </dependency>

  </dependencies>

  <build>
    <!-- for hot reload of the web application -->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
    <plugins>

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>${appengine.maven.plugin}</version>
        <configuration>
          <projectId>GCLOUD_CONFIG</projectId>
          <version>GCLOUD_CONFIG</version>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty}</version>
      </plugin>

    </plugins>
  </build>
</project>