Neste tutorial, explicamos como gerenciar as regras de qualidade de dados do Dataplex como código com o Terraform, o Cloud Build e o GitHub.
Muitas opções diferentes de regras de qualidade de dados estão disponíveis para definir e medir a qualidade dos seus dados. Ao automatizar o processo de implantação regras de qualidade de dados como parte da sua estratégia maior de gerenciamento de infraestrutura, garante que seus dados estejam sujeitos às regras de maneira consistente e previsível. que você atribui a ele.
Se você tem versões diferentes de um conjunto de dados para diversos ambientes, como
dev
e prod
, o Terraform oferece uma maneira confiável de atribuir dados
regras de qualidade a versões específicas
do ambiente dos conjuntos de dados.
O controle de versões também é uma prática recomendada importante do DevOps. O gerenciamento de regras de qualidade de dados como código fornece versões delas que estão disponíveis no seu histórico do GitHub. O Terraform também pode salvar o estado no Cloud Storage, que pode armazenar versões anteriores do de estado do arquivo.
Para mais informações sobre o Terraform e o Cloud Build, consulte Visão geral do Terraform no Google Cloud e Cloud Build.
Arquitetura
Para entender como este tutorial usa o Cloud Build para gerenciar
as execuções do Terraform, considere o diagrama de arquitetura a seguir. Ele usa ramificações GitHub (dev
e prod
) para representar ambientes reais.
O processo começa quando você envia o código do Terraform para a ramificação dev
ou prod
. Nesse cenário, o Cloud Build aciona e aplica manifestos do Terraform para atingir o estado desejado no respectivo ambiente.
Por outro lado, quando você aplica o código do Terraform a qualquer outra ramificação, por exemplo, a uma ramificação de recurso, o Cloud Build é executado para terraform plan
, mas nada é aplicado a ambiente algum.
O ideal é que desenvolvedores ou operadores façam propostas de infraestrutura para ramificações não protegidas e envia-as por solicitações de envio.
O app GitHub do Cloud Build, discutido posteriormente neste tutorial, aciona automaticamente os jobs de criação e vincula os relatórios terraform plan
a essas solicitações de envio. Dessa forma, é possível discutir e analisar as possíveis alterações com os colaboradores e adicionar confirmações de acompanhamento antes que as alterações sejam mescladas no branch básico.
Se não houver preocupações, mescle as alterações no branch dev
. Essa mescla aciona uma implantação de infraestrutura para o ambiente dev
, o que permite testá-lo. Depois de testar e ter certeza do que foi implantado, mescle o branch dev
no branch prod
para acionar a instalação da infraestrutura no ambiente de produção.
Objetivos
- Configurar seu repositório GitHub.
- Configurar o Terraform para armazenar o estado em um bucket do Cloud Storage.
- Conceder permissões à conta de serviço do Cloud Build.
- Conectar o Cloud Build ao seu repositório GitHub.
- Estabelecer regras de qualidade de dados do Dataplex.
- Altere a configuração do ambiente em uma ramificação de recurso e teste.
- Promover mudanças no ambiente de desenvolvimento.
- Promover mudanças no ambiente de produção.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Pré-requisitos
- 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.
- No Cloud Shell, consiga o código do projeto que você acabou de selecionar:
Se esse comando não retornar o ID do projeto, configure o Cloud Shell para usar seu projeto. Substituagcloud config get-value project
PROJECT_ID
pelo seu projeto. ID.gcloud config set project PROJECT_ID
- Ative as APIs necessárias:
Esta etapa pode levar alguns minutos.gcloud services enable bigquery.googleapis.com cloudbuild.googleapis.com compute.googleapis.com dataplex.googleapis.com
- Se você nunca usou o Git no Cloud Shell, configure-o com seu nome e endereço de e-mail:
O Git usa essas informações para identificar você como o autor das confirmações que você cria no Cloud Shell.git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_NAME"
Como configurar seu repositório GitHub
Neste tutorial, você usa um único repositório Git para definir a infraestrutura em nuvem. Você orquestra essa infraestrutura ao ter branches diferentes correspondentes a ambientes diferentes:
- A ramificação
dev
contém as alterações mais recentes aplicadas ao ambiente de desenvolvimento. - A ramificação
prod
contém as últimas alterações que são aplicadas ao ambiente de produção.
Com essa infraestrutura, sempre é possível fazer referência ao repositório para saber qual configuração é esperada em cada ambiente e propor novas alterações, primeiro fundindo-as ao ambiente dev
. Em seguida, você promove as alterações mesclando a ramificação dev
na ramificação prod
subsequente.
Para começar, bifurca o repositório terraform-google-dataplex-auto-data-quality.
No GitHub, acesse https://github.com/GoogleCloudPlatform/terraform-google-dataplex-auto-data-quality.git.
Clique em Bifurcar.
Agora você tem uma cópia do repositório
terraform-google-dataplex-auto-data-quality
com arquivos de origem.No Cloud Shell, clone este repositório bifurcado, substituindo
YOUR_GITHUB_USERNAME
pelo seu nome de usuário do GitHub:cd ~ git clone https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality.git cd ~/terraform-google-dataplex-auto-data-quality
Crie as ramificações
dev
eprod
:git checkout -b prod git checkout -b dev
O código nesse repositório está estruturado da seguinte maneira:
A pasta
environments/
contém subpastas que representam ambientes, comodev
eprod
, que fornecem separação lógica entre cargas de trabalho em diferentes estágios de maturidade, desenvolvimento e produção, respectivamente.A pasta
modules/
contém módulos in-line do Terraform. Esses módulos representam agrupamentos lógicos de recursos relacionados e são usados para compartilhar código em diferentes ambientes. O módulomodules/deploy/
representa uma para uma implantação e é reutilizado para diferentes implantações e ambientes de teste.Em
modules/deploy/
:A pasta
rule/
contémyaml
arquivos que contêm regras de qualidade de dados. Um arquivo representa um conjunto de qualidades de dados para uma tabela. Esse arquivo é usado em ambientesdev
eprod
.A pasta
schemas/
contém o esquema da tabela do Tabela do BigQuery implantada nessa infraestrutura.O arquivo
bigquery.tf
contém a configuração das tabelas do BigQuery criadas nessa implantação.O arquivo
dataplex.tf
contém uma verificação de dados do Dataplex para qualidade de dados. Esse arquivo é usado em conjunto comrules_file_parsing.tf
para ler regras de qualidade de dados de um arquivoyaml
no ambiente.
O
cloudbuild.yaml
é um arquivo de configuração de versão que contém instruções para o Cloud Build, como executar tarefas com base em um conjunto de etapas. Esse arquivo especifica uma execução condicional, dependendo do branch em que o Cloud Build está buscando o código. Por exemplo:Para ramificações
dev
eprod
, as seguintes etapas são executadas:terraform init
terraform plan
terraform apply
Para qualquer outra ramificação, as etapas a seguir são executadas:
terraform init
para todas as subpastasenvironments
terraform plan
para todas as subpastasenvironments
Para garantir que as alterações propostas sejam adequadas para todos os ambientes,
terraform init
e terraform plan
são executados em todos os ambientes. Antes
mesclando a solicitação de envio, você pode revisar os planos para ter certeza de que o acesso
é concedido a uma entidade não autorizada, por exemplo.
Como configurar o Terraform para armazenar o estado em buckets do Cloud Storage
Por padrão, o Terraform armazena o estado localmente em um arquivo chamado terraform.tfstate
. Essa configuração padrão pode
dificultam o uso do Terraform para as equipes, especialmente quando muitos usuários executam
ao mesmo tempo, e cada máquina tem o próprio entendimento
infraestruturas atuais.
Para ajudar a evitar esses problemas, esta seção configura um estado remoto que aponta para um bucket do Cloud Storage. O estado remoto é um recurso de
back-ends
e, neste tutorial, é configurado no arquivo backend.tf
.
Há um arquivo backend.tf
separado em cada um dos dev
e prod
e ambientes de teste. É uma prática recomendada usar um bucket do Cloud Storage diferente para cada ambiente.
Nas etapas a seguir, crie dois buckets do Cloud Storage para dev
e prod
e altere alguns arquivos para apontar para os novos buckets e para seus
projeto do Google Cloud.
No Cloud Shell, crie os dois buckets do 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}
Ative o Controle de versões do objeto para manter o histórico das implantações:
gcloud storage buckets update ${DEV_BUCKET} --versioning gcloud storage buckets update ${PROD_BUCKET} --versioning
Ativar o controle de versões de objetos aumenta os custos de armazenamento, que podem ser reduzidos com a configuração do Gerenciamento do ciclo de vida de objetos para excluir versões de estado mais antigas.
Substitua o marcador
PROJECT_ID
pelo projeto. ID nos arquivosmain.tf
ebackend.tf
de cada ambiente: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
No OS X ou no macOS, talvez seja necessário adicionar duas aspas (
""
) apóssed -i
, da seguinte forma: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
Verifique se todos os arquivos foram atualizados:
git status
O resultado será semelhante ao seguinte:
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")
Confirme e envie suas alterações por push:
git add --all git commit -m "Update project IDs and buckets" git push origin dev
Dependendo da sua configuração do GitHub, será preciso se autenticar para enviar as alterações anteriores.
Como conceder permissões à sua conta de serviço do Cloud Build
Para permitir que a conta de serviço do Cloud Build execute scripts do Terraform com o objetivo de gerenciar recursos do Google Cloud, você precisa conceder acesso adequado ao projeto. Para simplificar, o acesso ao editor do projeto é concedido neste tutorial. Porém, quando o papel de editor do projeto tem uma permissão ampla, em ambientes de produção, siga as práticas recomendadas de segurança de TI da sua empresa, geralmente fornecendo acesso com menos privilégios.
No Cloud Shell, recupere o e-mail da conta do serviço do Cloud Build do seu projeto:
CLOUDBUILD_SA="$(gcloud projects describe $PROJECT_ID \ --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com"
Conceda o acesso necessário à sua conta de serviço do Cloud Build:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$CLOUDBUILD_SA --role roles/editor
Como conectar diretamente o Cloud Build ao seu repositório GitHub
Esta seção mostra como instalar o app GitHub do Cloud Build. Essa instalação permite que você conecte seu repositório do GitHub ao projeto do Google Cloud para que o Cloud Build possa aplicar automaticamente seus manifestos do Terraform toda vez que você criar uma nova ramificação ou enviar código ao GitHub.
As etapas a seguir fornecem instruções para instalar o app apenas para o
repositório terraform-google-dataplex-auto-data-quality
, mas você pode optar por
instalar o app para mais ou todos os seus repositórios.
No Marketplace do GitHub, acesse Página do app Cloud Build.
- Se esta for a primeira vez que você configura um aplicativo no GitHub, clique em Configurar com o Google Cloud Build na parte inferior da página. Em seguida, clique em Conceder acesso a este aplicativo à sua conta do GitHub.
- Se esta não for a primeira vez que você configura um aplicativo no GitHub, clique em Configurar acesso. A página Aplicativos da sua conta pessoal é aberta.
Clique em Configurar na linha do Cloud Build.
Selecione Somente repositórios selecionados e, em seguida, selecione
terraform-google-dataplex-auto-data-quality
para se conectar ao repositório.Clique em Salvar ou Instalar. O rótulo do botão muda dependendo do fluxo de trabalho. Você será redirecionado para o Google Cloud para continuar a instalação.
Faça login com sua conta do Google Cloud. Se solicitado, autorize a integração do Cloud Build com o GitHub.
Na página Cloud Build, selecione o projeto. Um assistente será exibido.
Na seção Selecionar repositório, selecione sua conta do GitHub e o repositório
terraform-google-dataplex-auto-data-quality
.Se você concordar com os termos e condições, marque a caixa de seleção e clique em Conectar.
Na seção Criar um acionador, clique em Criar um acionador:
- Adicione um nome de gatilho, como
push-to-branch
. Anote esse nome do gatilho porque você vai precisar dele mais tarde. - Na seção Evento, selecione Enviar para uma ramificação.
- Na seção Origem, selecione
.*
no campo Ramificação. - Clique em Criar.
- Adicione um nome de gatilho, como
O app GitHub do Cloud Build agora está configurado, e seu repositório do GitHub está vinculado ao seu projeto do Google Cloud. A partir de agora, as alterações no repositório GitHub acionam execuções do Cloud Build, que informam os resultados de volta ao GitHub usando as Verificações do GitHub (em inglês).
Como alterar a configuração do ambiente em um novo branch de recurso
Até agora, você configurou a maior parte do seu ambiente. Portanto, é hora de fazer algumas alterações de código em seu ambiente local.
No GitHub, acesse a página principal do seu repositório bifurcado.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
Verifique se você está na ramificação
dev
.Para abrir o arquivo para edição, acesse o arquivo
modules/deploy/dataplex.tf
.Na linha 19, mude o marcador
the_environment
paraenvironment
.Adicione uma mensagem de confirmação na parte de baixo da página, como "modificando rótulo", e selecione Create a new branch for this commit and start a pull request.
Clique em Propor alterações.
Na página seguinte, clique em Criar solicitação de envio para abrir uma nova com a alteração na ramificação
dev
.Depois que a solicitação de envio for aberta, um job do Cloud Build será iniciado automaticamente.
Clique em Mostrar todas as verificações e aguarde a verificação ficar verde. Não mescle sua solicitação de envio ainda. A mesclagem será feita em uma etapa posterior do tutorial.
Clique em Detalhes para ver mais informações, incluindo a saída do
terraform plan
em Ver mais detalhes no Google Cloud Build.
Observe que o job Cloud Build executou o pipeline definido no arquivo cloudbuild.yaml
. Como discutido anteriormente, esse pipeline tem comportamentos diferentes, dependendo do branch que está sendo buscado. A construção verifica se a variável $BRANCH_NAME
corresponde a alguma pasta do ambiente. Nesse caso, o Cloud Build executa terraform plan
para esse ambiente.
Caso contrário, o Cloud Build executa terraform plan
em todos os ambientes
para garantir que a alteração proposta seja apropriada para todos eles. Se a execução
de algum desses planos falhar, a compilação falhará.
Da mesma forma, o comando terraform apply
é executado para ramificações do ambiente, mas é completamente ignorado em qualquer outro caso. Nesta seção, você enviou uma alteração de código para uma nova filial, portanto, nenhuma implantação de infraestrutura foi aplicada ao seu projeto do Google Cloud.
Como aplicar o sucesso da execução do Cloud Build antes de mesclar branches
Para garantir que as mesclagens possam ser aplicadas apenas quando as respectivas execuções do Cloud Build forem bem-sucedidas, continue com as seguintes etapas:
No GitHub, acesse a página principal do seu repositório bifurcado.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
No nome do repositório, clique em Settings.
No menu esquerdo, clique em Branches.
Em Branch protection rules, clique em Add rule.
Em Branch name pattern, digite
dev
.Na seção Proteger ramificações correspondentes, selecione Exigir que as verificações de status sejam aprovadas antes da mesclagem.
Pesquise o nome do gatilho do Cloud Build criado anteriormente.
Clique em Criar.
Repita as etapas 3 a 7, definindo Padrão de nome da ramificação como
prod
.
Essa configuração é importante para proteger as ramificações dev
e prod
. Ou seja, as confirmações precisam primeiro ser enviadas para outro branch e somente então podem ser mescladas ao branch protegido. Neste tutorial, a proteção exige que a execução do Cloud Build seja bem-sucedida para que a mesclagem seja permitida.
Como promover alterações no ambiente de desenvolvimento
Você tem uma solicitação de envio aguardando para ser mesclada. É hora de aplicar o estado que você quer ao seu ambiente dev
.
No GitHub, acesse a página principal do seu repositório bifurcado.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
No nome do seu repositório, clique em Pull requests.
Clique na solicitação de envio que você acabou de criar.
Clique em Mesclar solicitação de envio e depois em Confirmar mesclagem.
Verifique se um novo Cloud Build foi acionado:
Abra a compilação e verifique os registros. Ele vai mostrar todos os recursos que o Terraform está criando e gerenciando.
Como promover alterações no ambiente de produção
Agora que seu ambiente de desenvolvimento foi totalmente testado, você pode promover o código para regras de qualidade de dados à produção.
No GitHub, acesse a página principal do seu repositório bifurcado.
https://github.com/YOUR_GITHUB_USERNAME/terraform-google-dataplex-auto-data-quality
No nome do seu repositório, clique em Pull requests.
Clique em New pull request.
Para base repository, selecione seu repositório recém-bifurcado.
Para base, selecione
prod
do seu próprio repositório base. Para comparar, selecionedev
.Clique em Criar solicitação de envio.
Para title, digite um título como
Changing label name
e clique em Criar solicitação de envio.Revise as alterações propostas, incluindo os detalhes de
terraform plan
do Cloud Build e clique em Mesclar solicitação de envio.Clique em Confirmar mesclagem.
No console do Google Cloud, abra a página Histórico da compilação para ver as alterações sendo aplicadas ao ambiente de produção:
Você configurou regras de qualidade de dados que são gerenciadas usando o Terraform e o Cloud Build.
Limpar
Depois de concluir o tutorial, limpe os recursos que você criou no Google Cloud para não receber cobranças por eles no futuro.
Excluir o projeto
- 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.
Como excluir o repositório do GitHub
Para evitar o bloqueio de novas solicitações de pull no repositório do GitHub, exclua as regras de proteção do branch:
- No GitHub, acesse a página principal do seu repositório bifurcado.
- No nome do repositório, clique em Settings.
- No menu esquerdo, clique em Branches.
- Na seção Regras de proteção do branch, clique no botão Excluir das linhas
dev
eprod
.
Se preferir, desinstale completamente o app Cloud Build do GitHub:
No GitHub, acesse a página Aplicativos do GitHub (link em inglês).
Na guia Apps instalados do GitHub, clique em Configurar na linha Cloud Build. Em seguida, na seção Zona de perigo, clique no botão Desinstalar na linha Desinstalar o Google Cloud Builder.
Na parte superior da página, você verá uma mensagem dizendo "Tudo pronto. Um job foi colocado na fila para desinstalar o Google Cloud Build."
Na guia Apps autorizados do GitHub, clique no botão Revogar na linha Google Cloud Build e em Entendo, revogar acesso.
Se você não quiser manter seu repositório do GitHub:
- No GitHub, acesse a página principal do seu repositório bifurcado.
- No nome do repositório, clique em Settings.
- Acesse Zona de perigo.
- Clique em Excluir este repositório e siga as etapas de confirmação.
A seguir
- Saiba mais sobre a qualidade dos dados automáticos.
- Saiba mais sobre as práticas recomendadas de DevOps e DevOps.
- Conheça o Cloud Foundation Toolkit para encontrar mais modelos do Terraform.