Google Compute Engine

1. Introducción

Hola a todos, gracias por venir hoy. ¿Todo listo para aprender a usar Google Compute Engine?

En este codelab, exploraremos Compute Engine con un ejemplo de una aplicación de libro de visitas.

Crearás instancias de Compute Engine, implementarás nginx y, por último, pondrás un balanceador de cargas de red al frente. Puedes crear una instancia de Compute Engine desde la consola gráfica o desde la línea de comandos. En este lab, se te explicará cómo usar la línea de comandos.

ComputeEngine_128px.png

Google Compute Engine ofrece máquinas virtuales que se ejecutan en los centros de datos de Google conectadas a su red mundial de fibra óptica. Las herramientas y el flujo de trabajo que se ofrecen permiten escalar de instancias únicas a una computación en la nube global con balanceo de cargas.

Estas VMs se inician rápidamente, incluyen almacenamiento en discos persistentes y brindan un rendimiento coherente. Las máquinas están disponibles en muchas configuraciones, incluidos tamaños predefinidos, y también se pueden crear con tipos personalizados de máquinas optimizados para tus necesidades específicas.

Por último, las máquinas virtuales de Compute Engine también son la tecnología que usan muchos otros productos de Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow, etcétera).

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar.
  • Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Google Cloud Shell

Si bien Google Cloud y Compute Engine se pueden operar de manera remota desde tu laptop, en este codelab usaremos Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Esta máquina virtual basada en Debian está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Esto significa que todo lo que necesitarás para este Codelab es un navegador (sí, funciona en una Chromebook).

  1. Para activar Cloud Shell desde la consola de Cloud, solo haz clic en Activar Cloud Shellb125d9eb26a46cc5.png (el aprovisionamiento y la conexión al entorno debería llevar solo unos minutos).

1067942a9a93f70.png

Captura de pantalla del 14 de junio de 2017 a las 10.13.43 p.m. .png

Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu PROJECT_ID:

gcloud auth list

Resultado del comando

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

Si, por algún motivo, el proyecto no está configurado, solo emite el siguiente comando:

gcloud config set project <PROJECT_ID>

Si no conoce su PROJECT_ID, Observa el ID que usaste en los pasos de configuración o búscalo en el panel de la consola de Cloud:

cc3895eeac80db2c.png

Cloud Shell también configura algunas variables de entorno de forma predeterminada, lo que puede resultar útil cuando ejecutas comandos futuros.

echo $GOOGLE_CLOUD_PROJECT

Resultado del comando

<PROJECT_ID>
  1. Establece la zona predeterminada y la configuración del proyecto.
gcloud config set compute/zone us-central1-f

Puedes elegir una variedad de zonas diferentes. Para obtener más información, consulta Regiones y zonas.

3. Crea una instancia de Compute Engine

Como se analizó anteriormente, usaremos la línea de comandos gcloud en este codelab. Puedes hacer todo aquí con la consola (disponible en console.cloud.google.com).

Primero, creemos una instancia con la configuración predeterminada :

$ gcloud compute instances create myinstance
Created [...].
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Anota el EXTERNAL_IP, ya que esto será importante más adelante.

La instancia se crea con una serie de valores predeterminados :

  • La zona que elijas. Todas las instancias se encuentran en una zona. Puedes seleccionar una zona en el momento de la creación de la instancia con la marca --zone o puedes establecer una zona predeterminada (como lo hicimos en la configuración inicial) y omitir la marca --zone.
  • La imagen más reciente de Debian GNU/Linux 9 (stretch) Si usas tu propia imagen personalizada, proporciona el nombre de la imagen aquí. Por ejemplo, --image my-own-image.
  • El tipo de máquina n1-standard-1. Puedes seleccionar otro tipo de máquina, como n1-highmem-4 o n1-highcpu-6. Si ninguno de los tipos predefinidos de máquinas satisface tus necesidades, usa un tipo personalizado de máquina.
  • Un disco raíz persistente con el mismo nombre que la instancia; el disco se conecta automáticamente a la instancia.

Ejecuta gcloud compute instances create --help para ver todas las opciones disponibles.

4. Habilitar el firewall para el puerto 80

De forma predeterminada, Google Cloud Platform solo permite pocos accesos a los puertos. Ya que instalaremos Nginx pronto, primero vamos a habilitar el puerto 80 en la configuración del firewall.

$ gcloud compute firewall-rules create allow-80 --allow tcp:80
Created [...].
NAME: allow-80
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False

Esto creará una regla de firewall con el nombre allow-80 que tiene una lista predeterminada de bloques de direcciones IP que tienen permitido establecer conexiones entrantes (--source-ranges) en 0.0.0.0/0 (En todas partes).

Ejecuta gcloud compute firewall-rules create --help para ver todos los valores predeterminados y las opciones disponibles, incluida la capacidad de aplicar reglas de firewall basadas en etiquetas.

5. Establece una conexión SSH a la instancia

Para establecer una conexión SSH a la instancia desde la línea de comandos (todavía desde Cloud Shell), sigue estos pasos:

$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts.
...

yourusername@myinstance:~#

Eso es todo. es bastante fácil. (En producción, asegúrate de ingresar una frase de contraseña :)

Como alternativa, también puedes establecer una conexión SSH a la instancia directamente desde la consola ( console.cloud.google.com). Para ello, navega a Compute Engine > Instancias de VM, y haz clic en SSH.

bfbc03997a41946e.png

6. Instalar Nginx

Accede a myinstance, la instancia recién creada, y, luego, instala nginx:

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

Prueba que el servidor se esté ejecutando con curl de myinstance:

$ curl -s localhost | grep nginx
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>

Encuentra la IP externa de tu instancia con una lista de tus instancias a través de la IU web:

dcc4e56e82ba2603.png

Asegúrate de salir de SSH y ejecuta este comando desde Cloud Shell:

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Luego, navega a http://EXTERNAL_IP/, donde EXTERNAL_IP es la IP pública de myinstance y deberías poder ver la página de nginx:

49b52b9354041f3b.png

7. Secuencia de comandos de inicio

En lugar de configurar la instancia cada vez, puedes usar una secuencia de comandos de inicio para inicializarla cuando se inicia.

Crea un archivo llamado startup.sh con el siguiente contenido (puedes usar tu editor de texto favorito: vim, nano o emacs):

#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html

Para crear una instancia de VM nueva con esta secuencia de comandos de inicio, simplemente escribe lo siguiente :

$ gcloud compute instances create nginx \
         --metadata-from-file startup-script=startup.sh 
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Navega hasta http://EXTERNAL_IP/ y deberías ver la página principal actualizada. Si la página no se muestra, vuelve a intentarlo de inmediato después de un par de segundos, es posible que el host aún esté iniciando nginx.

8. Crea un clúster de servidores

Para crear un clúster de servidores, primero debes crear una plantilla de instancias. Una vez creada la plantilla de instancias, puedes crear un grupo de instancias para administrar la cantidad de instancias que se crearán.

Primero, crea una plantilla de instancias usando la secuencia de comandos de inicio :

$ gcloud compute instance-templates create nginx-template \
         --metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00

Segundo, creemos un grupo de destino. Este grupo permite tener un punto de acceso único para todas las instancias de un grupo y es necesario en el balanceo de cargas de los pasos posteriores.

$ gcloud compute target-pools create nginx-pool
Created [...].
NAME: nginx-pool
REGION: us-central1
SESSION_AFFINITY: NONE
BACKUP:
HEALTH_CHECKS:

Por último, crea un grupo de instancias usando la plantilla:

$ gcloud compute instance-groups managed create nginx-group \
         --base-instance-name nginx \
         --size 2 \
         --template nginx-template \
         --target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no

Esto creará dos instancias de VM adicionales con nombres con el prefijo nginx-.

Ahora deberías poder ver todas las instancias que se crearon.

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-frpl
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-ztg4
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

9. Cree un balanceador de cargas de red

Existen varios tipos de balanceadores de cargas en Google Cloud Platform, entre los que se incluyen los siguientes :

Creemos un balanceador de cargas de red regional dirigido a nuestro grupo de instancias:

$ gcloud compute forwarding-rules create nginx-lb \
         --ports 80 \
         --target-pool nginx-pool
Created [...].

$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool

Luego, puedes visitar el balanceador de cargas desde el navegador http://IP_ADDRESS/. IP_ADDRESS es la dirección que se muestra como resultado de la ejecución del comando anterior.

Debido a este momento, no crearemos un balanceador de cargas HTTP hoy.

10. Limpia el clúster

No olvides cerrar tu clúster; de lo contrario, seguirán ejecutándose y acumulando costos. Los siguientes comandos borrarán las instancias de Google Compute Engine, el grupo de instancias, el grupo de segmentación y el balanceador de cargas.

$ gcloud compute forwarding-rules delete nginx-lb

$ gcloud compute instance-groups managed delete nginx-group

$ gcloud compute target-pools delete nginx-pool

$ gcloud compute instance-templates delete nginx-template

$ gcloud compute instances delete nginx

$ gcloud compute instances delete myinstance

$ gcloud compute firewall-rules delete allow-80

Cada uno de los comandos anteriores debería solicitarte que confirmes la eliminación del recurso.

11. Próximos pasos

¡Felicitaciones! Completaste este codelab de Compute Engine.

Más funciones de Compute Engine

Google Compute Engine tiene un amplio conjunto de funciones. Recomendamos que explores algunos de estos temas :

Google Kubernetes Engine

Google Kubernetes Engine (GKE) es la oferta alojada y completamente administrada de Kubernetes de Google Cloud. Hay varios codelabs disponibles que te ayudarán a comenzar a usar GKE. Esta es una buena opción para comenzar :

Envíanos tus comentarios

  • Tómate un momento para completar nuestra breve encuesta