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.
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
- 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.
- 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.
- 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).
- Para activar Cloud Shell desde la consola de Cloud, solo haz clic en Activar Cloud Shell (el aprovisionamiento y la conexión al entorno debería llevar solo unos minutos).
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:
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>
- 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, comon1-highmem-4
on1-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.
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:
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:
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 :
- VM interrumpibles: https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nodos de usuario único: https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU y TPU: https://cloud.google.com/compute/docs/gpus/add-gpus
- Instancias de Windows: https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Recursos de etiquetado: https://cloud.google.com/compute/docs/labeling-resources
- Migra VM a Compute Engine: https://cloud.google.com/compute/docs/vm-migration/
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 :
- Codelab de Google Kubernetes Engine: https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Envíanos tus comentarios
- Tómate un momento para completar nuestra breve encuesta