google_looker_instance provisiona uma instância do Looker (plataforma enterprise de BI com LookML), não do Looker Studio. São produtos distintos. Looker Studio não tem recurso Terraform; é configurado via UI.
O Looker é um serviço gerenciado: a instância roda na infraestrutura do Google, não em VMs do seu projeto. O que o Terraform controla é a configuração da instância (edição, OAuth, rede, janela de manutenção).
Recurso principal
resource "google_looker_instance" "principal" {
name = "${local.prefixo}-looker"
region = var.regiao
platform_edition = var.looker_edition
oauth_config {
client_id = var.looker_oauth_client_id
client_secret = var.looker_oauth_client_secret
}
admin_settings {
allowed_email_domains = ["empresa.com"] # restringe login por domínio
}
maintenance_window {
day_of_week = "SUNDAY" # MONDAY..SUNDAY
start_time {
hours = 23
minutes = 0
}
}
depends_on = [google_project_service.looker_api]
}Parâmetros principais
platform_edition
| Valor | Descrição | Quando usar |
|---|---|---|
LOOKER_CORE_TRIAL | Trial gratuito, limitado a 10 usuários e 30 dias | Avaliação inicial |
LOOKER_CORE_STANDARD | Mensal, sem SLA de produção | Dev ou projetos pequenos |
LOOKER_CORE_STANDARD_ANNUAL | Anual, SLA 99.5% | Prod com orçamento menor |
LOOKER_CORE_ENTERPRISE_ANNUAL | Anual, SLA 99.95%, CMEK, PSC nativo | Prod enterprise |
LOOKER_CORE_EMBED_ANNUAL | Anual, para embedding em aplicações externas | Produtos SaaS com BI embarcado |
A edição não pode ser alterada via Terraform após a criação sem recriar a instância. Escolher errado em prod resulta em destruição e recriação do ambiente Looker.
oauth_config
Looker usa OAuth 2.0 para autenticação dos usuários. É necessário criar uma credencial OAuth no Google Cloud antes de provisionar:
# Crie manualmente no console ou via gcloud:
# APIs & Services > Credentials > OAuth 2.0 Client IDs
# Tipo: Web Application
# Authorized redirect URIs: https://<looker-uri>/oauth/redirect# Armazene as credenciais no Secret Manager, nunca em tfvars em plain text
data "google_secret_manager_secret_version" "looker_oauth_id" {
secret = "looker-oauth-client-id"
}
data "google_secret_manager_secret_version" "looker_oauth_secret" {
secret = "looker-oauth-client-secret"
}
resource "google_looker_instance" "principal" {
oauth_config {
client_id = data.google_secret_manager_secret_version.looker_oauth_id.secret_data
client_secret = data.google_secret_manager_secret_version.looker_oauth_secret.secret_data
}
# ...
}maintenance_window
maintenance_window {
day_of_week = "SUNDAY"
start_time {
hours = 23 # 0-23
minutes = 0 # 0, 15, 30 ou 45
seconds = 0
nanos = 0
}
}
# Período onde manutenção é proibida (ex.: semana de fechamento)
deny_maintenance_period {
start_date {
year = 2026
month = 12
day = 20
}
end_date {
year = 2027
month = 1
day = 5
}
time {
hours = 0
}
}Conectividade de rede
IP público (padrão)
resource "google_looker_instance" "principal" {
public_ip_enabled = true
private_ip_enabled = false
# ...
}Acesso via URL pública gerada pelo Google. Adequado para dev e ambientes sem restrição de rede.
IP privado via PSC (Private Service Connect)
Para ambientes enterprise onde o Looker deve se conectar ao BigQuery e ser acessado sem tráfego pela internet pública:
resource "google_looker_instance" "principal" {
public_ip_enabled = false
private_ip_enabled = true
consumer_network = "projects/${var.projeto_id}/global/networks/${var.vpc_name}"
reserved_range = google_compute_global_address.looker_range.name
psc_enabled = true
psc_config {
# Projetos autorizados a criar endpoints PSC para esta instância
allowed_vpcs = [
"projects/${var.projeto_id}/global/networks/${var.vpc_name}",
]
}
# ...
}
# Range de IPs reservado para a instância Looker dentro da VPC
resource "google_compute_global_address" "looker_range" {
name = "${local.prefixo}-looker-range"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 20
network = "projects/${var.projeto_id}/global/networks/${var.vpc_name}"
}
resource "google_service_networking_connection" "looker_vpc" {
network = "projects/${var.projeto_id}/global/networks/${var.vpc_name}"
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [google_compute_global_address.looker_range.name]
}PSC requer que servicenetworking.googleapis.com esteja habilitado e a VPC tenha conectividade com o BigQuery via private endpoint ou VPC Service Controls.
IAM na instância
resource "google_looker_instance_iam_binding" "admins" {
instance = google_looker_instance.principal.name
region = var.regiao
role = "roles/looker.admin"
members = [
"user:[email protected]",
"group:[email protected]",
]
}Roles do Looker:
| Role | Acesso |
|---|---|
roles/looker.admin | Administração total da instância |
roles/looker.developer | Desenvolvimento de LookML e Explores |
roles/looker.user | Acesso à interface de exploração e dashboards |
roles/looker.viewer | Somente visualização de dashboards |
IAM do GCP controla acesso à instância em si. Dentro do Looker, permissões de modelo e dados são configuradas via LookML (access_grants) e grupos internos do Looker.
Habilitando a API
resource "google_project_service" "looker_api" {
service = "looker.googleapis.com"
disable_on_destroy = false
}Outputs úteis
output "looker_uri" {
description = "URL de acesso à instância Looker"
value = google_looker_instance.principal.looker_uri
}
output "looker_version" {
description = "Versão do Looker instalada"
value = google_looker_instance.principal.looker_version
}
output "ingress_private_ip" {
description = "IP privado da instância (disponível apenas com private_ip_enabled = true)"
value = google_looker_instance.principal.ingress_private_ip
}Quotas e limitações relevantes
- Instâncias por projeto: 1 por padrão; aumentar requer quota request via console GCP
- Regiões disponíveis: nem todas as regiões GCP suportam Looker; verificar disponibilidade antes de escolher região de prod (
us-central1,us-east1,europe-west1,asia-northeast1são as mais cobertas) - Trial: expira em 30 dias; não pode ser convertido para edição paga via Terraform (requer recriação)
- PSC: disponível apenas nas edições
ENTERPRISE_ANNUALeEMBED_ANNUAL; Standard usa peering de VPC, não PSC - Provisionamento:
google_looker_instancepode levar de 20 a 40 minutos para ficar disponível; o provider aguarda o recurso ficarACTIVEantes de retornar - LookML: o código LookML em si não é gerenciado pelo Terraform; é versionado em repositório Git e sincronizado via integração nativa do Looker com GitHub/GitLab/Bitbucket
- Usuários e grupos internos: não gerenciados via Terraform; use a API Admin do Looker ou provisionamento SCIM com o Identity Provider
Conexões
Ver também: gcp-looker | gcp-bigquery | terraform-gcp-ambientes | terraform-gcp-bigquery | terraform-cloud-gcp | gcp-boas-praticas