En este tutorial, desplegarás una aplicación de registro de ejemplo que usa Node.js para su frontend y MySQL para su backend. Al final del tutorial, tu implementación tendrá los siguientes recursos:
Si no has usado nunca Deployment Manager, consulta los tutoriales Inicio rápido o Guía detallada.
Antes de empezar
- Si quieres usar los ejemplos de línea de comandos de esta guía, instala la herramienta de línea de comandos`gcloud`.
- Si quieres usar los ejemplos de API de esta guía, configura el acceso a la API.
- Consulta una descripción general del balanceo de carga de red de Compute Engine.
- Consulta una descripción general de los contenedores Docker.
Crear plantillas de recursos
En este ejemplo se inicia una implementación que contiene varios recursos de Google Cloud. Para empezar, crea plantillas que definan estos recursos por separado. Más adelante, llamarás a estas plantillas en tu configuración final. Tu despliegue contiene estos recursos:
- Una instancia de Compute Engine que aloja una base de datos MySQL para la aplicación.
- Una plantilla de instancia para las instancias de frontend, que usa una imagen de Docker para la aplicación Node.js.
- Un grupo de instancias gestionado que usa la plantilla de instancia para crear dos instancias de frontend.
- Un autoescalador que inicia o detiene instancias de frontend adicionales en función del tráfico entrante.
- Una comprobación de estado que comprueba si las instancias de frontend están disponibles para realizar tareas.
- Un balanceador de carga de red con una regla de reenvío.
- Un grupo de destino para el grupo de instancias gestionado.
Crear la plantilla del backend de MySQL
El backend de esta aplicación es una única instancia de Compute Engine que ejecuta un contenedor Docker de MySQL. La plantilla container_vm.py
define una instancia de Compute Engine que puede ejecutar contenedores Docker. Para asegurarse de que la plantilla sigue la estructura correcta y contiene todas las propiedades necesarias, también necesita un archivo de esquema.
Copia la plantilla que aparece a continuación o descárgala del repositorio de GitHub:
Descargue el archivo de esquema de la plantilla.
La plantilla tiene algunas propiedades indefinidas, como containerImage
, que se definen en plantillas posteriores.
Cuando usas imágenes de contenedor en instancias de Compute Engine, también debes proporcionar un archivo de manifiesto que describa qué imagen de contenedor quieres usar. Crea un método auxiliar llamado container_helper.py
para definir dinámicamente el manifiesto del contenedor:
Crear la plantilla del frontend de Node.js
El frontend de la aplicación ejecuta Node.js y permite a los usuarios publicar mensajes en la página web. El frontend se ejecuta en un grupo de instancias de máquina virtual, compatible con un escalador automático y un balanceador de carga. Para crear plantillas de frontend, sigue estas instrucciones.
Crea un recurso de plantilla de instancia.
Necesitas una plantilla de instancia para crear un grupo de instancias gestionado, que es un grupo de instancias de máquina virtual idénticas que controlas como una sola entidad.
Crea un archivo llamado
container_instance_template.py
y descarga el esquema de la plantilla:Crea una herramienta de ajuste automático de escala, un grupo de instancias gestionado y un balanceador de carga.
A continuación, cree otra plantilla que use la plantilla
container_instance_template.py
y cree el resto de los recursos de frontend, incluidos una herramienta de escalado automático, un balanceador de carga y un grupo de instancias gestionado.
Esta plantilla incluye los siguientes recursos:
Una plantilla de instancia que usa la
container_instance_template.py
plantilla.Un grupo de instancias gestionado que usa la plantilla de instancia y un auto escalador que hace referencia al grupo de instancias gestionado. El uso de referencias asegura que Deployment Manager cree los recursos en un orden específico. En este caso, el grupo de instancias gestionado se crea antes que el escalador automático.
Un balanceador de carga de red que contiene los siguientes recursos:
- Una regla de reenvío con una única dirección IP externa expuesta a Internet.
- Un grupo de destino que contenga el grupo de instancias gestionado que ha creado anteriormente.
- Comprobación de estado que se va a asociar al grupo de destino.
Crea un archivo llamado frontend.py
y descarga el esquema de la plantilla:
Descargue el archivo de esquema de la plantilla.
Crear una plantilla unificadora
Por último, crea una plantilla que combine las plantillas de backend y de frontend. Crea un archivo llamado nodejs.py
con el siguiente contenido:
Descargue el archivo de esquema de la plantilla.
Ten en cuenta que el frontend de tu aplicación se llama env["deployment"]-frontend
y que el backend también tiene un nombre similar. Cuando despliegues la aplicación, Deployment Manager sustituirá automáticamente env["deployment"]
por el nombre del despliegue.
Crear una configuración
Una vez que tengas todas las plantillas, puedes crear una configuración que se usará para desplegar tus recursos. Crea un archivo de configuración llamado nodejs.yaml
con el siguiente contenido:
Sustituye ZONE_TO_RUN
por la zona en la que quieras que estén tus recursos, como us-central1-a
.
Desplegar recursos
Ahora, despliega tus recursos. Con Google Cloud CLI, ejecuta el siguiente comando:
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
Cuando se complete la implementación, Deployment Manager mostrará un resumen de los recursos creados, similar al siguiente:
Waiting for create operation-1468522101491-5379cf2344539-5961abe8-a500190c...done.
Create operation operation-1468522101491-5379cf2344539-5961abe8-a500190c completed successfully.
NAME TYPE STATE ERRORS
advanced-configuration-application-fw compute.v1.firewall COMPLETED []
advanced-configuration-backend compute.v1.instance COMPLETED []
advanced-configuration-frontend-as compute.v1.autoscaler COMPLETED []
advanced-configuration-frontend-hc compute.v1.httpHealthCheck COMPLETED []
advanced-configuration-frontend-igm compute.v1.instanceGroupManager COMPLETED []
advanced-configuration-frontend-it compute.v1.instanceTemplate COMPLETED []
advanced-configuration-frontend-lb compute.v1.forwardingRule COMPLETED []
advanced-configuration-frontend-tp compute.v1.targetPool COMPLETED []
Probar la aplicación
Para probar tu aplicación, primero debes obtener la dirección IP externa que está sirviendo el tráfico. Para ello, consulta la regla de reenvío:
$ gcloud compute forwarding-rules describe advanced-configuration-frontend-lb --region us-central1 IPAddress: 104.154.81.44 IPProtocol: TCP creationTimestamp: '2016-07-14T11:48:37.228-07:00' description: '' id: '9033201246750269546' kind: compute#forwardingRule name: advanced-configuration-frontend-lb portRange: 8080-8080 region: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1 selfLink: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/advanced-configuration-frontend-lb target: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/advanced-configuration-frontend-tp
En este caso, la IP externa es 104.154.81.44
.
A continuación, en un navegador, visita la dirección IP externa con el puerto 8080. Por ejemplo, si tu dirección IP externa es 104.154.81.44
, la URL sería la siguiente:
http://104.154.81.44:8080
Debería mostrarse una página en blanco, que es lo esperado. A continuación, publica un mensaje en la página. Ve a la URL siguiente:
http://104.154.81.44:8080?msg=hellothere!
Verás una confirmación de que se ha añadido tu mensaje. Vuelva a la URL principal. La página debería mostrar el siguiente mensaje:
hellothere!
Ahora tienes una aplicación implementada que puede registrar los mensajes que se le envían.
Pasos siguientes
Una vez que haya completado esta muestra, podrá hacer lo siguiente:
- Aprovecha este ejemplo para desplegar instancias con tus propios contenedores Docker. Si quieres modificar los contenedores Docker que se usan en este tutorial, edita los Dockerfiles del repositorio de GitHub.
- Consulta más ejemplos de implementaciones en el repositorio de GitHub de Deployment Manager.
- Consulta más información sobre las plantillas y los despliegues.