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

Neste guia de início rápido, você aprenderá a criar um pequeno aplicativo 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, em seguida, configure um projeto do GCP 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
    

    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 de 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, e isso significa que a infraestrutura que executa os aplicativos está localizada em uma região específica e é gerenciada pelo Google para ficar 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 seus aplicativos. Em geral, você escolhe a região mais próxima dos usuários do aplicativo. No entanto, pense também no local dos outros produtos e serviços do GCP utilizados pelo aplicativo. O uso de serviços em vários locais pode afetar a latência e o preço do seu aplicativo.

O App Engine está disponível nas regiões a seguir:

  • northamerica-northeast1 (Montreal)
  • us-central (Iowa)
  • us-west2 (Los Angeles)
  • us-east1 (Carolina do Sul)
  • us-east4 (Virgínia do Norte)
  • southamerica-east1 (São Paulo)
  • europe-west (Bélgica)
  • europe-west2 (Londres)
  • europe-west3 (Frankfurt)
  • europe-west6 (Zurique)
  • asia-northeast1 (Tóquio)
  • asia-northeast2 (Osaka)
  • asia-east2 (Hong Kong)
  • asia-south1 (Mumbai)
  • australia-southeast1 (Sydney)

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

Se você já tiver criado um aplicativo do App Engine, poderá visualizar a região executando o comando gcloud app describe ou abrindo o Painel do App Engine no Console do GCP. A região do aplicativo do App Engine está listada em http://[YOUR_PROJECT_ID].appspot.com.

Download do app Hello World

Criamos um aplicativo Hello World simples para Java. Com ele, você tem uma ideia rápida da implantação de um aplicativo no Google Cloud Platform.

  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 opção é fazer o download da amostra (em inglês) como um arquivo ZIP e extraí-lo.

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

    cd java-docs-samples/flexible/helloworld
    

Execute o Hello World na máquina local

  1. Inicie o servidor web local Tomcat usando o plug-in Spring Boot Maven.

    mvn spring-boot:run
    
  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 aplicativo Hello World no ambiente flexível do App Engine:

  1. Implante o aplicativo Hello World ao executar os comandos a seguir no diretório helloworld:

    gcloud config set project YOUR_PROJECT_ID
    mvn appengine:deploy
  2. Inicie o navegador para visualizar o aplicativo em http://YOUR_PROJECT_ID.appspot.com

    gcloud app browse
    em que YOUR_PROJECT_ID representa o ID do projeto do GCP.

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

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

Nas seções a seguir, veja informações sobre limpeza e links para as próximas etapas.

Limpeza

Exclua seu projeto do GCP para não ser cobrado pelos recursos usados nele.

  1. No Console do GCP, 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 GCP. Você já tem instalado o SDK do Cloud, que fornece as ferramentas de interação com produtos como o Cloud SQL, o Cloud Storage, o Cloud 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

No arquivo HelloServlet.java é especificado um padrão de URL que descreve onde o app receberá solicitações e responde a todas elas com a mensagem "Hello World".

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

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

app.yaml

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

runtime: java
env: flex

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

runtime_config:  # Optional
  jdk: openjdk8
  server: jetty9

manual_scaling:
  instances: 1

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

pom.xml

No Hello World também é fornecido um arquivo pom.xml com informações sobre o projeto, como dependências e destino da versão.

<project>                               <!-- REQUIRED -->

  <modelVersion>4.0.0</modelVersion>    <!-- REQUIRED -->
  <packaging>war</packaging>            <!-- REQUIRED -->

  <groupId>com.example.flex.helloworld</groupId>
  <artifactId>helloworld-servlet</artifactId> <!-- Name of your project -->
  <version>1.0-SNAPSHOT</version>       <!-- xx.xx.xx -SNAPSHOT means development -->

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source> <!-- REQUIRED -->
    <maven.compiler.target>1.8</maven.compiler.target> <!-- REQUIRED -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <failOnMissingWebXml>false</failOnMissingWebXml> <!-- REQUIRED -->
    <appengine.maven.plugin>1.3.2</appengine.maven.plugin>
    <jetty.maven.plugin>9.4.3.v20170317</jetty.maven.plugin>
  </properties>

  <parent>                              <!-- Get parameters and allow bulk testing -->
    <artifactId>getting-started-java</artifactId>
    <groupId>com.example</groupId>
    <version>1.0.0</version>
    <relativePath>..</relativePath>
  </parent>

  <dependencies>
    <dependency>                        <!-- REQUIRED -->
      <groupId>javax.servlet</groupId>  <!-- Java Servlet API -->
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>           <!-- Provided by the Jetty Servlet Container -->
    </dependency>
  </dependencies>

  <build>
    <!-- For hot reload of the web application when using an IDE Eclipse / IDEA -->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>

    <plugins>

      <plugin>                          <!-- Used for local debugging -->
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty.maven.plugin}</version>
      </plugin>

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>${appengine.maven.plugin}</version>
        <configuration>
          <!-- deploy configuration -->
<!--
          <deploy.promote>true</deploy.promote>                           <!~~ DEFAULT value ~~>
          <deploy.stopPreviousVersion>true</deploy.stopPreviousVersion>   <!~~ DEFAULT value ~~>
 -->
        </configuration>
      </plugin>

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