Déployer l'application Bookshelf pour Python à l'aide de Cloud Deployment Manager

Ce tutoriel explique comment déployer l'exemple d'application Bookshelf pour Python à l'aide de Cloud Deployment Manager.

Deployment Manager vous permet de créer les ressources Google Cloud nécessaires pour un déploiement en une seule étape, par le biais d'un processus déclaratif et reproductible. Avec Deployment Manager, vous pouvez mettre à jour les déploiements et suivre les modifications dans le temps. Vous pouvez créer des modèles avec Jinja ou Python et les paramétrer pour que des déploiements semblables puissent partager le même modèle.

Objectifs

  • Cloner et configurer l'exemple d'application Bookshelf
  • Créer des configurations et des modèles Deployment Manager
  • Créer des déploiements Deployment Manager
  • Déployer l'exemple d'application Bookshelf à l'aide de Deployment Manager

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API Datastore API, Cloud Storage API, Pub/Sub API.

    Activer les API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  7. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  8. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  9. Activer les API Datastore API, Cloud Storage API, Pub/Sub API.

    Activer les API

  10. Installez Google Cloud CLI.
  11. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  12. Installez Python, pip et virtualenv sur votre système. Pour obtenir des instructions, consultez la page Configurer un environnement de développement Python pour Google Cloud.

Créer un bucket Cloud Storage

Les instructions suivantes expliquent comment créer un bucket Cloud Storage. Les buckets sont les conteneurs de base dans lesquels sont stockées vos données dans Cloud Storage.

  1. Dans votre fenêtre de terminal, créez un bucket Cloud Storage, où YOUR_BUCKET_NAME représente le nom de votre bucket :

    gsutil mb gs://YOUR_BUCKET_NAME
    
  2. Pour afficher les images importées dans l'application Bookshelf, définissez la liste de contrôle d'accès (LCA) par défaut du bucket sur public-read :

    gsutil defacl set public-read gs://YOUR_BUCKET_NAME
    

Cloner l'exemple d'application

L'exemple d'application est disponible sur GitHub à l'adresse GoogleCloudPlatform/getting-started-python.

  1. Clonez le dépôt :

    git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
    
  2. Accédez au répertoire de l'exemple :

    cd getting-started-python/7-gce
    

Configurer l'application

  1. Ouvrez config.py pour y apporter des modifications.

    • Définissez PROJECT_ID sur la valeur de votre ID de projet.

    • Définissez la valeur CLOUD_STORAGE_BUCKET sur le nom de votre bucket Cloud Storage.

  2. Enregistrez et fermez le fichier config.py.

Exécuter l'application sur votre ordinateur local

  1. Créez un environnement Python isolé et installez des dépendances :

    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. Exécutez l'application :

    python main.py
    
  3. Dans votre navigateur, saisissez l'adresse suivante :

    http://localhost:8080

Pour arrêter le serveur Web local, appuyez sur les touches Ctrl+C. Si vous souhaitez quitter l'environnement virtuel, saisissez deactivate.

Déployer l'exemple d'application

Transférer votre code vers un dépôt

Vous pouvez transférer votre code sur une instance Compute Engine en cours d'exécution de plusieurs façons. Une solution consiste à utiliser l'outil Cloud Source Repositories. Chaque projet comprend un dépôt Git mis à la disposition des instances Compute Engine. Vos instances récupèrent ensuite la dernière version du code de votre application lors du démarrage. L'utilisation d'un dépôt Git est pratique, car la mise à jour de votre application ne nécessite pas de configurer de nouvelles images ni de nouvelles instances. Il vous suffit de redémarrer une instance existante ou d'en créer une nouvelle.

  1. Lors de votre première utilisation de Git, utilisez git config --global pour configurer votre identité.

  2. Dans Cloud Console, créez un dépôt:

    Créer un dépôt

  3. Transférez ensuite le code de votre application vers le dépôt de votre projet, où [YOUR_PROJECT_ID] correspond à l'ID du projet et [YOUR_REPO] au nom du dépôt :

    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
    

Créer le déploiement

Une fois la configuration validée et le code transféré dans l'outil Cloud Source Repositories, vous pouvez créer le déploiement avec Deployment Manager :

  1. Accédez au répertoire deployment_manager :

    cd getting-started-python/7-gce/gce/deployment_manager
    
  2. Créez le déploiement :

    gcloud deployment-manager deployments create my-deployment --config config.yaml
    
  3. Affichez la liste de tous les déploiements :

    gcloud deployment-manager deployments list
    
  4. Obtenez une description du déploiement et des ressources qu'il a créées :

    gcloud deployment-manager deployments describe my-deployment
    

Afficher l'application

Une fois la règle de transfert créée, la propagation de la configuration et le routage du trafic vers vos instances peuvent prendre plusieurs minutes.

  1. Pour en vérifier l'avancement, procédez comme suit :

    gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
    
  2. Lorsqu'au moins une instance indique HEALTHY, obtenez l'adresse IP de transfert pour l'équilibreur de charge :

    gcloud compute forwarding-rules list --global
    

    L'adresse IP contenant vos règles de transfert se situe dans la colonne IP_ADDRESS.

  3. Dans votre navigateur, saisissez l'adresse IP présente dans la liste.

    Votre application s'exécute désormais sur Google Cloud.

Comprendre le code

Configurer le déploiement

Vous pouvez accéder à la configuration du déploiement dans 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

Le fichier de configuration importe le fichier de modèle en tant que ressource et l'utilise pour définir une ressource nommée bookshelf. Le modèle prend plusieurs propriétés en tant que paramètres. Pour en savoir plus sur la création de fichiers de configuration Deployment Manager, consultez la page Créer une configuration.

Configurer le schéma du modèle de déploiement

Examinez le fichier de schéma bookshelf.jinja.schema, qui définit et documente les paramètres que le déploiement est censé fournir dans le fichier de configuration correspondant. Pour en savoir plus sur les schémas de configuration, consultez la page Utiliser des schémas :


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

Configurer le modèle de déploiement

Le modèle définit plusieurs ressources nécessaires pour créer un groupe d'instances géré avec équilibrage de charge et autoscaling. Pour obtenir une description complète des ressources créées, consultez les commentaires dans le modèle ainsi que le tutoriel Bookshelf sur Compute Engine.

Deployment Manager permet de spécifier les ressources de manière déclarative. Toutefois, son API définit une grande partie de la configuration d'une ressource donnée. Par exemple, la plupart des options de configuration de la ressource de modèle d'instance se trouvent dans la définition de cette ressource, qui figure dans la documentation de référence de l'API Compute Engine.

Le modèle est écrit à l'aide du langage de conception de modèles Jinja. Lorsque vous écrivez des modèles Deployment Manager, vous pouvez utiliser Jinja ou Python. Jinja a l'avantage d'être plus déclaratif. Il peut donc se révéler plus lisible et plus facile à comprendre que Python. Pour certains déploiements complexes, l'expressivité totale de Python peut faciliter la tâche. Dans le cas présent, Jinja est suffisant pour créer les ressources nécessaires.

Dans un modèle, certaines variables d'environnement sont définies automatiquement. Vous pouvez y accéder à l'aide du dictionnaire env. Dans ce cas, le nom du déploiement est référencé en tant que nom à réutiliser lors de l'attribution de noms aux ressources créées. Pour en savoir plus sur les variables d'environnement disponibles, consultez la page Utiliser des variables d'environnement dans la documentation Deployment Manager :

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

Le modèle utilise le même script de démarrage que celui utilisé dans le tutoriel Compute Engine. Le contenu du script est inséré dans le modèle, et la directive Jinja sur le retrait met le contenu en retrait correctement :

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

Dans un modèle Jinja Deployment Manager, vous pouvez également faire référence à des ressources créées ailleurs dans le modèle. Dans l'exemple suivant, le service de backend utilise la référence du groupe d'instances géré pour obtenir le groupe d'instances vers lequel il doit pointer :

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

Les propriétés spécifiées dans config.yaml peuvent être utilisées dans le modèle :

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

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer le déploiement

Pour supprimer votre déploiement, entrez la commande suivante. Elle supprime l'équilibreur de charge et toutes les instances Compute Engine associées au déploiement :

gcloud deployment-manager deployments delete my-deployment

Étapes suivantes