Déployer l'application Bookshelf pour Node.js à l'aide de Cloud Deployment Manager

Ce tutoriel explique comment déployer l'exemple d'application Bookshelf pour Node.js à 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

Ce tutoriel utilise les composants facturables de Google Cloud Platform répertoriés ici :

Vous pouvez vous servir du simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue. Les nouveaux utilisateurs de GCP peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la page Effectuer un nettoyage pour en savoir plus.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans la page de sélection du projet de la console GCP, sélectionnez ou créez un projet GCP.

    Accéder à la page de sélection du projet

  3. Assurez-vous que la facturation est activée pour votre projet Google Cloud Platform. Découvrez comment confirmer que la facturation est activée pour votre projet.

  4. Activez les Datastore API, Cloud Storage API, Pub/Sub API API requises.

    Activer les API

  5. Installez et initialisez le SDK Cloud.
  6. Installez Node.js et npm à l'aide du programme d'installation officiel.

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. Remplacez YOUR_BUCKET_NAME par 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/nodejs-getting-started.

  1. Clonez le dépôt :

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

    cd nodejs-getting-started/7-gce
    

Configurer l'application

Dans le répertoire 7-gce, créez un fichier nommé config.json et contenant ce qui suit :

{
    "GCLOUD_PROJECT": "[YOUR_PROJECT_ID]",
    "CLOUD_BUCKET": "[YOUR_BUCKET_NAME]",
    "DATA_BACKEND": "datastore",
    "OAUTH2_CLIENT_ID": "none",
    "OAUTH2_CLIENT_SECRET": "none",
    "OAUTH2_CALLBACK": "http://localhost:8080/auth/google/callback"
}

Remplacez [YOUR_PROJECT_ID] par l'ID de votre projet Google Cloud et [YOUR_BUCKET_NAME] par le nom de votre bucket Cloud Storage.

Exécuter l'application sur votre ordinateur local

Procédez comme suit pour exécuter l'application en local.

  1. Installez des dépendances en exécutant npm install.

  2. Démarrez l'application en exécutant npm start.

    Pour afficher l'application en cours d'exécution en local, accédez à http://localhost:8080.

    Pour arrêter le serveur Web local, appuyez sur les touches Ctrl+C.

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 nodejs-getting-started/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-8
    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 dans ce tutoriel soient facturées sur votre compte Google Cloud Platform, procédez comme suit :

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 GCP, 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