Guía de inicio rápido para Java en el entorno flexible de App Engine

ID de región

REGION_ID es un código abreviado que Google asigna en función de la región que seleccionas cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.

Obtén más información acerca de los ID de región.

Esta guía de inicio rápido describe cómo crear una aplicación pequeña de App Engine que muestre un mensaje breve.

Antes de comenzar

En esta guía de inicio rápido, se supone que instalaste el kit de desarrollo de Java SE 8 (JDK).
  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita Cloud Build API.

    Habilita la API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita Cloud Build API.

    Habilita la API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init

Requisitos previos adicionales

  1. Inicializa tu app de App Engine con el proyecto y selecciona su región:

    gcloud app create --project=[YOUR_PROJECT_ID]
    

    Cuando se te solicite, selecciona la región en la que deseas ubicar tu aplicación de App Engine.

  2. Instala los siguientes requisitos:

Ubicaciones de App Engine

App Engine es regional, lo que significa que la infraestructura que ejecuta las apps se encuentra en una región específica, y Google la administra para que esté disponible de forma redundante en todas las zonas dentro de esa región.

El cumplimiento de tus requisitos de latencia, disponibilidad o durabilidad debe ser un factor principal para seleccionar la región en la que se ejecutan las apps. Por lo general, puedes seleccionar la región más cercana a la de los usuarios de la app, pero debes considerar las ubicaciones en las que App Engine está disponible y las ubicaciones de los otros productos y servicios de Google Cloud que usa la app. Usar servicios en varias ubicaciones puede afectar la latencia de la app y sus precios.

No puedes cambiar la región de una app una vez configurada.

Si ya creaste una aplicación de App Engine, puedes ver su región mediante una de las siguientes opciones:

Descarga la app de Hello World

Creamos una app de Hello World sencilla para Java a fin de que puedas familiarizarte con rapidez con la implementación de una app en Google Cloud.

  1. Clona el repositorio de la app de Hello World de muestra al equipo local.

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

    De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.

  2. Cambia al directorio que contiene el código de muestra.

    cd java-docs-samples/flexible/helloworld
    

Ejecuta Hello World en tu máquina local

Para ejecutar la app de Hello World en la computadora local, haz lo siguiente:

  1. Inicia el servidor web local de Jetty con el complemento de Jetty Maven.
    mvn jetty:run-exploded
  2. En el navegador web, ingresa la siguiente dirección:

    http://localhost:8080

    Nota: Si usas Cloud Shell, en la barra de herramientas, haz clic en Vista previa en la Web y selecciona Vista previa en el puerto 8080.

El mensaje de Hello World de la app de muestra aparece en la página. En la ventana de la terminal, presiona Ctrl + C para salir del servidor web.

Implemente y ejecute Hello World en App Engine

Para implementar la app en el entorno flexible de App Engine, haz lo siguiente:

  1. Implementa la app de Hello World mediante la ejecución del siguiente comando desde el directorio helloworld:

    mvn clean package appengine:deploy
  2. Inicia tu navegador para ver la app en https://PROJECT_ID.REGION_ID.r.appspot.com.

    gcloud app browse
    En el ejemplo anterior, PROJECT_ID representa el ID del proyecto de Google Cloud.

Esta vez, la página que muestra el mensaje Hello World se envía mediante un servidor web que se ejecuta en una instancia de App Engine.

¡Felicitaciones! Implementaste tu primera app de Java en el entorno flexible de App Engine.

Si encontraste algún error cuando implementaste la aplicación, consulta las sugerencias para solucionar problemas.

Consulta las secciones siguientes para obtener información sobre la limpieza y vínculos a los próximos pasos que podrías realizar.

Realiza una limpieza

A fin de evitar que se apliquen cargos, puedes borrar el proyecto de Cloud para detener la facturación de todos los recursos que se usan en ese proyecto.

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Próximos pasos

Conoce toda la plataforma

Ahora que sabes cómo implementar y desarrollar apps en App Engine, puedes explorar el resto de Google Cloud. Ya instalaste Google Cloud CLI, que te brinda las herramientas para interactuar con productos como Cloud SQL, Cloud Storage, Firestore y muchos otros.

Si deseas ver una explicación guiada que te enseñe a crear una app que use toda la plataforma, no solo App Engine, revisa nuestra guía de inicio rápido sobre la creación de la app de Bookshelf.

Aprende sobre el entorno flexible de App Engine

Aquí hay algunos temas para ayudarte a continuar tu aprendizaje sobre App Engine.

Revisión del código de Hello World

Hello World es la aplicación de App Engine más simple que pueda existir, dado que solo contiene un servicio, una versión y todo el código se ubica dentro del directorio raíz de la app. En esta sección, se describe en detalle cada archivo de la app.

HelloServlet.java

El archivo HelloServlet.java especifica un patrón URL que describe dónde la app detectará solicitudes y responde a todas ellas con el mensaje “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

El archivo app.yaml describe la configuración de implementación de una app:

runtime: java
env: flex

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

Aquí, app.yaml especifica el entorno de ejecución que usa la aplicación y configura env: flex para especificar que esta aplicación usa el entorno flexible.

pom.xml

Hello World también incluye un archivo pom.xml, que contiene información sobre el proyecto, como sus dependencias y el destino de la compilación.

<!--
  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.2.0</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.1</appengine.maven.plugin>
    <jetty>9.4.44.v20210927</jetty>
  </properties>

  <dependencies>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</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>