Comienza a usar Ruby en Compute Engine

En este instructivo se muestra cómo comenzar a usar Compute Engine. Sigue este instructivo para implementar una aplicación web Hello World Ruby 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Enable the API

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

    Ir a Cloud Shell

    Cloud Shell proporciona acceso de línea de comandos a tus recursos en la nube directamente desde el navegador.

  9. Si aceptas clonar el repositorio, haz clic en Confirmar para descargar el código de muestra y cambiar al directorio de la aplicación.

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

Ejecuta la app en Cloud Shell

  1. En Cloud Shell, instala las dependencias de la app con bundle:

    bundle install
    
  2. Ejecuta la app de Sinatra:

    bundle exec ruby app.rb -p 8080
    
  3. En Cloud Shell, haz clic en Vista previa web y selecciona Obtener vista previa en el puerto 8080. Se abrirá una ventana nueva con tu aplicación en ejecución.

  4. Para detener el servidor web local, presiona Control+C.

Implementar en una instancia única

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.

# Install Stackdriver logging agent
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
bash add-logging-agent-repo.sh --also-install

# Install dependencies
apt-get update && apt-get -y upgrade && apt-get install -y autoconf bison \
    build-essential git libssl-dev libyaml-dev libreadline6-dev zlib1g-dev \
    libncurses5-dev libffi-dev libgdbm3 libgdbm-dev nginx supervisor

# Account to own server process
useradd -m -d /home/rubyapp rubyapp

# Install Ruby and Bundler
mkdir /home/rubyapp/.ruby
git clone https://github.com/rbenv/ruby-build.git /home/rubyapp/.ruby-build
/home/rubyapp/.ruby-build/bin/ruby-build 2.6.5 /home/rubyapp/.ruby

chown -R rubyapp:rubyapp /home/rubyapp

cat >/home/rubyapp/.profile << EOF
export PATH="/home/rubyapp/.ruby/bin:$PATH"
EOF

su -l rubyapp -c "gem install bundler"

# Fetch source code
git clone https://github.com/GoogleCloudPlatform/getting-started-ruby.git /opt/app

# Set ownership to newly created account
chown -R rubyapp:rubyapp /opt/app

# Install ruby dependencies
su -l rubyapp -c "cd /opt/app/gce && bundle install"

# Disable the default NGINX configuration
rm /etc/nginx/sites-enabled/default

# Enable our NGINX configuration
cp /opt/app/gce/rubyapp.conf /etc/nginx/sites-available/rubyapp.conf
ln -s /etc/nginx/sites-available/rubyapp.conf /etc/nginx/sites-enabled/rubyapp.conf

# Start NGINX
systemctl restart nginx.service

# Configure supervisor to run the ruby app
cat >/etc/supervisor/conf.d/rubyapp.conf << EOF
[program:rubyapp]
directory=/opt/app/gce
command=bash -lc "bundle exec ruby app.rb"
autostart=true
autorestart=true
user=rubyapp
environment=HOME="/home/rubyapp",USER="rubyapp"
stdout_logfile=syslog
stderr_logfile=syslog
EOF

supervisorctl reread
supervisorctl update

# Application should now be running under supervisor

La secuencia de comandos de inicio realiza las siguientes tareas:

  • Instala el agente de Cloud Logging. Este agente recopila registros de syslog automáticamente.

  • Instala Ruby 2.6.5, Bundler y sus dependencias del sistema.

  • Clona el código fuente de la app desde Cloud Source Repositories y, luego, instala dependencias.

  • Instala y configura Nginx.

  • Instala Supervisor para ejecutar la app como un daemon.

  • Configura Supervisor para ejecutar la app. Supervisor se asegura de que la app se reinicie si se cierra de forma inesperada o si la cierra un administrador o algún otro proceso. También envía stdoutstderr de la app a syslog para que los recopile el agente de Logging.

Crea y configura una instancia de Compute Engine

  1. Crea una instancia de Compute Engine:

    Linux/macOS

    MY_INSTANCE_NAME="my-app-instance"
    ZONE=us-central1-a
    
    gcloud compute instances create $MY_INSTANCE_NAME \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --machine-type=g1-small \
        --scopes userinfo-email,cloud-platform \
        --metadata-from-file startup-script=startup-script.sh \
        --zone $ZONE \
        --tags http-server

    Windows

    gcloud compute instances create my-app-instance ^
        --image-family=debian-9 ^
        --image-project=debian-cloud ^
        --machine-type=g1-small ^
        --scopes userinfo-email,cloud-platform ^
        --metadata-from-file startup-script=gce/startup-script.sh ^
        --zone us-central1-a ^
        --tags http-server
    

    Reemplaza la zona por una zona de desarrollo, por ejemplo, us-central1-a. Para obtener más información sobre 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 con el comando siguiente:

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

    Reemplaza YOUR_ZONE por la zona en la que implementaste la instancia.

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

    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 las instancias

Puedes usar Google Cloud Console para supervisar y administrar tu instancia.

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
  3. Para ver todos los registros que generaron tus recursos de Compute Engine, ve a la página Explorador de registros. Ir al Explorador de registros

    Cloud Logging se configura automáticamente para recopilar los registros de diversos servicios comunes, incluido syslog.

Realiza una limpieza

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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

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?