Este projeto implementa uma arquitetura de dados moderna e governada para ambientes de desenvolvimento (DEV) e produção (PRD) na Azure, integrando Databricks, Unity Catalog, Azure SQL Database e Blob Storage. Todo o provisionamento, automação e ingestão de dados são realizados via CLI e scripts Python, garantindo rastreabilidade, segurança e escalabilidade.
- Azure Resource Groups: Separação lógica dos recursos DEV e PRD.
- Azure Storage Account: Armazenamento de dados brutos, intermediários e finais (staging, bronze, silver, gold).
- Blob Storage: Repositório dos arquivos CSV para ingestão.
- Azure Databricks: Plataforma de processamento e governança de dados, com Unity Catalog para controle de acesso e external locations.
- Unity Catalog: Governança centralizada dos dados, catálogos, schemas e volumes.
- Azure SQL Database: Banco relacional para consultas, BI e integração, com automação de carga via Python.
- Azure CLI & Databricks CLI: Provisionamento, configuração e governança dos recursos.
- Python (pandas, sqlalchemy, pyodbc): Automação da ingestão dos dados do Blob Storage para o SQL.
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ DEV │ │ PRD │ │ Blob │
│ Resource │ │ Resource │ │ Storage │
│ Group │ │ Group │ │ (staging/ │
│ (rg_rescue │ │ (rg_rescue │ │ olist/*.csv│
│ _dev) │ │ _prd) │ └─────────────┘
└─────┬──────┘ └─────┬───────┘
│ │
│ │
┌─────▼──────┐ ┌─────▼───────┐
│ Databricks │ │ Databricks │
│ Workspace │ │ Workspace │
│ (DEV) │ │ (PRD) │
└─────┬──────┘ └─────┬───────┘
│ │
│ │
┌─────▼──────┐ ┌─────▼───────┐
│ Unity │ │ Unity │
│ Catalog │ │ Catalog │
│ rescue_dev │ │ rescue_prd │
└─────┬──────┘ └─────┬───────┘
│ │
│ │
┌─────▼──────┐ ┌─────▼───────┐
│ Azure SQL │ │ Azure SQL │
│ sqlrescuedev│ │ sqlrescueprd│
│ (rescue) │ │ (rescue) │
└────────────┘ └─────────────┘
- Provisionamento dos recursos Azure: Resource Groups, Storage Accounts, Containers, Access Connector.
- Permissões e credenciais: Access Connector único para DEV/PRD, permissões via principalId, SAS key para Blob Storage.
- Governança Databricks/Unity Catalog: External locations, catálogos, schemas, volumes, isolamento de catálogo PRD.
- Ingestão de dados: Upload dos CSVs no Blob Storage, automação da carga para Azure SQL via Python.
- Segurança e acesso: Regras de firewall para IPs e recursos Azure, credenciais protegidas.
- Documentação e rastreabilidade: README.md atualizado, scripts versionados, comandos CLI e Python documentados.
- Azure CLI: Provisionamento, permissões, firewall
- Databricks CLI: Governança, external locations, schemas, volumes
- Python: Automação da carga dos CSVs para SQL
Como o Azure SQL Database não suporta tabelas externas com BLOB_STORAGE, utilize o comando BULK INSERT para importar os arquivos CSV diretamente do Blob Storage usando SAS.
Exemplo para importar customers.csv:
BULK INSERT olist.customers
FROM 'https://sarescuedev.blob.core.windows.net/staging/olist/customers.csv'
WITH (
DATA_SOURCE = 'olist_blob',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
);Passos:
- Crie a tabela destino (exemplo para customers):
CREATE TABLE olist.customers ( customer_id NVARCHAR(50), customer_unique_id NVARCHAR(50), customer_zip_code_prefix NVARCHAR(10), customer_city NVARCHAR(50), customer_state NVARCHAR(2) );
- Execute o BULK INSERT para cada arquivo CSV, ajustando o nome da tabela e o layout conforme necessário.
Repita para todos os arquivos da pasta olist.
-- Criar schema
CREATE SCHEMA olist;
-- Criar master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz@WSX3edc';
-- Criar credential com SAS
CREATE DATABASE SCOPED CREDENTIAL olist_sas
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sp=racwdlme&st=2025-10-05T00:19:24Z&se=2025-10-05T08:34:24Z&spr=https&sv=2024-11-04&sr=c&sig=yYlrbME%2F6%2BIpqgD2FRYLbqAh4NLypApbML3TK3OlPRc%3D';
-- Criar external data source
CREATE EXTERNAL DATA SOURCE olist_blob
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://sarescuedev.blob.core.windows.net/staging/olist',
CREDENTIAL = olist_sas
);
-- Criar formato de arquivo externo para CSV (delimitador de string escapado)
CREATE EXTERNAL FILE FORMAT olist_csv_format
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (FIELD_TERMINATOR = ',', STRING_DELIMITER = '""', FIRST_ROW = 2)
);No container staging do storage sarescuedev, foi criada a pasta olist com arquivos CSV. Vamos criar um schema olist e importar esses dados para tabelas nos dois Azure SQL (DEV e PRD) usando external data source e SAS key.
sp=racwdlme&st=2025-10-05T00:19:24Z&se=2025-10-05T08:34:24Z&spr=https&sv=2024-11-04&sr=c&sig=yYlrbME%2F6%2BIpqgD2FRYLbqAh4NLypApbML3TK3OlPRc%3D
-
Criar o schema
olist:CREATE SCHEMA olist;
-
Criar a credential para acesso ao Blob Storage via SAS:
CREATE DATABASE SCOPED CREDENTIAL olist_sas WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sp=racwdlme&st=2025-10-05T00:19:24Z&se=2025-10-05T08:34:24Z&spr=https&sv=2024-11-04&sr=c&sig=yYlrbME%2F6%2BIpqgD2FRYLbqAh4NLypApbML3TK3OlPRc%3D';
-
Criar o external data source apontando para a pasta olist:
CREATE EXTERNAL DATA SOURCE olist_blob WITH ( TYPE = BLOB_STORAGE, LOCATION = 'https://sarescuedev.blob.core.windows.net/staging/olist', CREDENTIAL = olist_sas );
-
Criar as tabelas externas para cada CSV (exemplo para customers.csv):
CREATE EXTERNAL TABLE olist.customers ( -- Defina os tipos de dados conforme o layout do CSV customer_id NVARCHAR(50), customer_unique_id NVARCHAR(50), customer_zip_code_prefix NVARCHAR(10), customer_city NVARCHAR(50), customer_state NVARCHAR(2) ) WITH ( LOCATION = 'customers.csv', DATA_SOURCE = olist_blob, FILE_FORMAT = olist_csv_format );
-
Criar o formato de arquivo externo para CSV:
CREATE EXTERNAL FILE FORMAT olist_csv_format WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', FIRST_ROW = 2) );
Repita o passo 4 para cada arquivo CSV da pasta olist.
- Execute todos os comandos acima tanto no SQL DEV quanto no PRD.
- Ajuste os tipos de dados conforme o layout de cada CSV.
- O SAS key tem validade até 05/10/2025 08:34 UTC.
Provisionamos dois servidores Azure SQL gratuitos (tier Basic, até 2GB) para DEV e PRD, cada um com um banco chamado rescue.
Credenciais padrão:
- Usuário: engenharia
- Senha: 1qaz@WSX3edc
az sql server create --name sqlrescuedev --resource-group rg_rescue_dev --location brazilsouth --admin-user engenharia --admin-password 1qaz@WSX3edc --enable-public-network true
az sql db create --resource-group rg_rescue_dev --server sqlrescuedev --name rescue --edition Basicaz sql server create --name sqlrescueprd --resource-group rg_rescue_prd --location brazilsouth --admin-user engenharia --admin-password 1qaz@WSX3edc --enable-public-network true
az sql db create --resource-group rg_rescue_prd --server sqlrescueprd --name rescue --edition BasicObservação: O tier Basic permite até 2GB por banco, ideal para uso gratuito e testes. Caso precise de mais espaço, utilize o tier Standard ou superior.
Para garantir que o catálogo de produção (rescue_prd) só apareça no workspace de PRD, utilize o comando de assignment para vincular o catálogo apenas ao workspace de produção:
databricks catalogs update rescue_prd --assignments 2533506717590470 --profile PRDAssim, apenas o workspace de produção terá acesso ao catálogo rescue_prd, reforçando a governança e o isolamento entre ambientes.
Este guia apresenta o passo a passo para provisionar, configurar e governar ambientes Databricks DEV e PRD na Azure, utilizando automação via CLI e Unity Catalog.
rg_rescue_dev(desenvolvimento)rg_rescue_prd(produção)
sarescuedev(DEV)sarescueprd(PRD)
- staging, bronze, silver, gold (em ambos storages)
- Criar apenas um Access Connector:
srv_unity(no DEV)
Obtenha o principalId do Access Connector:
az resource show --ids /subscriptions/<subscription_id>/resourceGroups/rg_rescue_dev/providers/Microsoft.Databricks/accessConnectors/srv_unity --query "identity.principalId" -o tsv
# Exemplo: 64b1e885-a2e8-413b-bc6a-39b3c9c938ffAtribua as permissões nos storages e containers de DEV e PRD:
# Storage Account
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd
# Containers DEV
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/staging
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/bronze
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/silver
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/gold
# Containers PRD
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd/blobServices/default/containers/staging
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd/blobServices/default/containers/bronze
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd/blobServices/default/containers/silver
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription_id>/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd/blobServices/default/containers/golddatabricks external-locations create staging_dev abfss://staging@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Staging DEV" --profile DEV
databricks external-locations create bronze_dev abfss://bronze@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Bronze DEV" --profile DEV
databricks external-locations create silver_dev abfss://silver@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Silver DEV" --profile DEV
databricks external-locations create gold_dev abfss://gold@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Gold DEV" --profile DEVdatabricks external-locations create staging_prd abfss://staging@sarescueprd.dfs.core.windows.net/ srv_unity --comment "External Storage Staging PRD" --profile PRD
databricks external-locations create bronze_prd abfss://bronze@sarescueprd.dfs.core.windows.net/ srv_unity --comment "External Storage Bronze PRD" --profile PRD
databricks external-locations create silver_prd abfss://silver@sarescueprd.dfs.core.windows.net/ srv_unity --comment "External Storage Silver PRD" --profile PRD
databricks external-locations create gold_prd abfss://gold@sarescueprd.dfs.core.windows.net/ srv_unity --comment "External Storage Gold PRD" --profile PRDdatabricks catalogs create rescue_dev --comment "Catálogo DEV" --profile DEV
databricks schemas create rescue_b rescue_dev --storage-root "abfss://bronze@sarescuedev.dfs.core.windows.net/" --comment "Schema Bronze DEV" --profile DEV
databricks schemas create rescue_s rescue_dev --storage-root "abfss://silver@sarescuedev.dfs.core.windows.net/" --comment "Schema Silver DEV" --profile DEV
databricks schemas create rescue_g rescue_dev --storage-root "abfss://gold@sarescuedev.dfs.core.windows.net/" --comment "Schema Gold DEV" --profile DEVdatabricks catalogs create rescue_prd --comment "Catálogo PRD" --profile PRD
databricks schemas create rescue_b rescue_prd --storage-root "abfss://bronze@sarescueprd.dfs.core.windows.net/" --comment "Schema Bronze PRD" --profile PRD
databricks schemas create rescue_s rescue_prd --storage-root "abfss://silver@sarescueprd.dfs.core.windows.net/" --comment "Schema Silver PRD" --profile PRD
databricks schemas create rescue_g rescue_prd --storage-root "abfss://gold@sarescueprd.dfs.core.windows.net/" --comment "Schema Gold PRD" --profile PRDdatabricks volumes create rescue_dev rescue_b vol_stg EXTERNAL --storage-location "abfss://staging@sarescuedev.dfs.core.windows.net/" --comment "Volume Staging DEV" --profile DEVdatabricks volumes create rescue_prd rescue_b vol_stg EXTERNAL --storage-location "abfss://staging@sarescueprd.dfs.core.windows.net/" --comment "Volume Staging PRD" --profile PRDTodos os comandos acima garantem governança, isolamento e automação dos ambientes Databricks DEV e PRD, utilizando o mesmo Access Connector e credencial para todos os external storages.
databricks external-locations create bronze_prd abfss://bronze@sarescueprd.dfs.core.windows.net/ srv_unity --comment "External Storage Bronze PRD" --profile PRD
databricks external-locations create silver_prd abfss://silver@sarescueprd.dfs.core.windows.net/ srv_unity --comment "External Storage Silver PRD" --profile PRD
databricks external-locations create gold_prd abfss://gold@sarescueprd.dfs.core.windows.net/ srv_unity --comment "External Storage Gold PRD" --profile PRD# Catálogo (se não existir)
databricks catalogs create rescue_prd --comment "Catálogo PRD" --profile PRD
# Schemas
databricks schemas create rescue_b rescue_prd --storage-root "abfss://bronze@sarescueprd.dfs.core.windows.net/" --comment "Schema Bronze PRD" --profile PRD
databricks schemas create rescue_s rescue_prd --storage-root "abfss://silver@sarescueprd.dfs.core.windows.net/" --comment "Schema Silver PRD" --profile PRD
databricks schemas create rescue_g rescue_prd --storage-root "abfss://gold@sarescueprd.dfs.core.windows.net/" --comment "Schema Gold PRD" --profile PRDCada schema aponta para o external storage correspondente, garantindo governança e isolamento dos dados em produção.
Para utilizar o Access Connector srv_unity (criado em DEV) para acessar os storages de DEV e PRD, atribua o principalId do connector como "Storage Blob Data Contributor" nos containers e storage account de produção:
- Obtenha o principalId do Access Connector:
az resource show --ids /subscriptions/eef39a8e-5a31-408a-87e8-a8b61faae822/resourceGroups/rg_rescue_dev/providers/Microsoft.Databricks/accessConnectors/srv_unity --query "identity.principalId" -o tsv
# Exemplo de retorno: 64b1e885-a2e8-413b-bc6a-39b3c9c938ff- Atribua as permissões em PRD:
az role assignment create --assignee 64b1e885-a2e8-413b-bc6a-39b3c9c938ff --role "Storage Blob Data Contributor" --scope /subscriptions/eef39a8e-5a31-408a-87e8-a8b61faae822/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd
az role assignment create --assignee 64b1e885-a2e8-413b-bc6a-39b3c9c938ff --role "Storage Blob Data Contributor" --scope /subscriptions/eef39a8e-5a31-408a-87e8-a8b61faae822/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd/blobServices/default/containers/bronze
az role assignment create --assignee 64b1e885-a2e8-413b-bc6a-39b3c9c938ff --role "Storage Blob Data Contributor" --scope /subscriptions/eef39a8e-5a31-408a-87e8-a8b61faae822/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd/blobServices/default/containers/silver
az role assignment create --assignee 64b1e885-a2e8-413b-bc6a-39b3c9c938ff --role "Storage Blob Data Contributor" --scope /subscriptions/eef39a8e-5a31-408a-87e8-a8b61faae822/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sarescueprd/blobServices/default/containers/goldAssim, o mesmo Access Connector pode ser usado para todos os external storages do Databricks, tanto em DEV quanto em PRD.
Importante: A associação do catálogo ao workspace deve ser feita via interface web do Databricks (UI):
- Acesse Unity Catalog > Catálogos > rescue_dev.
- Clique em "Assign workspaces" e selecione o workspace de desenvolvimento (ID: 1293581597272291).
- Salve as alterações.
Após associar o catálogo, execute o comando abaixo para criar o volume:
databricks volumes create rescue_dev rescue_b vol_stg EXTERNAL --storage-location "abfss://staging@sarescuedev.dfs.core.windows.net/" --comment "Volume Staging DEV" --profile DEVCrie o catálogo rescue_dev:
databricks catalogs create --name rescue_dev --comment "Catálogo DEV" --profile DEVDentro do catálogo, crie os schemas:
- rescue_b (bronze)
databricks schemas create --catalog-name rescue_dev --name rescue_b --storage-location "abfss://bronze@sarescuedev.dfs.core.windows.net/" --comment "Schema Bronze DEV" --profile DEV- rescue_s (silver)
databricks schemas create --catalog-name rescue_dev --name rescue_s --storage-location "abfss://silver@sarescuedev.dfs.core.windows.net/" --comment "Schema Silver DEV" --profile DEV- rescue_g (gold)
databricks schemas create --catalog-name rescue_dev --name rescue_g --storage-location "abfss://gold@sarescuedev.dfs.core.windows.net/" --comment "Schema Gold DEV" --profile DEVRepita o processo para o catálogo de produção (rescue_prd) e seus respectivos schemas, ajustando o storage account e perfil conforme necessário.
Para criar external storages no Unity Catalog via Databricks CLI, é necessário que o usuário tenha o privilégio CREATE EXTERNAL LOCATION no metastore (ser Metastore Admin ou ter permissão específica).
Passos:
- No portal Databricks, acesse Unity Catalog > Metastore > Permissions e atribua o privilégio ao seu usuário.
- Execute os comandos abaixo para criar os external storages DEV:
databricks external-locations create staging_dev abfss://staging@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Staging DEV" --profile DEV
databricks external-locations create bronze_dev abfss://bronze@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Bronze DEV" --profile DEV
databricks external-locations create silver_dev abfss://silver@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Silver DEV" --profile DEV
databricks external-locations create gold_dev abfss://gold@sarescuedev.dfs.core.windows.net/ srv_unity --comment "External Storage Gold DEV" --profile DEVResultado esperado:
Os external storages serão criados e listados no Unity Catalog, cada um apontando para seu respectivo container no storage account sarescuedev.
Serão criados quatro external storages no Unity Catalog, cada um apontando para seu respectivo container no storage account:
- staging_dev →
abfss://staging@<storage_account>.dfs.core.windows.net/ - bronze_dev →
abfss://bronze@<storage_account>.dfs.core.windows.net/ - silver_dev →
abfss://silver@<storage_account>.dfs.core.windows.net/ - gold_dev →
abfss://gold@<storage_account>.dfs.core.windows.net/
Exemplo de comando para criar um external storage via Databricks CLI:
databricks unity-catalog external-locations create \
--name staging_dev \
--url abfss://staging@<storage_account>.dfs.core.windows.net/ \
--credential-name <nome_credential> \
--comment "External Storage Staging DEV" \
--profile DEVRepita o comando para bronze_dev, silver_dev e gold_dev, ajustando o nome e o container conforme necessário.
Após configurar o arquivo ~/.databrickscfg com o perfil PRD e o token OAuth, execute o comando abaixo para validar o acesso:
databricks workspace list / --profile PRDExemplo de saída esperada:
ID Type Language Path
1511173645813477 DIRECTORY /Users
1511173645813478 DIRECTORY /Shared
1511173645813481 DIRECTORY /Repos
Se o comando retornar os diretórios principais do workspace, a autenticação está correta!
Após configurar o arquivo ~/.databrickscfg com o perfil DEV e o token OAuth, execute o comando abaixo para validar o acesso:
databricks workspace list / --profile DEVExemplo de saída esperada:
ID Type Language Path
3179726924317356 DIRECTORY /Users
3179726924317357 DIRECTORY /Shared
3179726924317362 DIRECTORY /Repos
Se o comando retornar os diretórios principais do workspace, a autenticação está correta!
Material sobre o uso de Databricks Asset Bundles
Este repositório contém materiais de testes e referências técnicas sobre o uso de Databricks Asset Bundles (DAB). O objetivo é fornecer exemplos práticos, configurações e documentação para auxiliar no desenvolvimento e implantação de projetos utilizando esta ferramenta.
O repositório incluirá:
- 📚 Materiais de referência técnica
- 🧪 Exemplos e casos de teste
- 📝 Documentação e guias de configuração
- 🎥 Links para vídeos tutoriais
Serão criados vídeos explicativos sobre o uso de Databricks Asset Bundles.
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bashaz loginaz group create --name rg_rescue_dev --location eastusaz storage account create --name sarescuedev --resource-group rg_rescue_dev --location eastus --sku Standard_LRS --kind StorageV2 --hierarchical-namespace true --access-tier CoolObservação: O parâmetro
--hierarchical-namespace trueativa o Data Lake Storage Gen2. O SKUStandard_LRSe o tierCoolsão as opções mais econômicas para testes.
az storage container create --name staging --account-name sarescuedev --resource-group rg_rescue_dev --public-access off
az storage container create --name bronze --account-name sarescuedev --resource-group rg_rescue_dev --public-access off
az storage container create --name silver --account-name sarescuedev --resource-group rg_rescue_dev --public-access off
az storage container create --name gold --account-name sarescuedev --resource-group rg_rescue_dev --public-access offaz datafactory create --resource-group rg_rescue_dev --factory-name adfrescuedev --location eastusObservação: É necessário instalar a extensão do Azure CLI para Data Factory na primeira execução. O comando registra automaticamente o provedor de recursos se necessário.
az provider register --namespace Microsoft.KeyVault
az keyvault create --name kvrescuedev --resource-group rg_rescue_dev --location eastus --sku standard# Criação do workspace
az databricks workspace create --name dbrrescuedev --resource-group rg_rescue_dev --location eastus --sku standard --public-network-access Enabled
# Atualização do SKU para Premium (necessário para Unity Catalog)
az databricks workspace update --name dbrrescuedev --resource-group rg_rescue_dev --sku premiumO link de acesso ao workspace Databricks será exibido ao final do comando, por exemplo:
https://adb-1293581597272291.11.azuredatabricks.net
curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sudo bashObservação: Instale apenas pelo método acima. Não use
pip install databricks-cli, pois instala a versão legacy (antiga), incompatível com Unity Catalog e OAuth.
az databricks access-connector create --name srv_unity --resource-group rg_rescue_dev --location eastus
az databricks access-connector update --name srv_unity --resource-group rg_rescue_dev --set identity.type=SystemAssignedObtenha o principalId da identidade gerenciada:
az databricks access-connector show --name srv_unity --resource-group rg_rescue_dev --query "identity.principalId" -o tsvCom o principalId, atribua o papel Storage Blob Data Contributor ao storage account e aos containers:
# Storage Account
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscriptionId>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev
# Containers
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscriptionId>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/staging
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscriptionId>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/bronze
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscriptionId>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/silver
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscriptionId>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/gold
az role assignment create --assignee <principalId> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscriptionId>/resourceGroups/rg_rescue_dev/providers/Microsoft.Storage/storageAccounts/sarescuedev/blobServices/default/containers/$webaz group create --name rg_rescue_prd --location eastusaz storage account create --name sarescueprd --resource-group rg_rescue_prd --location eastus --sku Standard_LRS --kind StorageV2 --hierarchical-namespace true --access-tier Coolaz storage container create --name staging --account-name sarescueprd --resource-group rg_rescue_prd --public-access off
az storage container create --name bronze --account-name sarescueprd --resource-group rg_rescue_prd --public-access off
az storage container create --name silver --account-name sarescueprd --resource-group rg_rescue_prd --public-access off
az storage container create --name gold --account-name sarescueprd --resource-group rg_rescue_prd --public-access offaz storage blob service-properties update --account-name sarescueprd --static-website --index-document portal_prd.html --404-document portal_prd.html<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Portal Produtivo</title>
</head>
<body>
<h1>Bem-vindo ao Portal Produtivo!</h1>
<p>Esta é a página inicial do static website configurado no Azure Storage para produção.</p>
</body>
</html>az storage blob upload --account-name sarescueprd --account-key <SUA_ACCOUNT_KEY> --container-name '$web' --name portal_prd.html --file portal_prd.htmlaz datafactory create --resource-group rg_rescue_prd --factory-name adfrescueprd --location eastusaz keyvault create --name kvrescueprd --resource-group rg_rescue_prd --location eastus --sku standard# Criação do workspace
az databricks workspace create --name dbrrescueprd --resource-group rg_rescue_prd --location eastus --sku standard --public-network-access Enabled
# Atualização do SKU para Premium (necessário para Unity Catalog)
az databricks workspace update --name dbrrescueprd --resource-group rg_rescue_prd --sku premiumObservação: O Access Connector srv_unity criado no ambiente de desenvolvimento será reutilizado no ambiente produtivo.
- Storage Account:
sametarescue - Container:
meta - Resource ID:
/subscriptions/eef39a8e-5a31-408a-87e8-a8b61faae822/resourceGroups/rg_rescue_prd/providers/Microsoft.Storage/storageAccounts/sametarescue - Subscription ID:
eef39a8e-5a31-408a-87e8-a8b61faae822 - Resource Group:
rg_rescue_prd - Workspace URL:
adb-2533506717590470.10.azuredatabricks.net
databricks auth login --host https://adb-2533506717590470.10.azuredatabricks.net- Realize o login no Databricks CLI em uma máquina local:
databricks auth login --host https://adb-2533506717590470.10.azuredatabricks.net
- Copie o arquivo de configuração gerado (
~/.databrickscfg) para o Codespaces (por SCP, SFTP ou manualmente). - O arquivo deve ser colocado em
/home/codespace/.databrickscfg.
Exemplo de conteúdo do arquivo:
[DEFAULT]
host = https://adb-2533506717590470.10.azuredatabricks.net
token = dapiXXXXXXXXXXXXXXXXXXXXXXXXObservação: O token é gerado durante o login OAuth ou pode ser criado manualmente no portal Databricks.
Atenção: Desde julho de 2024, o Azure alterou o fluxo de login para contas pessoais e administradores globais. Agora, o acesso ao console e ao Databricks deve ser feito usando o usuário externo criado automaticamente pelo Azure, que contém
#EXT#no nome (exemplo:anselmoborges_gmail.com#EXT#@anselmoborgesgmail.onmicrosoft.com). Esse usuário externo possui as permissões de Global Administrator e Databricks Account Admin. O login com a conta original (ex: seuemail@outlook.com) pode gerar erro de permissão.
Recomenda-se configurar o Databricks CLI para usar o usuário externo com
#EXT#para garantir acesso total aos recursos.
- Acesse o portal Databricks (https://accounts.azuredatabricks.net) com o usuário externo (
#EXT#). - No menu lateral, vá em "Unity Catalog" > "Metastores".
- Clique em "Create Metastore" e preencha:
- Nome:
metastore-rescue - Storage root:
abfss://meta@sametarescue.dfs.core.windows.net/ - Região:
eastus
- Nome:
- Após criar, associe o metastore aos dois workspaces criados (dev e prd).
Observação: Esse procedimento garante que o metastore seja criado corretamente e atribuído aos workspaces, mesmo se houver problemas com o CLI.
Esses comandos configuram o metastore do Unity Catalog apontando para o storage e container corretos, garantindo governança centralizada de dados.
O primeiro vídeo da série abordará como configurar o Visual Studio Code para trabalhar com:
- Databricks
- Databricks SQL
- Databricks CLI
Este vídeo fornecerá um guia passo a passo para preparar seu ambiente de desenvolvimento local.
- alteracao video