Comienza a usar Go en Compute Engine


En este instructivo se muestra cómo comenzar a usar Compute Engine. Para seguir este instructivo, implementa una app web Hello World de Go 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.
  • Usar Cloud Build para compilar una app Hello World de muestra
  • 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 and Cloud Build APIs.

    Enable the APIs

  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 and Cloud Build APIs.

    Enable the APIs

  8. En la consola de Google Cloud, 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.

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

  10. En Cloud Shell, configura gcloud CLI para usar tu nuevo proyecto de Google Cloud:
    # 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:

    go build -o app
    ./app
    
  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 Hello, World!.

  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

En esta sección, se 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 Cloud Build para compilar la app

Cloud Build se usa para compilar la app, comprimirla en un archivo tar y subir el archivo a un bucket de Cloud Storage. Los depósitos son los contenedores básicos que conservan tus datos en Cloud Storage.

  1. En la ventana de la terminal, crea un depósito de Cloud Storage, en el que YOUR_BUCKET_NAME represente el nombre del depósito:

    gcloud storage buckets create gs://YOUR_BUCKET_NAME

    Puedes elegir cualquier nombre para el bucket de Cloud Storage. Es una buena práctica asignarle a tu bucket el mismo nombre que tu ID del proyecto. Los nombres de bucket s deben ser únicos en Google Cloud, por lo que es posible que no puedas usar el ID del proyecto como el nombre del bucket.

  2. Inicia el proceso de Cloud Build:

    gcloud builds submit --substitutions=_DEPLOY_DIR=gs://YOUR_BUCKET_NAME,_DEPLOY_FILENAME=app.tar.gz

    El comando gcloud builds submit usa --substitutions para configurar la ubicación a la que se subirá el archivo tar resultante. Luego, ese archivo tar se descarga en la instancia de Compute Engine.

    Cloud Build usa un archivo de configuración YAML a fin de definir los pasos necesarios para la compilación.

    steps:
      # Print the Go version being used.
      - name: 'mirror.gcr.io/library/golang'
        args: ['go', 'version']
      # Make a deploy directory we'll tar after building the app.
      - name: 'debian'
        args: ['mkdir', '-p', 'deploy/etc/systemd/system/', 'deploy/usr/bin']
      # Build the app.
      - name: 'mirror.gcr.io/library/golang'
        env: [
          'GO111MODULE=on',
          'GOPROXY=https://proxy.golang.org,direct',
          'GOOS=linux',
          'GOARCH=amd64'
        ]
        args: ['go', 'build', '-o', 'deploy/usr/bin/app', '.']
      # Copy the systemd service file into the deploy directory.
      - name: 'debian'
        args: ['cp', 'my-app.service', 'deploy/etc/systemd/system/']
      # Compress the deploy directory.
      - name: 'debian'
        args: ['tar', '-czf', '${_DEPLOY_FILENAME}', '-C', './deploy', '.']
    # Upload the tarball to Cloud Storage.
    artifacts:
      objects:
        location: '${_DEPLOY_DIR}'
        paths: ['${_DEPLOY_FILENAME}']

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 -ex

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" --output google-fluentd-install.sh
checksum=$(sha256sum google-fluentd-install.sh | awk '{print $1;}')
if [ "$checksum" != "ec78e9067f45f6653a6749cf922dbc9d79f80027d098c90da02f71532b5cc967" ]; then
    echo "Checksum does not match"
    exit 1
fi
chmod +x google-fluentd-install.sh && ./google-fluentd-install.sh
service google-fluentd restart &

APP_LOCATION=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/app-location" -H "Metadata-Flavor: Google")
gsutil cp "$APP_LOCATION" app.tar.gz
tar -xzf app.tar.gz

# Start the service included in app.tar.gz.
service my-app start

La secuencia de comandos de inicio realiza las siguientes tareas:

  • Instala el agente de Cloud Logging y lo configura para supervisar los registros de la app.

  • Descarga y extrae el archivo tar de implementación.

  • Inicia un servicio systemd para ejecutar la app.

Crea y configura una instancia de Compute Engine

  1. Crea una instancia de Compute Engine:

    Linux/macOS

    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=startup-script.sh \
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" \
    --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.

    La marca --metadata app-location indica a la secuencia de comandos de inicio dónde debe descargar el archivo tar de la app.

    Windows

    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=startup-script.sh ^
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" ^
    --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.

    La marca --metadata app-location indica a la secuencia de comandos de inicio dónde debe descargar el archivo tar de la app.

    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 la consola de Google Cloud 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 generados por tus 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 los registros de diversos 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. 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?