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 documento, usarás 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 califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 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 disponible para las instancias de Compute Engine. Luego, durante el inicio, tus instancias obtendrán la versión más reciente del código de tu app. Usar un repositorio de Git es conveniente porque la actualización de tu app no requiere configurar imágenes o instancias nuevas; solo debes reiniciar una instancia existente o crear una.

  1. Por primera vez que usas 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 el ID del proyecto y [YOUR_REPO] es el nombre del 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 Repository, 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, haz lo siguiente:

    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 se espera que la implementación proporcione en su archivo de configuración. Para obtener más información sobre los esquemas de configuración, consulta Usa 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 y con ajuste de escala automático. Para obtener una descripción completa de los recursos creados, consulta los comentarios de la plantilla y revisa el instructivo de Bookshelf en Compute Engine.

Ten en cuenta que Deployment Manager proporciona una forma de definir recursos de forma declarativa, pero la mayor parte de la configuración de un recurso determinado se define mediante 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 plantilla de instancias en la documentación de referencia de la API de Compute Engine.

La plantilla se escribe con el lenguaje de plantillas de 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 legible y fácil de entender que Python. Para algunas implementaciones complejas, la expresividad completa de Python podría simplificar las cosas. 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 mediante el diccionario env. En este caso, se hace referencia al nombre de la implementación como un nombre que 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 Usa variables de entorno en la documentación de Deployment Manager:

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

En la plantilla, se 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 sobre la sangría de Jinja aplica la sangría correcta:

            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 sección de la plantilla. En el siguiente ejemplo, el servicio de backend usa la referencia del grupo de instancia 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'] }}

Limpia

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

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

Borra tu implementación

Para borrar tu implementación, ingresa el siguiente comando. Este comando borra el balanceador de cargas y las instancias de Compute Engine que estén asociadas con la implementación:

gcloud deployment-manager deployments delete my-deployment

¿Qué sigue?