Ce tutoriel explique comment gérer les règles de qualité des données Dataplex sous forme de code avec Terraform, Cloud Build et GitHub.
De nombreuses options sont disponibles pour les règles de qualité des données afin de définir et de mesurer la qualité de vos données. Lorsque vous automatisez le processus de déploiement des règles de qualité des données dans le cadre de votre stratégie globale de gestion de l'infrastructure, vous vous assurez que vos données sont soumises de manière cohérente et prévisible aux règles que vous leur attribuez.
Si vous disposez de différentes versions d'un ensemble de données pour plusieurs environnements, telles que les environnements dev
et prod
, Terraform offre un moyen fiable d'attribuer des règles de qualité des données aux versions spécifiques aux environnements des ensembles de données.
Le contrôle des versions constitue également une bonne pratique DevOps importante. La gestion de vos règles de qualité des données sous forme de code vous fournit des versions de ces règles disponibles dans votre historique GitHub. Terraform peut également enregistrer son état dans Cloud Storage, qui peut stocker des versions antérieures du fichier d'état.
Pour en savoir plus sur Terraform et Cloud Build, consultez les pages Présentation de Terraform sur Google Cloud et Cloud Build.
Architecture
Pour comprendre comment ce tutoriel utilise Cloud Build pour gérer les exécutions Terraform, prenez en compte le schéma d'architecture suivant. Notez que les branches GitHub dev
et prod
sont utilisées pour représenter des environnements réels.
Le processus commence lorsque vous envoyez le code Terraform à la branche dev
ou prod
. Dans ce scénario, Cloud Build se déclenche, puis applique les fichiers manifestes Terraform pour obtenir l'état souhaité dans l'environnement concerné.
D'autre part, lorsque vous transférez du code Terraform vers une autre branche, par exemple une branche de fonctionnalité, Cloud Build s'exécute pour exécuter terraform plan
mais rien n'est appliqué aux environnements.
Idéalement, les développeurs ou les opérateurs doivent faire des propositions d'infrastructure à des branches non protégées, puis les soumettre par le biais de demandes d'extraction.
L'application GitHub Cloud Build, décrite plus loin dans ce tutoriel, déclenche automatiquement les tâches de compilation et associe les rapports terraform plan
à ces demandes d'extraction. Ainsi, vous pouvez discuter des modifications potentielles et les examiner avec les collaborateurs, et ajouter des commits de suivi avant que les modifications ne soient fusionnées dans la branche de base.
Si aucun problème n'est soulevé, vous devez d'abord fusionner les modifications dans la branche dev
. Cette fusion déclenche un déploiement d'infrastructure dans l'environnement dev
, ce qui vous permet de tester cet environnement. Une fois que vous avez testé votre infrastructure et que vous êtes sûr de la fiabilité de votre déploiement, vous devez fusionner la branche dev
dans la branche prod
pour déclencher l'installation de l'infrastructure dans l'environnement de production.
Objectifs
- Configurez votre dépôt GitHub.
- Configurez Terraform pour stocker l'état dans un bucket Cloud Storage.
- Accordez des autorisations à votre compte de service Cloud Build.
- Connectez Cloud Build à votre dépôt GitHub.
- Établissez des règles de qualité des données Dataplex.
- Modifiez la configuration de votre environnement dans une branche de fonctionnalité et effectuez un test.
- Faites la promotion des modifications dans l'environnement de développement.
- Faites la promotion des modifications dans l'environnement de production.
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.
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.
Prérequis
- 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.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Dans la console Google Cloud, activez Cloud Shell.
En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
- Dans Cloud Shell, récupérez l'ID du projet que vous venez de sélectionner :
gcloud config get-value project
Si cette commande ne renvoie pas l'ID du projet, configurez Cloud Shell pour utiliser votre projet, en remplaçantPROJECT_ID
par l'ID de votre projet.gcloud config set project PROJECT_ID
- Activez les API requises :
gcloud services enable bigquery.googleapis.com cloudbuild.googleapis.com compute.googleapis.com dataplex.googleapis.com
Cette étape peut prendre quelques minutes. - Si vous n'avez jamais utilisé Git dans Cloud Shell, configurez-le avec votre nom et votre adresse e-mail :
git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_NAME"
Git utilise ces informations pour vous identifier en tant qu'auteur des commits que vous créez dans Cloud Shell.
Configurer votre dépôt GitHub
Dans ce tutoriel, vous utilisez un seul dépôt Git pour définir votre infrastructure cloud. Vous orchestrez cette infrastructure grâce à différentes branches correspondant à différents environnements :
- La branche
dev
contient les dernières modifications appliquées à l'environnement de développement. - La branche
prod
contient les dernières modifications appliquées à l'environnement de production.
Grâce à cette infrastructure, vous pouvez toujours faire référence au dépôt pour savoir quelle configuration est attendue dans chaque environnement et pour proposer de nouvelles modifications en les fusionnant d'abord dans l'environnement dev
. Vous faites ensuite la promotion des modifications en fusionnant la branche dev
dans la branche prod
suivante.
Pour commencer, vous allez dupliquer le dépôt terraform-google-dataplex-auto-data-quality.
Sur GitHub, accédez à https://github.com/GoogleCloudPlatform/terraform-google-dataplex-auto-data-quality.git.
Cliquez sur Fork (Dupliquer).
Vous disposez maintenant d'une copie du dépôt
terraform-google-dataplex-auto-data-quality
avec les fichiers sources.Dans Cloud Shell, clonez ce dépôt dupliqué en remplaçant
YOUR_GITHUB_USERNAME
par votre nom d'utilisateur GitHub :cd ~ git clone https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality.git cd ~/terraform-google-dataplex-auto-data-quality
Créez des branches
dev
etprod
:git checkout -b prod git checkout -b dev
Le code dans ce dépôt est structuré comme suit :
Le dossier
environments/
contient des sous-dossiers représentant des environnements, tels quedev
etprod
, qui offrent une séparation logique entre les charges de travail à différents stades de maturité (développement et production, respectivement).Le dossier
modules/
contient des modules Terraform intégrés. Ces modules représentent des regroupements logiques de ressources connexes et sont utilisés pour partager du code dans différents environnements. Le modulemodules/deploy/
représente ici un modèle de déploiement. Il est réutilisé pour différents environnements de déploiement.Dans un délai de
modules/deploy/
:Le dossier
rule/
contient des fichiersyaml
contenant des règles de qualité des données. Un fichier représente un ensemble de règles de qualité des données pour une table. Ce fichier est utilisé dans les environnementsdev
etprod
.Le dossier
schemas/
contient le schéma de la table BigQuery déployée dans cette infrastructure.Le fichier
bigquery.tf
contient la configuration des tables BigQuery créées dans ce déploiement.Le fichier
dataplex.tf
contient une analyse de données Dataplex pour en vérifier la qualité. Ce fichier est utilisé avecrules_file_parsing.tf
pour lire les règles de qualité des données d'un fichieryaml
dans l'environnement.
Le fichier
cloudbuild.yaml
est un fichier de configuration de compilation qui contient des instructions pour Cloud Build, par exemple pour indiquer comment effectuer des tâches correspondant à un ensemble d'étapes. Ce fichier spécifie une exécution conditionnelle selon la branche à partir de laquelle Cloud Build récupère le code, par exemple :Pour les branches
dev
etprod
, les étapes suivantes sont exécutées :terraform init
terraform plan
terraform apply
Pour toute autre branche, les étapes suivantes sont exécutées :
terraform init
pour tous les sous-dossiersenvironments
terraform plan
pour tous les sous-dossiersenvironments
Pour garantir que les modifications proposées sont adaptées à tous les environnements, terraform init
et terraform plan
sont exécutés pour chacun d'entre eux. Avant de fusionner la demande d'extraction, vous pouvez examiner les forfaits pour vous assurer que l'accès n'est pas accordé à une entité non autorisée, par exemple.
Configurer Terraform pour stocker l'état dans des buckets Cloud Storage
Par défaut, Terraform stocke l'state localement dans un fichier nommé terraform.tfstate
. Cette configuration par défaut peut compliquer l'utilisation de Terraform pour les équipes, en particulier lorsque de nombreux utilisateurs exécutent Terraform en même temps et que chaque machine a sa propre compréhension de l'infrastructure actuelle.
Pour vous aider à éviter de tels problèmes, cette section permet de configurer un état distant qui pointe vers un bucket Cloud Storage. L'état distant est une fonctionnalité des backends. Dans ce tutoriel, il est configuré dans le fichier backend.tf
.
Un fichier backend.tf
distinct existe dans chacun des environnements dev
et prod
. Il est recommandé d'utiliser un bucket Cloud Storage différent pour chaque environnement.
Dans les étapes suivantes, vous allez créer deux buckets Cloud Storage pour dev
et prod
, puis modifier quelques fichiers pour qu'ils pointent vers vos nouveaux buckets et votre projet Google Cloud.
Dans Cloud Shell, créez les deux buckets Cloud Storage:
DEV_BUCKET=gs://PROJECT_ID-tfstate-dev gcloud storage buckets create ${DEV_BUCKET} PROD_BUCKET=gs://PROJECT_ID-tfstate-prod gcloud storage buckets create ${PROD_BUCKET}
Activez la gestion des versions des objets pour conserver l'historique de vos déploiements :
gcloud storage buckets update ${DEV_BUCKET} --versioning gcloud storage buckets update ${PROD_BUCKET} --versioning
L'activation de la gestion des versions des objets augmente les coûts de stockage. Vous pouvez limiter cette augmentation des coûts en configurant la gestion du cycle de vie des objets afin de supprimer les anciennes versions d'état.
Remplacez l'espace réservé
PROJECT_ID
par l'ID du projet dans les fichiersmain.tf
etbackend.tf
de chaque environnement:cd ~/terraform-google-dataplex-auto-data-quality sed -i s/PROJECT_ID/PROJECT_ID/g environments/*/main.tf sed -i s/PROJECT_ID/PROJECT_ID/g environments/*/backend.tf
Sous OS X ou macOS, vous devrez peut-être ajouter deux guillemets (
""
) aprèssed -i
, comme suit:cd ~/solutions-terraform-cloudbuild-gitops sed -i "" s/PROJECT_ID/PROJECT_ID/g environments/*/main.tf sed -i "" s/PROJECT_ID/PROJECT_ID/g environments/*/backend.tf
Vérifiez que tous les fichiers ont bien été mis à jour :
git status
Le résultat ressemble à ceci :
On branch dev Your branch is up-to-date with 'origin/dev'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: environments/dev/backend.tf modified: environments/dev/main.tf modified: environments/prod/backend.tf modified: environments/prod/main.tf no changes added to commit (use "git add" and/or "git commit -a")
Procédez au commit et au transfert de vos modifications :
git add --all git commit -m "Update project IDs and buckets" git push origin dev
Selon votre configuration GitHub, vous devrez peut-être vous authentifier pour appliquer les modifications précédentes.
Accorder des autorisations à votre compte de service Cloud Build
Pour permettre au compte de service Cloud Build d'exécuter des scripts Terraform dans le but de gérer des ressources Google Cloud, vous devez lui accorder l'accès approprié à votre projet. Pour plus de simplicité, l'accès à l'éditeur de projet est accordé dans ce tutoriel. Toutefois, lorsque le rôle d'éditeur de projet dispose d'une autorisation étendue, vous devez suivre les bonnes pratiques de votre entreprise en matière de sécurité informatique dans les environnements de production, en fournissant généralement un accès selon la stratégie du moindre privilège.
Dans Cloud Shell, récupérez l'adresse e-mail du compte de service Cloud Build de votre projet :
CLOUDBUILD_SA="$(gcloud projects describe $PROJECT_ID \ --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com"
Accordez l'accès requis à votre compte de service Cloud Build :
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$CLOUDBUILD_SA --role roles/editor
Connecter directement Cloud Build à votre dépôt GitHub
Cette section vous explique comment installer l'application GitHub Cloud Build. Cette installation vous permet de connecter votre dépôt GitHub à votre projet Google Cloud afin que Cloud Build puisse appliquer automatiquement vos fichiers manifestes Terraform chaque fois que vous créez une branche ou transférez du code vers GitHub.
Procédez comme suit pour installer l'application uniquement pour le dépôt terraform-google-dataplex-auto-data-quality
. Vous pouvez également choisir de l'installer pour plusieurs dépôts ou l'ensemble de ceux-ci.
Dans GitHub Marketplace, accédez à la page de l'application Cloud Build.
- Si c'est la première fois que vous configurez une application dans GitHub : cliquez sur Configurer avec Google Cloud Build en bas de la page. Cliquez ensuite sur Autoriser cette application à accéder à votre compte GitHub.
- Si ce n'est pas la première fois que vous configurez une application dans GitHub : cliquez sur Configurer l'accès. La page Applications de votre compte personnel s'affiche.
Cliquez sur Configurer dans la ligne Cloud Build.
Sélectionnez Sélectionner uniquement les dépôts, puis sélectionnez
terraform-google-dataplex-auto-data-quality
pour vous connecter au dépôt.Cliquez sur Enregistrer ou Installer ; Le libellé du bouton change en fonction de votre workflow. Vous êtes redirigé vers Google Cloud pour poursuivre l'installation.
Connectez-vous avec votre compte Google Cloud. Si vous y êtes invité, autorisez l'intégration de Cloud Build à GitHub.
Sur la page Cloud Build, sélectionnez votre projet. Un assistant s'affiche.
Dans la section Sélectionner un dépôt, sélectionnez votre compte GitHub et le dépôt
terraform-google-dataplex-auto-data-quality
.Si vous acceptez les conditions d'utilisation, cochez la case puis cliquez sur Se connecter.
Dans la section Créer un déclencheur, cliquez sur Créer un déclencheur :
- Ajoutez un nom de déclencheur, tel que
push-to-branch
. Notez ce nom de déclencheur, car vous en aurez besoin plus tard. - Dans la section Événement, sélectionnez Déployer sur une branche.
- Dans la section Source, sélectionnez
.*
dans le champ Branche. - Cliquez sur Create (Créer).
- Ajoutez un nom de déclencheur, tel que
L'application GitHub Cloud Build est maintenant configurée et votre dépôt GitHub est lié à votre projet Google Cloud. À partir de maintenant, les modifications apportées au dépôt GitHub déclenchent des exécutions de Cloud Build, qui renvoient les résultats à GitHub à l'aide des vérifications GitHub.
Modifier la configuration de votre environnement dans une nouvelle branche de fonctionnalité
Votre environnement est désormais presque entièrement configuré. Il est donc temps d'apporter quelques modifications au code dans votre environnement local.
Sur GitHub, accédez à la page principale de votre dépôt dupliqué.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
Assurez-vous que vous vous trouvez sur la branche
dev
.Pour ouvrir le fichier pour le modifier, accédez au fichier
modules/deploy/dataplex.tf
.À la ligne 19, remplacez le libellé
the_environment
parenvironment
.Ajoutez un message de commit en bas de la page, par exemple "modifier le libellé", puis sélectionnez Create a new branch for this commit and start a pull request (Créer une branche pour ce commit et démarrer une demande d'extraction).
Cliquez sur Proposer des modifications.
Sur la page suivante, cliquez sur Create pull request (Créer une demande d'extraction) pour ouvrir une nouvelle demande d'extraction avec votre modification de la branche
dev
.Une fois votre demande d'extraction ouverte, une tâche Cloud Build est automatiquement lancée.
Cliquez sur Show all checks (Afficher toutes les vérifications) et attendez que la vérification devienne verte. Ne fusionnez pas encore votre demande d'extraction d'extraction. La fusion s'effectuera lors d'une prochaine étape du tutoriel.
Cliquez sur Details (Détails) pour afficher plus d'informations, y compris la sortie de
terraform plan
sur le lien Afficher plus d'informations sur Google Cloud Build.
Notez que la tâche Cloud Build a exécuté le pipeline défini dans le fichier cloudbuild.yaml
. Comme indiqué précédemment, ce pipeline présente différents comportements en fonction de la branche à récupérer. La compilation vérifie si la variable $BRANCH_NAME
correspond à un dossier d'environnement. Si oui, Cloud Build exécute terraform plan
pour cet environnement.
Sinon, Cloud Build exécute terraform plan
pour tous les environnements afin de s'assurer que la modification proposée est valable pour tous. Si l'exécution de l'un de ces plans échoue, la compilation échoue.
De même, la commande terraform apply
s'exécute pour les branches de l'environnement, mais elle est complètement ignorée dans les autres cas. Dans cette section, vous avez soumis une modification de code à une nouvelle branche, et aucun déploiement d'infrastructure n'a été appliqué à votre projet Google Cloud.
Forcer l'exécution Cloud Build avant la fusion des branches
Pour vous assurer que les fusions ne peuvent être appliquées que lorsque les exécutions Cloud Build respectives ont abouti, procédez comme suit :
Sur GitHub, accédez à la page principale de votre dépôt dupliqué.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
Sous le nom de votre dépôt, cliquez sur Settings (Paramètres).
Dans le menu de gauche, cliquez sur Branches.
Sous Branch protection rules (Règles de protection des branches), cliquez sur Add rule (Ajouter une règle).
Dans le champ Modèle de nom de branche, saisissez
dev
.Dans la section Protéger les branches correspondantes, sélectionnez Exiger la validation des vérifications d'état avant la fusion.
Recherchez le nom du déclencheur Cloud Build créé précédemment.
Cliquez sur Créer.
Répétez les étapes 3 à 7 en définissant le Modèle de nom de branche sur
prod
.
Cette configuration est importante pour protéger les branches dev
et prod
. En effet, les commits doivent d'abord être transférés vers une autre branche avant de pouvoir être fusionnés dans la branche protégée. Dans ce tutoriel, la protection nécessite que l'exécution de Cloud Build réussisse pour que la fusion soit autorisée.
Promouvoir des modifications dans l'environnement de développement
Vous disposez d'une demande d'extraction en attente de fusion. Il est temps d'appliquer l'état de votre choix à votre environnement dev
.
Sur GitHub, accédez à la page principale de votre dépôt dupliqué.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
Sous le nom de votre dépôt, cliquez sur Pull requests (Demandes d'extraction).
Cliquez sur la demande d'extraction que vous venez de créer.
Cliquez sur Merge pull request (Fusionner la demande d'extraction), puis sur Confirm merge (Confirmer la fusion).
Vérifiez qu'une nouvelle compilation Cloud Build a été déclenchée :
Ouvrez la compilation et vérifiez les journaux. Vous y verrez toutes les ressources que Terraform crée et gère.
Promouvoir des modifications dans l'environnement de production
Maintenant que votre environnement de développement est entièrement testé, vous pouvez passer en production votre code pour les règles de qualité des données.
Sur GitHub, accédez à la page principale de votre dépôt dupliqué.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
Sous le nom de votre dépôt, cliquez sur Pull requests (Demandes d'extraction).
Cliquez sur New pull request (Nouvelle demande d'extraction).
Sélectionnez le dépôt que vous venez de dupliquer sous base repository (dépôt de base).
Pour base, sélectionnez
prod
dans votre propre dépôt de base. Pour compare (comparer), sélectionnezdev
.Cliquez sur Create pull request (Créer une demande de fusion).
Sous title (titre), saisissez un titre tel que
Changing label name
, puis cliquez sur Create pull request (Créer une demande d'extraction).Examinez les modifications proposées, y compris les détails de
terraform plan
de Cloud Build, puis cliquez sur Merge pull request (Fusionner la demande d'extraction).Cliquez sur Confirm merge (Confirmer la fusion).
Dans la console Google Cloud, ouvrez la page Historique de compilation pour voir vos modifications appliquées à l'environnement de production :
Vous venez de configurer des règles de qualité des données qui sont gérées à l'aide de Terraform et de Cloud Build.
Effectuer un nettoyage
Une fois que vous avez terminé le tutoriel, nettoyez les ressources que vous avez créées sur Google Cloud pour qu'elles ne vous soient plus facturées à l'avenir.
Supprimer le projet
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer le dépôt GitHub
Pour éviter de bloquer de nouvelles demandes d'extraction sur votre dépôt GitHub, vous pouvez supprimer vos règles de protection des branches :
- Sur GitHub, accédez à la page principale de votre dépôt dupliqué.
- Sous le nom de votre dépôt, cliquez sur Paramètres.
- Dans le menu de gauche, cliquez sur Branches.
- Dans la section Règles de protection des branches, cliquez sur le bouton Supprimer pour les lignes
dev
etprod
.
Vous pouvez éventuellement désinstaller complètement l'application Cloud Build à partir de GitHub :
Dans GitHub, accédez à la page Applications GitHub.
Dans l'onglet Applications GitHub installées, cliquez sur Configurer sur la ligne Cloud Build. Ensuite, dans la section Zone de danger, cliquez sur le bouton Désinstaller de la ligne Désinstaller Google Cloud Builder.
En haut de la page, le message suivant s'affiche : "Vous avez terminé. Une tâche a été mise en file d'attente pour désinstaller Google Cloud Build."
Dans l'onglet Applications GitHub autorisées, cliquez sur le bouton Révoquer sur la ligne Google Cloud Build, puis sur Je comprends, révoquez l'accès.
Si vous ne souhaitez pas conserver votre dépôt GitHub :
- Dans GitHub, accédez à la page principale de votre dépôt dupliqué.
- Sous le nom de votre dépôt, cliquez sur Paramètres.
- Accédez à Zone de danger.
- Cliquez sur Supprimer ce dépôt et suivez les étapes de confirmation.
Étapes suivantes
- En savoir plus sur la qualité des données automobiles
- Découvrez les bonnes pratiques DevOps et DevOps.
- Explorez le kit Cloud Foundation pour découvrir d'autres modèles Terraform.