Ce tutoriel explique comment gérer Dataplex règles de qualité des données sous forme de code Terraform, Cloud Build et GitHub.
De nombreuses options de règles de qualité des données sont disponibles pour définir et mesurer la qualité de vos données. Lorsque vous automatisez le processus de déploiement de règles de qualité des données dans le cadre de votre stratégie de gestion d'infrastructure plus large, 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, tels que les environnements dev
et prod
, Terraform fournit un moyen fiable d'attribuer des règles de qualité des données aux versions d'ensembles de données spécifiques à l'environnement.
Le contrôle des versions est également une bonne pratique DevOps importante. Gestion vos règles de qualité des données, car le code vous fournit différentes versions 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
Pour les exécutions Terraform, consultez 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.
- Définissez des règles de qualité des données Dataplex.
- Modifiez la configuration de votre environnement dans une branche de fonctionnalité et effectuez des tests.
- 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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Dans Cloud Shell, récupérez l'ID du projet que vous venez de sélectionner :
Si cette commande ne renvoie pas l'ID du projet, configurez Cloud Shell pour utiliser votre projet. Remplacezgcloud config get-value project
PROJECT_ID
par l'ID du projet.gcloud config set project PROJECT_ID
- Activez les API requises :
Cette étape peut prendre quelques minutes.gcloud services enable bigquery.googleapis.com cloudbuild.googleapis.com compute.googleapis.com dataplex.googleapis.com
- Si vous n'avez jamais utilisé Git dans Cloud Shell, configurez-le avec votre nom et votre adresse e-mail :
Git utilise ces informations pour vous identifier en tant qu'auteur des commits que vous créez dans Cloud Shell.git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_NAME"
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. Ici, le modulemodules/deploy/
représente un modèle de déploiement qui est réutilisé pour différents de l'infrastructure.Dans
modules/deploy/
:Le dossier
rule/
contientyaml
fichiers 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 table de la table BigQuery déployée dans cette infrastructure.Le fichier
bigquery.tf
contient la configuration des tables BigQuery créées lors de ce déploiement.Le fichier
dataplex.tf
contient une analyse de données Dataplex pour la qualité des données. Ce fichier est utilisé avecrules_file_parsing.tf
pour lire les règles de qualité des données à partir 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 s'assurer que les modifications proposées
sont adaptées à tous les environnements,
terraform init
et terraform plan
sont exécutés pour tous les environnements. Avant
fusionnez la demande d'extraction, vous pouvez examiner les plans 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'état localement dans un fichier nommé terraform.tfstate
. Cette configuration par défaut peut rendre l'utilisation de Terraform difficile pour les équipes, en particulier lorsque de nombreux utilisateurs exécutent Terraform en même temps et que chaque ordinateur possède 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é de
backends
qui, dans ce tutoriel, 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 autre
un bucket Cloud Storage pour chaque environnement.
Dans les étapes suivantes, vous allez créer deux buckets Cloud Storage pour dev
.
et prod
, puis modifiez 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 de 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 Application GitHub Cloud Build : Cette installation vous permet de connecter votre dépôt GitHub Google Cloud pour que Cloud Build puisse appliquer automatiquement vos fichiers manifestes Terraform chaque fois que vous créez une branche ou que vous 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 à 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 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 de faire 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 d'être dans la branche
dev
.Pour ouvrir le fichier pour le modifier, accédez au fichier
modules/deploy/dataplex.tf
.Sur la ligne 19, remplacez le libellé
the_environment
parenvironment
.Ajoutez un message de commit en bas de la page, tel que "modification du 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 de fusion).
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. en modifiant 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. La fusion sera effectuée à une étape ultérieure 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. Il vous montrera 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 promouvoir votre code pour les règles de qualité des données en production.
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 avez configuré avec succès des règles de qualité des données 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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
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 des 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 dans la ligne Google Cloud Build, puis sur Je comprends, révoquer 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.
Étape suivante
- En savoir plus sur la qualité des données automatiques
- En savoir plus sur DevOps et les bonnes pratiques DevOps
- Pour obtenir d'autres modèles Terraform, consultez le kit Cloud Foundation.