Dans ce tutoriel, vous allez déployer un exemple d'application de journal utilisant Node.js pour l'interface et MySQL pour le backend. À la fin du tutoriel, votre déploiement contiendra les ressources suivantes :
Si vous ne connaissez pas encore Deployment Manager, consultez le guide de démarrage rapide ou les tutoriels du guide par étapes.
Avant de commencer
- Si vous voulez vous servir des exemples de ligne de commande de ce guide, installez l'outil de ligne de commande gcloud.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
- Consultez la présentation de l'équilibrage de charge réseau de Compute Engine.
- Consultez la présentation des conteneurs Docker.
Créer vos modèles de ressources
Cet exemple lance un déploiement contenant diverses ressources Google Cloud. Pour commencer, vous allez créer des modèles qui définissent ces ressources séparément. Vous appellerez ensuite ces modèles dans votre configuration finale. Votre déploiement contient les ressources suivantes :
- Une instance Compute Engine qui héberge une base de données MySQL pour l'application.
- Un modèle d'instance pour les instances d'interface, qui utilise une image Docker pour l'application Node.js.
- Un groupe d'instances géré qui génère deux instances frontend à l'aide du modèle d'instance.
- Un autoscaler qui démarre ou arrête des instances frontend supplémentaires en fonction du trafic entrant.
- Une vérification de l'état qui indique si les instances frontend sont disponibles ou non.
- Un équilibreur de charge réseau disposant d'une règle de transfert.
- Un pool cible pour le groupe d'instances géré.
Créer le modèle pour le backend MySQL
Le backend de cette application consiste en une instance Compute Engine unique exécutant un conteneur MySQL Docker. Le modèle container_vm.py
définit une instance Compute Engine capable d'exécuter des conteneurs Docker. Pour vous assurer que le modèle suit la structure appropriée et contient toutes les propriétés requises, vous avez également besoin d'un fichier de schéma.
Copiez le modèle ci-dessous ou téléchargez-le depuis le dépôt GitHub :
Téléchargez le fichier de schéma pour le modèle.
Le modèle comporte des propriétés non définies, telles que containerImage
, qui sont définies dans des modèles ultérieurs.
Lorsque vous utilisez des images de conteneur sur des instances Compute Engine, vous devez également fournir un fichier manifeste qui décrit l'image de conteneur à utiliser. Créez une méthode d'assistance appelée container_helper.py
pour définir le fichier manifeste du conteneur de façon dynamique :
Créer le modèle pour l'interface Node.js
L'interface de l'application exécute Node.js et permet aux utilisateurs de publier des messages sur la page Web. L'interface s'exécute sur un groupe d'instances de VM assisté par un autoscaler et un équilibreur de charge. Pour créer ces modèles d'interface, suivez les instructions ci-dessous.
Créez une ressource de modèle d'instance.
Vous avez besoin d'un modèle d'instance pour créer un groupe d'instances géré. Il s'agit d'un groupe d'instances de machines virtuelles identiques que vous contrôlez comme une seule entité.
Créez un fichier nommé
container_instance_template.py
, puis téléchargez le schéma du modèle :Créez un autoscaler, un groupe d'instances géré et un équilibreur de charge.
Ensuite, créez un autre modèle qui utilise le modèle
container_instance_template.py
et crée les autres ressources de votre frontend, notamment un autoscaler, un équilibreur de charge et un groupe d'instances géré.
Ce modèle comprend les ressources suivantes :
Un modèle d'instance utilisant le modèle
container_instance_template.py
.Un groupe d'instances géré qui utilise le modèle d'instance et un autoscaler qui référence le groupe d'instances géré. L'utilisation de références permet à Deployment Manager de générer les ressources dans un ordre spécifique. Dans ce cas, le groupe d'instances gérées est créé avant l'autoscaler.
Un équilibreur de charge réseau qui contient les ressources suivantes :
- Une règle de transfert avec une adresse IP externe unique exposée sur Internet.
- Un pool cible contenant le groupe d'instances géré que vous avez précédemment créé.
- Une vérification d'état à associer au pool cible.
Créez un fichier nommé frontend.py
, puis téléchargez le schéma du modèle :
Téléchargez le fichier de schéma pour le modèle.
Créer un modèle commun
Enfin, créez un modèle combinant les modèles de backend et de frontend. Créez un fichier nommé nodejs.py
avec le contenu suivant :
Téléchargez le fichier de schéma pour le modèle.
Notez que l'interface de votre application s'appelle env["deployment"]-frontend
et que votre backend porte le même nom. Lorsque vous déployez l'application, Deployment Manager remplace automatiquement env["deployment"]
par le nom de déploiement.
Créer une configuration
Une fois tous les modèles prêts, vous pouvez créer une configuration qui servira à déployer vos ressources. Créez un fichier de configuration nommé nodejs.yaml
avec le contenu suivant :
Remplacez ZONE_TO_RUN
par la zone dans laquelle vous souhaitez héberger vos ressources, par exemple us-central1-a
.
Déployer vos ressources
Déployez maintenant vos ressources. À l'aide de Google Cloud CLI, exécutez la commande suivante :
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
Une fois le déploiement terminé, Deployment Manager affiche un récapitulatif des ressources créées, comparable au suivant :
Waiting for create operation-1468522101491-5379cf2344539-5961abe8-a500190c...done.
Create operation operation-1468522101491-5379cf2344539-5961abe8-a500190c completed successfully.
NAME TYPE STATE ERRORS
advanced-configuration-application-fw compute.v1.firewall COMPLETED []
advanced-configuration-backend compute.v1.instance COMPLETED []
advanced-configuration-frontend-as compute.v1.autoscaler COMPLETED []
advanced-configuration-frontend-hc compute.v1.httpHealthCheck COMPLETED []
advanced-configuration-frontend-igm compute.v1.instanceGroupManager COMPLETED []
advanced-configuration-frontend-it compute.v1.instanceTemplate COMPLETED []
advanced-configuration-frontend-lb compute.v1.forwardingRule COMPLETED []
advanced-configuration-frontend-tp compute.v1.targetPool COMPLETED []
Tester l'application
Pour tester votre application, commencez par récupérer l'adresse IP externe qui diffuse le trafic en adressant une requête à la règle de transfert :
$ gcloud compute forwarding-rules describe advanced-configuration-frontend-lb --region us-central1 IPAddress: 104.154.81.44 IPProtocol: TCP creationTimestamp: '2016-07-14T11:48:37.228-07:00' description: '' id: '9033201246750269546' kind: compute#forwardingRule name: advanced-configuration-frontend-lb portRange: 8080-8080 region: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1 selfLink: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/advanced-configuration-frontend-lb target: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/advanced-configuration-frontend-tp
Dans ce cas, l'adresse IP externe est 104.154.81.44
.
Ensuite, dans un navigateur, accédez à l'adresse IP externe avec le port 8080. Par exemple, si votre adresse IP externe est 104.154.81.44
, l'URL sera la suivante :
http://104.154.81.44:8080
Vous devriez voir une page blanche s'afficher. Publiez ensuite un message sur la page. Accédez à l'URL suivante :
http://104.154.81.44:8080?msg=hellothere!
Une confirmation indiquant que votre message a été ajouté s'affiche. Revenez à l'URL principale. La page devrait afficher le message suivant :
hellothere!
Vous disposez désormais d'une application déployée capable de consigner les messages qui lui sont envoyés.
Étapes suivantes
Une fois cet exemple terminé, vous pouvez effectuer les étapes suivantes :
- Reprenez cet exemple et déployez des instances avec vos propres conteneurs Docker. Si vous souhaitez changer les conteneurs Docker utilisés dans ce didacticiel, modifiez les fichiers Docker dans le dépôt GitHub.
- Consultez d'autres exemples de déploiements dans le dépôt GitHub de Deployment Manager.
- Apprenez-en plus sur les modèles et les déploiements.