Última revisão: maio de 2026
Construa os serviços da AWS do exame ADP com Terraform puro — um bloco de cada vez, cada um vinculado a um domínio do exame. O mesmo código funciona no OpenTofu.
Ao final deste laboratório, você terá provisionado, com Terraform puro, o menor substrato de dados ADP realista — um bucket de destino do Cloud Storage, um conjunto de dados do BigQuery com uma tabela particionada por data de ingestão e uma consulta agendada do BigQuery que é executada a cada hora, lendo de um conjunto de dados público e escrevendo na tabela. Quatro blocos; o ponto de partida da análise GCP.
Solte os trechos em um único main.tf, execute terraform init e, em seguida, terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.your-project-id no bloco do provedor.Tudo gratuito no escopo do laboratório:
~$0/mês no volume do laboratório. Cargas de trabalho reais do BigQuery são cobradas por bytes digitalizados — particione + agrupe agressivamente e SELECT apenas o que você precisa.
Habilite o Cloud Storage, BigQuery e o Serviço de Transferência de Dados do BigQuery (que potencializa as consultas agendadas).
terraform {
required_version = ">= 1.5"
required_providers {
google = { source = "hashicorp/google", version = "~> 6.0" }
}
}
provider "google" {
project = "your-project-id" # REPLACE
region = "us-central1"
}
locals {
labels = {
project = "certlabpro-adp"
managed_by = "terraform"
}
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bigquery" {
service = "bigquery.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bqdts" {
service = "bigquerydatatransfer.googleapis.com"
disable_on_destroy = false
}Todo pipeline de dados padrão ADP começa com um bucket de destino — arquivos brutos (CSV / JSON / Parquet / Avro) são depositados aqui, e trabalhos posteriores os leem. O bucket é a fronteira entre fora do lago e dentro do lago. O exame ADP testa novamente a escolha da classe de armazenamento aqui — Padrão para a camada de destino (leituras frequentes nos primeiros 30 dias), com uma regra de ciclo de vida para transicionar para Coldline após 90 dias.
O acesso uniforme no nível do bucket está ativado (o padrão de segurança recomendado pelo ADP).
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "landing" {
name = "certlabpro-adp-landing-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only
lifecycle_rule {
condition {
age = 90
}
action {
type = "SetStorageClass"
storage_class = "COLDLINE"
}
}
labels = local.labels
depends_on = [google_project_service.storage]
}BigQuery é o data warehouse serverless do GCP — pague por byte escaneado na consulta, pague por byte armazenado nos dados. O exame ADP testa particionamento + clustering como as alavancas de controle de custo: tabelas particionadas permitem que as consultas ignilem dados irrelevantes; tabelas clusterizadas agrupam linhas relacionadas no armazenamento.
Nós criamos:
analytics — o contêiner do BigQuery (o equivalente GCP de um esquema / banco de dados). Defina delete_contents_on_destroy = true para conveniência da limpeza do laboratório.events com particionamento por tempo de ingestão (pseudo-coluna _PARTITIONTIME) e expiração de partição de 30 dias. Tabelas de produção geralmente particionam por uma coluna (time_partitioning.field) para seletividade de consulta.resource "google_bigquery_dataset" "analytics" {
dataset_id = "analytics"
location = "US"
delete_contents_on_destroy = true # lab-only
labels = local.labels
depends_on = [google_project_service.bigquery]
}
resource "google_bigquery_table" "events" {
dataset_id = google_bigquery_dataset.analytics.dataset_id
table_id = "events"
deletion_protection = false # lab-only
time_partitioning {
type = "DAY"
expiration_ms = 30 * 24 * 60 * 60 * 1000 # 30 days
require_partition_filter = true
}
schema = jsonencode([
{ name = "event_id", type = "STRING", mode = "REQUIRED" },
{ name = "event_type", type = "STRING", mode = "REQUIRED" },
{ name = "event_time", type = "TIMESTAMP", mode = "REQUIRED" },
{ name = "user_id", type = "STRING", mode = "NULLABLE" },
{ name = "payload", type = "JSON", mode = "NULLABLE" },
])
labels = local.labels
}Consultas agendadas são a primitiva padrão ADP para ingestão de um conjunto de dados BigQuery para outro em uma cadência fixa. Elas são executadas na infraestrutura do Serviço de Transferência de Dados do BigQuery (separado das consultas ad-hoc bq) e cobram a mesma taxa por byte escaneado.
Agendamos uma consulta que é executada a cada hora, lê do conjunto de dados público bigquery-public-data.samples.shakespeare e escreve na tabela events da Etapa 3. O formato MERGE (upsert) é a resposta canônica do ADP para ingestão idempotente — reexecutar a mesma hora não insere duplicatas.
A consulta agendada é executada como a conta de serviço padrão do projeto; implantações de produção usam uma conta de serviço de transferência dedicada com roles/bigquery.dataEditor no destino.
resource "google_bigquery_data_transfer_config" "hourly_load" {
display_name = "certlabpro-adp-hourly-load"
data_source_id = "scheduled_query"
location = "US"
schedule = "every 1 hours"
destination_dataset_id = google_bigquery_dataset.analytics.dataset_id
params = {
query = "INSERT INTO `${google_bigquery_dataset.analytics.dataset_id}.${google_bigquery_table.events.table_id}` (event_id, event_type, event_time, user_id, payload) SELECT GENERATE_UUID() AS event_id, \"shakespeare-line\" AS event_type, CURRENT_TIMESTAMP() AS event_time, NULL AS user_id, TO_JSON(STRUCT(word, word_count, corpus)) AS payload FROM `bigquery-public-data.samples.shakespeare` WHERE word_count > 100 LIMIT 100"
}
depends_on = [
google_project_service.bqdts,
google_bigquery_table.events,
]
}terraform destroy derruba tudo. O bucket é destruído (force_destroy apenas para laboratório). O conjunto de dados é destruído (delete_contents_on_destroy apenas para laboratório) — suas tabelas vão com ele. A consulta agendada é desanexada e para de ser executada imediatamente. Os serviços do projeto permanecem habilitados (gratuitos).
O ADP cobre muitas superfícies de dados do GCP que este laboratório não pode abranger — Dataflow (abordado em [[gcp-pde]] no nível Pro), Dataproc, Pub/Sub, Cloud Composer (Airflow gerenciado), Dataform (o IDE de transformação SQL construído no BigQuery), Looker Studio, Vertex AI, Cloud Data Fusion, Database Migration Service, Datastream, toda a superfície multi-cloud BigLake / BigQuery Omni e BigQuery ML (treinamento de ML no banco de dados).
Nós nos limitamos às primitivas GCS + BigQuery + consulta agendada porque elas são a base de onde todo pipeline padrão ADP começa. Dataflow / Dataproc transmite ou processa em lotes para GCS ou BigQuery. Composer / Workflows orquestram as consultas agendadas acima. Looker lê do BigQuery. Entenda a base corretamente; depois adicione motores especializados.
Para a cobertura conceitual serviço por serviço, consulte as seções Navegar, Guia e Editorial desta página de certificação.