Comienza a usar Java en Compute Engine

En este instructivo se muestra cómo comenzar a usar Compute Engine. Si deseas seguir este instructivo, implementa una aplicación Hello World para Java en Compute Engine. Si deseas obtener ayuda para comenzar a usar App Engine, consulta el entorno estándar de App Engine.

Objetivos

  • Usa Cloud Shell para descargar y, luego, implementar una aplicación de muestra Hello World.
  • Implementar una app Hello World de muestra en una sola instancia de Compute Engine

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  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 la API de Compute Engine.

    Habilita la API

  5. 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

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

  7. Habilita la API de Compute Engine.

    Habilita la API

  8. En Google Cloud Console, abre la app en Cloud Shell.

    Ir a Cloud Shell

    Cloud Shell brinda acceso de línea de comandos a tus recursos en la nube directamente desde el navegador. Abre Cloud Shell en tu navegador y haz clic en Continuar para descargar el código de muestra y pasar al directorio de la aplicación.

  9. En Cloud Shell, configura la CLI de gcloud para usar tu proyecto de Google Cloud nuevo de la siguiente manera:
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID
    

Ejecuta la app en Cloud Shell

  1. En Cloud Shell, inicia un servidor web local:

    mvn -Plocal clean jetty:run-exploded -DprojectID=YOUR-PROJECT-ID
    
  2. En Cloud Shell, haz clic en Vista previa web y selecciona Obtener vista previa en el puerto 8080. Se abrirá una ventana nueva con la app en ejecución.

    En el navegador web, verás texto de Hello World, servido desde tu máquina local.

  3. Cuando estés listo para continuar, presiona Control + C en Cloud Shell a fin de detener el servidor web local.

Implementa en una sola instancia

Esta sección te explica cómo ejecutar una instancia única de tu aplicación en Compute Engine.

Implementación de una sola instancia

En Cloud Shell, puedes realizar una implementación en la máquina virtual (VM) de una sola instancia de Compute Engine que ejecuta tu aplicación.

Usa una secuencia de comandos de inicio para inicializar una instancia

Necesitas una forma de indicar a tu instancia que descargue y ejecute tu código. Una instancia puede tener una secuencia de comandos de inicio que se ejecuta cada vez que se inicia o reinicia la instancia.

Una secuencia de comandos de inicio se ejecuta cuando se inicia una instancia por primera vez.

set -e
set -v

# Talk to the metadata server to get the project id
PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")

echo "Project ID: ${PROJECTID}"

# Install dependencies from apt
apt-get install -yq openjdk-11-jdk git maven

mvn --version

# Jetty Setup
mkdir -p /opt/jetty/temp
mkdir -p /var/log/jetty

# Get Jetty
curl -L https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.13.v20181111/jetty-distribution-9.4.13.v20181111.tar.gz -o jetty9.tgz
tar xf jetty9.tgz  --strip-components=1 -C /opt/jetty

# Add a Jetty User
useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

cd /opt/jetty
# Add running as "jetty"
java -jar /opt/jetty/start.jar --add-to-startd=setuid
cd /

# Clone the source repository.
git clone https://github.com/GoogleCloudPlatform/getting-started-java
cd getting-started-java/gce

# Build the .war file and rename.
# very important - by renaming the war to root.war, it will run as the root servlet.
mvn clean package -q
mv target/getting-started-gce-1.0-SNAPSHOT.war /opt/jetty/webapps/root.war

# Make sure "jetty" owns everything.
chown --recursive jetty /opt/jetty

# Configure the default paths for the Jetty service
cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
echo "JETTY_HOME=/opt/jetty" > /etc/default/jetty
{
  echo "JETTY_BASE=/opt/jetty"
  echo "TMPDIR=/opt/jetty/temp"
  echo "JAVA_OPTIONS=-Djetty.http.port=80"
  echo "JETTY_LOGS=/var/log/jetty"
} >> /etc/default/jetty

# Reload daemon to pick up new service
systemctl daemon-reload

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh --also-install

service google-fluentd restart &

service jetty start
service jetty check

echo "Startup Complete"

La secuencia de comandos de inicio realiza las siguientes tareas:

  • Instala Java 11 y lo configura como predeterminado.

  • Instala y configura Jetty.

  • Copia el archivo WAR de Java del depósito de Cloud Storage en webapps de Jetty y lo renombra como root.war. Esto lo convierte en el servlet raíz, por lo que no es necesario mencionarlo en la URL.

  • Instala el agente de Cloud Logging y lo configura para supervisar los registros de la app. Esto significa que el registro configurado en los pasos anteriores de este instructivo se sube como si usaras el entorno de App Engine Flexible.

Crea y configura una instancia de Compute Engine

  1. Crea una instancia de Compute Engine:

    gcloud compute instances create my-app-instance 
    --image-family=debian-10
    --image-project=debian-cloud
    --machine-type=g1-small
    --scopes userinfo-email,cloud-platform
    --metadata-from-file startup-script=gce/startup-script.sh
    --zone YOUR_ZONE
    --tags http-server
    Reemplaza YOUR_ZONE por una zona de desarrollo, por ejemplo us-central1-a. Para obtener más información sobre las regiones y zonas, consulta Geografía y regiones.

    Esto permite crear una instancia nueva para acceder a los servicios de Google Cloud y ejecutar tu secuencia de comandos de inicio. El nombre de la instancia es my-app-instance.

  2. Revisa el progreso de la creación de la instancia:

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    Cuando se complete la secuencia de comandos de inicio, verás el siguiente mensaje:

    startup-script: INFO Finished running startup scripts.
    
  3. Crea una regla de firewall para permitir el tráfico hacia tu instancia de la manera siguiente:

    gcloud compute firewall-rules create default-allow-http-80 \
        --allow tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 80 access to http-server"
    

  4. Obtén la dirección IP externa de la instancia con el comando siguiente:

    gcloud compute instances list
    
  5. Para ver la aplicación en ejecución, ingresa la URL siguiente en el navegador:

    http://YOUR_INSTANCE_IP
    

    Reemplaza YOUR_INSTANCE_IP por la dirección IP externa de la instancia.

Administra y supervisa una instancia

Puedes usar Cloud Console para supervisar y administrar las instancias.

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. En la lista de instancias de máquinas virtuales, haz clic en SSH en la fila de la instancia a la que deseas conectarte.
  3. Para ver todos los registros generados por los recursos de Compute Engine, ve a la página Explorador de registros. Ir al Explorador de registros

    Cloud Logging se configura de forma automática para recopilar registros de varios servicios comunes, incluido syslog.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el 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.

Borra los recursos individuales

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-80

¿Qué sigue?