Desplegar Bookshelf para Python mediante Deployment Manager

En este tutorial, se explica cómo desplegar la muestra de Bookshelf para Python con Google Cloud Deployment Manager.

Deployment Manager permite crear recursos de Google Cloud Platform de manera declarativa y repetible, de modo que resulta muy sencillo generar todos los recursos necesarios para un despliegue en un solo paso. Con Deployment Manager, puedes actualizar los despliegues y hacer un seguimiento de las modificaciones a lo largo del tiempo. También puedes crear plantillas con Jinja o Python y parametrizarlas. De esta forma, los despliegues similares pueden compartir una plantilla.

Objetivos

  • Clonar y configurar la aplicación de muestra de Bookshelf.
  • Crear configuraciones y plantillas de Deployment Manager.
  • Crear despliegues de Deployment Manager.
  • Desplegar la aplicación de muestra de Bookshelf con Deployment Manager.

Costes

En este tutorial, se usan componentes facturables de Cloud Platform, entre los que se incluyen los siguientes:

  • Google Compute Engine
  • Google Cloud Storage
  • Google Cloud Datastore
  • Google Cloud Logging
  • Google Cloud Pub/Sub

Si quieres generar una estimación de costes en función del uso previsto, usa la calculadora de precios. Es posible que los nuevos usuarios de Cloud Platform tengan derecho a una versión de prueba gratuita.

Antes de empezar

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las Cloud Datastore, Cloud Storage, and Cloud Pub/Sub API necesarias.

    Habilita las API

  5. Install and initialize the Cloud SDK.
  6. Instala Python, pip y virtualenv en el sistema. Si quieres obtener instrucciones, consulta la sección sobre cómo configurar un entorno de desarrollo con Python para Google Cloud Platform.

Crear un segmento de Cloud Storage

En las siguientes instrucciones, se explica cómo crear un segmento de Cloud Storage. Los segmentos son los contenedores básicos que almacenan tus datos en Cloud Storage.

Para crear un segmento, sigue estas instrucciones:

  1. Invoca el siguiente comando en una ventana de terminal:

    gsutil mb gs://[YOUR-BUCKET-NAME]

  2. Establece la LCA predeterminada del segmento como public-read; con ello, los usuarios podrán ver las imágenes que suban:

    gsutil defacl set public-read gs://[YOUR-BUCKET-NAME]

Clonar la aplicación de muestra

Podrás encontrar la aplicación de muestra en GitHub en GoogleCloudPlatform/getting-started-python.

  1. Clona el repositorio:

    git clone https://github.com/GoogleCloudPlatform/getting-started-python.git
    
  2. Ve al directorio de la muestra:

    cd getting-started-python/7-gce
    

Configurar la aplicación

  1. Abre config.py para editarlo.

  2. Utiliza el ID del proyecto como el valor de PROJECT_ID.

  3. Usa el nombre del segmento que creaste en el paso anterior como el valor de CLOUD_STORAGE_BUCKET.

  4. Guarda y cierra config.py.

Ejecutar la aplicación en el ordenador local

  1. Crea un entorno de Python aislado e instala las dependencias:

    Linux/macOS X

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv env
    env\scripts\activate
    pip install -r requirements.txt
    

  2. Ejecuta la aplicación:

    python main.py
    
  3. Introduce la siguiente dirección en el navegador web:

    http://localhost:8080

Presiona Control + C para detener el servidor web local. Si quieres salir del entorno virtual, escribe deactivate.

Desplegar la aplicación de muestra

Enviar el código a un repositorio

Hay varias formas de hacer llegar el código a una instancia de Compute Engine en ejecución. Una de ellas pasa por usar Cloud Source Repositories. Cada proyecto incluye un repositorio de Git que puede ponerse fácilmente a disposición de las instancias de Compute Engine. Así, las instancias pueden obtener la versión más reciente del código de la aplicación durante el inicio. Esto resulta muy práctico porque para actualizar la aplicación no se necesita configurar nuevas imágenes o instancias; lo único que tienes que hacer es reiniciar una instancia o crear una nueva.

Envía el código de la aplicación al repositorio del proyecto:

git commit -am "Updating configuration"
git config credential.helper gcloud.sh
gcloud beta source repos create [YOUR_REPO]
git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO]
git push cloud

donde [YOUR_PROJECT_ID] es el ID del proyecto.

Crear el despliegue

Una vez que se haya confirmado la configuración y el código se haya subido al repositorio de Cloud Source, puedes usar la configuración de Deployment Manager para crear el despliegue.

Ve al directorio de deployment_manager:

cd getting-started-python/7-gce/gce/deployment_manager

Crea el despliegue:

gcloud deployment-manager deployments create my-deployment --config config.yaml

Visualiza una lista de todos los despliegues:

gcloud deployment-manager deployments list

Obtén una descripción del despliegue y de los recursos que creó:

gcloud deployment-manager deployments describe my-deployment

Visualizar la aplicación

Después de crear la regla de reenvío, la configuración puede tardar varios minutos en propagarse y el tráfico en enrutarse a las instancias. Para verificar el progreso, introduce el siguiente comando:

gcloud compute backend-services get-health bookshelf-my-deployment-frontend

Si al menos una de las instancias presenta el valor HEALTHY, introduce este comando para obtener la dirección IP de reenvío del balanceador de carga:

gcloud compute forwarding-rules list --global

La dirección IP de las reglas de reenvío se encuentra en la columna IP_ADDRESS. Introduce la dirección IP de la lista en el navegador.

Ahora la aplicación se está ejecutando en Google Cloud Platform con balanceo de carga y autoescalado.

Información sobre el código

Configuración del despliegue

Puedes ver cómo se configura el despliegue en config.yaml:

imports:
- name: bookshelf.jinja
  path: ./bookshelf.jinja

resources:
- name: bookshelf
  type: bookshelf.jinja
  properties:
    zone: us-central1-f
    machine-type: n1-standard-1
    machine-image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-8
    min-instances: 1
    max-instances: 10
    target-utilization: 0.6
    scopes:
    - https://www.googleapis.com/auth/cloud-platform

El archivo de configuración importa el archivo de la plantilla como un recurso y lo usa para definir un recurso llamado bookshelf. La plantilla toma varias propiedades como parámetros. Para obtener más información sobre cómo generar archivos de configuración de Deployment Manager, consulta la sección relativa a cómo crear una configuración.

Configuración del esquema de la plantilla de despliegue

A continuación, observa el archivo de esquema, bookshelf.jinja.schema, que define y documenta los parámetros que se espera que proporcione el despliegue en su archivo de configuración. Para obtener más información sobre los esquemas de configuración, consulta el apartado relacionado con el uso de los esquemas.

info:
  title: Bookshelf GCE Deploy
  author: Google Inc.
  description: Creates a GCE Deployment

imports:
- name: startup-script
  path: ../startup-script.sh

required:
- zone
- machine-type
- min-instances
- max-instances
- scopes

properties:
  zone:
    description: Zone to create the resources in.
    type: string
  machine-type:
    description: Type of machine to use
    type: string
  machine-image:
    description: The OS image to use on the machines
    type: string
  min-instances:
    description: The minimum number of VMs the autoscaler will create
    type: integer
  max-instances:
    description: The maximum number of VMs the autoscaler will create
    type: integer
  target-utilization:
    description: The target CPU usage for the autoscaler to base its scaling on
    type: number
  scopes:
    description: A list of scopes to create the VM with
    type: array
    minItems: 1
    items:
      type: string

Configuración de la plantilla de despliegue

La plantilla define varios recursos para crear un grupo de instancias gestionado con autoescalado y balanceo de carga. Consulta los comentarios de la plantilla para obtener una descripción completa de los recursos creados y echa un vistazo al tutorial sobre Bookshelf en Compute Engine para ver una explicación más detallada de dichos recursos.

Ten en cuenta que Deployment Manager permite definir de forma declarativa los recursos de la nube, pero la mayoría de la configuración de un recurso determinado la establece su API. Por ejemplo, la mayor parte de las opciones de configuración del recurso Plantilla de instancia se puede encontrar en la definición del recurso Plantilla de instancia de la documentación de referencia de la API de Compute Engine.

La plantilla está escrita con el lenguaje de plantillas Jinja. Las plantillas de Deployment Manager se pueden escribir con Jinja o Python. Jinja tiene la ventaja de ser más declarativo, por lo que, a menudo, es más legible y fácil de entender. En algunos despliegues complejos, la expresividad total de Python podría simplificar las cosas. En este caso, Jinja es suficiente para crear los recursos necesarios.

En una plantilla, algunas variables de entorno se establecen automáticamente de manera que se pueda acceder a ellas a través del diccionario env. En este caso, se hace referencia al nombre del despliegue como un nombre que se reutilizará al asignar nombres a los recursos que se crean. Para obtener más información sobre las variables de entorno disponibles, consulta el apartado relativo a cómo añadir plantillas en la documentación de Deployment Manager.

{% set NAME = "bookshelf-" + env["deployment"] %}
{% set SERVICE = "bookshelf-" + env["deployment"] + "-frontend" %}

Ten en cuenta que la plantilla usa la misma secuencia de comandos de inicio que se emplea en el tutorial de Compute Engine. El valor se importa a través de config.yaml y luego se inserta aquí. Es importante mantener adecuadamente el espacio en blanco de la secuencia de comandos en la plantilla. Por su parte, la directiva de sangría de Jinja se utiliza para conseguir lo siguiente:

            value: |
{{imports['startup-script']|indent(14, true)}}

Asimismo, ten en cuenta que, en una plantilla de Jinja de Deployment Manager, se puede hacer referencia a recursos creados en otro lugar de la plantilla. En este ejemplo, el servicio de backend utiliza la referencia del grupo de instancias gestionado para obtener el grupo de instancias al que debe apuntar:

- group: $(ref.{{ NAME }}-frontend-group.instanceGroup)
  zone: {{ properties['zone'] }}

Las propiedades que se especifican en config.yaml se pueden usar en la plantilla:

minNumReplicas: {{ properties['min-instances'] }}
maxNumReplicas: {{ properties['max-instances'] }}
loadBalancingUtilization:
  utilizationTarget: {{ properties['target-utilization'] }}

Eliminar los recursos

Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud Platform, sigue estas instrucciones:

Eliminar el proyecto

La forma más fácil de evitar la facturación consiste en eliminar el proyecto que has creado para el tutorial.

Para eliminar el proyecto, sigue las instrucciones que figuran a continuación:

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

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

Eliminar el despliegue

Introduce el siguiente comando para eliminar el despliegue. De esta manera, también se quitan el balanceador de carga y las instancias de Compute Engine asociadas con el despliegue:

gcloud deployment-manager deployments delete my-deployment

Siguientes pasos

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...