Faire ses premiers pas avec Google Cloud Deployment Manager
Deployment Manager s’apparente à l’outil phare de Google Cloud en matière d’Infrastructure-as-Code. Il permet d’automatiser l’allocation et l’usage des ressources de la GCP et de ses services comme Compute Engine, GKE ou BigQuery.
Depuis que l’informatique existe, les responsables IT utilisent des scripts pour automatiser les opérations courantes - une technique éprouvée qui permet certes d’améliorer l'efficacité mais aussi de réduire les frais administratifs. Les utilisateurs du cloud disposent désormais d'options, plus natives et indépendantes en matière de fournisseur, pour adapter cette technique.
La représentation la plus stricte de ce scripting pourrait bien s’appeler l’infrastructure programmable, ou IaC (pour Infrastructure As Code). Ce principe exploite la couche d'abstraction logicielle entre les applications et l'infrastructure physique sous-jacente. Des outils comme Ansible et Terraform de HashiCorp s’adaptent à tout type de déploiement d'infrastructure, mais ils peuvent aussi être modifiés pour répondre aux caractéristiques d’une plateforme cloud donnée. Ces outils nécessitent évidemment des travaux de personnalisation et d’intégration. Ils peuvent également ne pas utiliser toutes les fonctionnalités disponibles d'un environnement, comme Google Cloud Platform (GCP).
Justement : les utilisateurs GCP disposent d’un outil intégré à leur plateforme pour répondre à ces besoins et gérer des modèles d'automatisation spécifiques : Google Cloud Deployment Manager. Celui-ci permet d’exposer l'infrastructure et les configurations sous la forme d’un code lisible.
Cet article passe en revue les fonctionnalités du gestionnaire de déploiement (Deployment Manager) et donne des conseils pour bien prendre en main le service.
Concepts et fonctionnalités clés
Comme d'autres outils IaC, Google Cloud Deployment Manager s’appuie sur un langage déclaratif. Celui-ci supporte un système de templates, des références externes, des métadonnées et des variables d'environnement. Il utilise jusqu'à trois types de fichiers pour décrire un déploiement GCP :
- Un fichier de configuration (obligatoire) qui utilise une syntaxe YAML conviviale pour décrire les ressources nécessaires au déploiement.
- Un fichier template (facultatif) écrit en Python ou en Jinja. Ce fichier décrit un ensemble de ressources. Il peut être importé dans un fichier de configuration et augmenté en liant les noms de ressources aux étiquettes génériques définies dans le modèle.
- Un fichier de schéma (facultatif) qui décrit les spécifications et les règles d'un template et impose des limites à l'utilisation et aux propriétés du modèle.
Les tâches les plus simples du gestionnaire de déploiement tiennent dans un seul fichier de configuration, mais les autres types de fichiers permettent l'automatisation de configurations plus complexes ou de situations dans lesquelles, par exemple, l'utilisateur peut appliquer une configuration similaire à plusieurs configurations.
Le fichier de configuration est le code source d'un compilateur d'infrastructure - dans notre cas, Deployment Manager - qui analyse le contenu et développe les configurations contenant des templates et des variables d'environnement. Ce gestionnaire de déploiement fonctionne dans un environnement contrôlé qui inclut, par exemple, des mesures de sécurité.
Les fichiers de configuration pour l'infrastructure as code de Google Cloud comportent deux sections:
- Imports est une liste de fichiers utilisés le cas échéant par la configuration. Le service développe récursivement ces fichiers de modèle dans le cadre de la configuration finale.
- Resources est au cœur d'une configuration. Il répertorie les services GCP à déployer, comme les VM de Compute Engine, une base de données Cloud SQL ou un cluster de containers Google Kubernetes Engine. La définition des ressources peut également appeler un type de service composite qui fédère plusieurs composants définis par un modèle. Par exemple, vous pouvez créer un type qui déploie un load balancer Google Cloud et un groupe d'instances managées de VM sur Compute Engine.
Les fichiers de configuration peuvent également inclure une section outputs qui définit la manière dont les données de la configuration sont exposées à d'autres modèles, ainsi qu'une section metadata qui définit les dépendances des ressources dans la configuration. Par exemple, une instance Compute Engine peut nécessiter l'utilisation d'un volume persistant pour le déploiement.
Dans leur forme la plus simple, les templates IaC sont des fichiers de configuration divisés en parties réutilisables. Ils nécessitent souvent peu de modifications. Des modèles plus sophistiqués peuvent utiliser Python pour générer des composants. Ces modèles peuvent inclure des fonctionnalités avancées, comme des bibliothèques Python pour la génération de configuration programmable, des types de ressources composites et des modules, qui sont des fichiers d'assistance identiques aux macros.
Les fichiers de schéma définissent les limites d'utilisation et décrivent l'interface utilisateur (similaire à une API). Comme les fichiers de configuration, les schémas sont écrits en YAML, bien que Deployment Manager accepte la syntaxe JSON (Javascript Object Notation).
Actuellement, Google Cloud Deployment Manager ne prend pas en charge tous les services GCP, mais les principaux, notamment Compute Engine, Cloud Storage et BigQuery. Bien que l'outil IaC soit gratuit, les coûts standard sont pratiqués pour chaque service déployés. Google pose également certaines limites. Il existe par exemple des restrictions sur les tailles de configuration et sur le nombre de requêtes aux API par jour et par seconde.
Comment déployer l'infrastructure Google Cloud de façon programmatique
Deployment Manager est accessible via la console Google Cloud. L'interface utilisateur affiche la vue hiérarchique d'un déploiement complet, mais les configurations sont généralement déclenchées via l'outil de ligne de commande gcloud. Les fichiers de configuration, modèles et schémas étant textuels, les utilisateurs peuvent les créer avec n’importe quel éditeur de texte.
Pour apprendre à utiliser Deployment Manager, on peut s’appuyer sur les quelques exemples tirés de la documentation de Google. Google Developers Codelabs, une bibliothèque de didacticiels, propose également un cours en ligne qui présente aux utilisateurs un exemple un peu plus compliqué.
Ce gestionnaire de déploiement dispose d'un mode de prévisualisation qui indique les modifications éventuelles sans déployer ni même mettre à jour aucun service. Google propose également une liste des meilleures pratiques.
Deployment Manager vs CloudFormation et ARM
Pour ceux qui ont déjà utilisé AWS CloudFormation ou Ansible, Google Cloud Deployment Manager aura un air de déjà-vu. Les templates y sont également écrits au format YAML. Terraform utilise quant à lui un langage et une syntaxe de configuration propriétaires.
Les templates d’AWS CloudFormation peuvent inclure des métadonnées, des outputs et des conditions, similaires aux schémas de Deployment Manager.
Ceux habitués à Microsoft Azure Resource Manager (ARM) verront également certaines similitudes avec l’offre Google. ARM utilise JSON comme syntaxe, mais comme YAML est essentiellement un sous-ensemble JSON, la syntaxe et la structure du fichier sont similaires. Les trois outils IaC proposent des fonctionnalités similaires, mais CloudFormation supporte davantage de services natifs.