Implementa la app de Bookshelf para Python con Cloud Deployment Manager

En este instructivo, se muestra cómo implementar la app de muestra de Bookshelf de Python con Cloud Deployment Manager.

Deployment Manager te permite crear los recursos de Google Cloud necesarios para una implementación en un solo paso, a través de un proceso declarativo y repetible. Con Deployment Manager, puedes actualizar tus implementaciones, realizar un seguimiento de tus modificaciones a lo largo del tiempo, crear plantillas con Jinja o Python y modificar tus plantillas para que las implementaciones similares la compartan.

Objetivos

  • Clonar y configurar la app de muestra de Bookshelf
  • Crear configuraciones y plantillas de Deployment Manager
  • Crear implementaciones de Deployment Manager
  • Implementar la app de muestra de Bookshelf con Deployment Manager

Costos

En este instructivo, se usan 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 sean aptos para obtener una prueba gratuita.

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyecto

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

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

    Habilita las API

  5. Instala e inicializa el SDK de Cloud.
  6. Instala Python, pip y virtualenv en tu sistema. Para obtener instrucciones, consulta Configurar un entorno de desarrollo de Python para Google Cloud.

Crea un depósito de Cloud Storage

En las instrucciones siguientes, se detalla cómo crear 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:

    gsutil mb gs://YOUR_BUCKET_NAME
    
  2. Para ver las imágenes que se subieron en la aplicación Bookshelf, configura la Lista de control de acceso (LCA) predeterminada del depósito como public-read.

    gsutil defacl set public-read gs://YOUR_BUCKET_NAME
    

Clona la app de muestra

La app de muestra está disponible en GitHub en GoogleCloudPlatform/getting-started-python.

  1. Clona el repositorio:

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

    cd getting-started-python/7-gce
    

Configura la app

  1. Abre config.py para edición.

    • Configura el valor de PROJECT_ID como el ID de tu proyecto.

    • Establece la variable CLOUD_STORAGE_BUCKET como el nombre de tu bucket de Cloud Storage.

  2. Guarda y cierra config.py.

Ejecuta la app en tu computadora local

  1. Crea un entorno aislado de Python y, luego, instala las dependencias:

    Linux/macOS

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

    Windows

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

  2. Ejecute la aplicación:

    python main.py
    
  3. En el navegador web, ingresa la siguiente dirección:

    http://localhost:8080

Para detener el servidor web local, presiona Control+C. Si deseas salir del entorno virtual, ingresa deactivate.

Implementa la app de muestra

Enviar tu código a un repositorio

Puedes obtener tu código en una instancia de Compute Engine en ejecución de varias maneras. Una manera es usar Cloud Source Repositories. Cada proyecto incluye un repositorio de Git que está disponible para las instancias de Compute Engine. Luego, las instancias obtienen la versión más reciente del código de tu app durante el inicio. Usar un repositorio de Git es conveniente, ya que para actualizar tu aplicación no se necesitan imágenes o instancias nuevas. Reinicia una instancia existente o crea una.

  1. La primera vez que uses Git, usa git config --global para configurar tu identidad.

  2. En Cloud Console, crea un repositorio:

    Crear repositorio

  3. Luego, envía el código de tu app al repositorio de tu proyecto en el que [YOUR_PROJECT_ID] es tu ID del proyecto y [YOUR_REPO] es el nombre de tu repositorio:

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

Crea la implementación:

Después de confirmar la configuración y subir tu código a Cloud Source Repositories, puedes usar Deployment Manager para crear la implementación:

  1. Ve al directorio deployment_manager:

    cd getting-started-python/7-gce/gce/deployment_manager
    
  2. Crea la implementación:

    gcloud deployment-manager deployments create my-deployment --config config.yaml
    
  3. Ve una lista de todas las implementaciones:

    gcloud deployment-manager deployments list
    
  4. Obtén una descripción de la implementación y los recursos que creó:

    gcloud deployment-manager deployments describe my-deployment
    

Ver tu aplicación

Después de crear la regla de reenvío, tu configuración puede tardar varios minutos en propagarse y el tráfico puede tardar el mismo tiempo en dirigirse a tus instancias.

  1. Para verificar el progreso, siga estos pasos:

    gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
    
  2. Cuando al menos una de tus instancias informe el estado HEALTHY, obtén la dirección IP de reenvío para el balanceador de cargas:

    gcloud compute forwarding-rules list --global
    

    La dirección IP de tus reglas de reenvío está en la columna IP_ADDRESS.

  3. En tu navegador, ingresa la dirección IP de la lista.

    Tu app ya se ejecuta en Google Cloud.

Comprende el código

Configura la implementación

Puedes ver cómo se configura la implementación 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-9
    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 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 crear archivos de configuración de Deployment Manager, consulta Cómo crear una configuración.

Configura el esquema de la plantilla de implementación

Mira el archivo de esquema bookshelf.jinja.schema, que define y documenta los parámetros que la implementación debe proporcionar en su archivo de configuración. Para obtener más información sobre los esquemas de configuración, consulta Usar 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

Configura la plantilla de implementación

La plantilla define varios recursos necesarios para crear un grupo de instancias administrado con ajuste de escala automático y balanceo de cargas. Para obtener una descripción completa de los recursos creados, consulta los comentarios en la plantilla y revisa el instructivo Bookshelf en Compute Engine.

Ten en cuenta que Deployment Manager proporciona una forma de definir recursos de manera declarativa, pero la mayor parte de la configuración de un recurso determinado está definido por su API. Por ejemplo, la mayoría de las opciones de configuración para el recurso de plantilla de instancias se encuentran en la definición de recurso de la plantilla de instancias en la documentación de referencia de Compute. API de Engine.

La plantilla se escribe con el lenguaje de plantillas Jinja. Cuando escribes plantillas de Deployment Manager, puedes usar Jinja o Python. Jinja tiene la ventaja de ser más declarativo, que puede ser más fácil de leer y más fácil de comprender que Python. En el caso de algunas implementaciones complejas, la expresividad completa de Python podría simplificar el proceso. En este caso, Jinja es suficiente para crear los recursos necesarios.

En una plantilla, ciertas variables de entorno se configuran automáticamente y puedes acceder a ellas con el diccionario env. En este caso, el nombre de la implementación se vuelve a usar como un nombre para reutilizar cuando se asignan nombres a los recursos que se crean. Para obtener más información sobre las variables de entorno disponibles, consulta la sección sobre el uso de variables de entorno en la documentación de Deployment Manager:

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

La plantilla usa la misma secuencia de comandos de inicio que se usa en el instructivo de Compute Engine. El contenido de la secuencia de comandos se inserta en la plantilla, y la directiva de sangría de Jinja alinea correctamente el contenido:

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

En una plantilla de Jinja de Deployment Manager, también puedes hacer referencia a los recursos creados en otra parte de la plantilla. En el siguiente ejemplo, el servicio de backend usa la referencia del grupo de instancias administrado para obtener el grupo de instancias al que debería apuntar:

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

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

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

Realice una limpieza

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

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra tu implementación

Ingresa el siguiente comando para borrar tu implementación. Este comando borra el balanceador de cargas y cualquier instancia de Compute Engine asociada a tu implementación:

gcloud deployment-manager deployments delete my-deployment

¿Qué sigue?