Implementar Bookshelf en Python con Deployment Manager

Este instructivo muestra cómo implementar el ejemplo de Bookshelf en Python con Google Cloud Deployment Manager.

Deployment Manager permite crear recursos de Google Cloud Platform (GCP) de manera declarativa y repetible, por lo que es fácil crear todos los recursos necesarios para una implementación en un solo paso. Con Deployment Manager, puedes actualizar tus implementaciones y realizar un seguimiento de tus modificaciones en el tiempo. Puedes crear plantillas con Jinja o Python y modificar tus parámetros, de manera que las implementaciones similares puedan compartir una plantilla.

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

Este instructivo usa componentes facturables de Cloud Platform, incluidos los siguientes:

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

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto. Los usuarios nuevos de GCP pueden optar a una prueba gratuita.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

  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 y Cloud Pub/Sub API necesarias.

    Habilita las API

  5. Realiza la instalación y la inicialización del SDK de Cloud.
  6. Instala Python, pip y virtualenv en tu sistema. Para conocer las instrucciones, consulta Configurar un entorno de programación en Python para Google Cloud Platform.

Crear un depósito de Cloud Storage

Las instrucciones siguientes muestran cómo crear un depósito de Cloud Storage. Los depósitos son los contenedores básicos que conservan tus datos en Cloud Storage.

  1. En una ventana de terminal, ingresa el siguiente comando:

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

    Leyenda:

    • [YOUR-BUCKET-NAME] representa el nombre de tu depósito de Cloud Storage.
  2. Para ver las imágenes subidas en la app de Bookshelf, configura la lista de control de acceso (LCA) predeterminada del depósito en public-read.

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

Clonar la app de muestra

La aplicación 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
    
  2. Ve al directorio de muestra:

    cd getting-started-python/7-gce
    

Configurar la app

  1. Abre config.py para editarlo.

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

  3. Configura el valor CLOUD_STORAGE_BUCKET con el nombre del depósito que creaste en el paso anterior.

  4. Guarda el archivo config.py y ciérralo.

Ejecutar 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. Ejecuta 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.

Implementar la app de muestra

Enviar tu código a un repositorio

Existen varias maneras de usar tu código en una instancia de Compute Engine en ejecución. Una manera es usar Cloud Source Repositories. Cada proyecto incluye un repositorio de Git que se puede poner a disposición de las instancias de Compute Engine. Luego, tus instancias pueden obtener la versión más reciente del código de tu aplicación durante el inicio. Esto es muy útil, ya que para actualizar tu aplicación no será necesario que configures imágenes o instancias nuevas; solo debes reiniciar una instancia existente o crear una nueva.

Si es la primera vez que utilizas Git, usa git config --global para configurar tu identidad.

Primero, crea un repositorio aquí en tu GCP Console. O crea un repositorio con gcloud:

gcloud source repos create [YOUR_REPO]

donde [YOUR_PROJECT_ID] es tu ID de proyecto y [YOUR_REPO] es el nombre del repositorio que acabas de crear. Luego, envía el código de tu aplicación al repositorio de tu proyecto:

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

en el que [YOUR_PROJECT_ID] es el ID del proyecto.

Crear la implementación

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

Ve al directorio deployment_manager:

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

Crea la implementación:

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

Ve una lista de todas las implementaciones:

gcloud deployment-manager deployments list

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. Para verificar el progreso, ingresa el siguiente comando:

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

Cuando al menos una de tus instancias informe el estado HEALTHY, ingresa el siguiente comando para obtener 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. En tu navegador, ingresa la dirección IP de la lista.

Ahora tu app se ejecuta con balanceo de cargas y ajuste de escala automático en Google Cloud Platform.

Comprender el código

Configurar la implementación

Puede ver la configuración de 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 usa 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.

Configurar el esquema de la plantilla de implementación

A continuación, observa 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

Configurar la plantilla de implementación

La plantilla define varios recursos para crear un grupo de instancias administradas con balanceo de cargas y ajuste de escala automático. Consulta los comentarios de la plantilla para obtener una descripción completa de los recursos creados y revisa el instructivo de Bookshelf en Compute Engine para obtener una explicación más detallada de los recursos creados.

Ten en cuenta que Deployment Manager permite definir recursos de la nube de manera declarativa, pero la mayor parte de la configuración de un recurso dado es definida por su API. Por ejemplo, puedes encontrar la mayoría de las opciones de configuración del recurso Plantilla de instancia en la definición del recurso Plantilla de instancias en la documentación de referencia para la API de Compute Engine.

La plantilla se escribió 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, lo que suele ser más fácil de leer y comprender. En el caso de algunas implementaciones complejas, la expresividad completa de Python podría hacerlo más simple. En este caso, Jinja es suficiente para crear los recursos necesarios.

En una plantilla, ciertas variables de entorno se configuran automáticamente y es posible acceder a ellas mediante el diccionario env. En este caso, el nombre de la implementación se volverá a usar cuando se asignen nombres a los recursos que se crean. Para obtener más información sobre las variables de entorno disponibles, consulta Agregar 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 usa en el instructivo de Compute Engine. El valor se importa a través de config.yaml y luego se inserta aquí. Es importante que el espacio en blanco de la secuencia de comandos se conserve de manera apropiada en la plantilla. La directiva sobre la sangría de Jinja se usa para lograr esto:

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

En una plantilla de Jinja de Deployment Manager, es posible hacer referencia a un recurso creado en otra parte de la plantilla. En este 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'] }}

Limpiar

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

Borrar 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, haz lo siguiente:

  1. En la GCP Console, dirígete a la página Proyectos.

    Ir a la página Proyectos

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

Borrar tu implementación

Ingresa este comando para borrar tu implementación. Con esto se borra el balanceador de cargas y todas las instancias de Compute Engine asociadas a tu implementación:

gcloud deployment-manager deployments delete my-deployment

Pasos siguientes

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

Enviar comentarios sobre...