M01 — Resource Group + Storage Account
Duração: 1h Pré-requisitos: M00 concluído (CLI logado, naming definido). Objetivo: criar o container lógico (Resource Group) e o Storage Account com Hierarchical Namespace habilitado — base para o ADLS Gen2 do M02.
Conceitos antes de clicar
Resource Group (RG)
- “Pasta” lógica que agrupa recursos relacionados.
- Regra de ouro: 1 RG por (projeto × ambiente). Ex.:
rg-de-dev-brs,rg-de-prd-brs. - Vantagem: deletando o RG, você deleta tudo dentro. Isso vai salvar sua conta de faturamento várias vezes.
Storage Account
- Conta de armazenamento “raiz” — dentro dela cabem Blob, File, Queue, Table e (com HNS ligado) Data Lake Gen2.
- Nome é global no Azure inteiro (não só na sua sub). Tem que ser único.
- 3-24 chars, só minúsculas e números, sem hífen.
Hierarchical Namespace (HNS)
- Flag que transforma um Blob Storage comum em ADLS Gen2.
- Habilita: pastas reais (não só prefixos), ACLs POSIX, melhor performance para analytics.
- Só pode ser ligado na criação. Se esquecer, tem que recriar.
SKU / Replicação
| SKU | Replicação | Quando usar |
|---|---|---|
| Standard_LRS | 3 cópias no mesmo datacenter | Dev/lab (mais barato) |
| Standard_ZRS | 3 cópias em 3 zonas | Prod sem cross-region |
| Standard_GRS | LRS + 3 cópias em outra região | Prod com DR |
| Premium_LRS | SSD, ZRS opcional | Workloads de baixa latência |
Para a trilha: Standard_LRS (centavos por GB).
Parte 1 — Via Azure CLI (rápido, reprodutível)
Abra PowerShell. Defina variáveis (substitua w pelas suas iniciais):
$PROJ = "de"$INIC = "w"$AMB = "dev"$REG = "brazilsouth"$REGS = "brs"
$RG = "rg-$PROJ-$AMB-$REGS"$ST = "st$PROJ$INIC$AMB$REGS" # sem hífen, max 24 charsConfirma:
Write-Output "RG = $RG"Write-Output "ST = $ST"Se $ST passar de 24 chars, encurta as iniciais.
Passo 1.1 — Criar o Resource Group
az group create ` --name $RG ` --location $REG ` --tags projeto=$PROJ ambiente=$AMB owner=$INIC trilha=azure-e2eValidar:
az group show -n $RG --query "{name:name, loc:location, state:properties.provisioningState}" -o tableEsperado:
Name Loc State--------------- ------------ ---------rg-de-dev-brs brazilsouth SucceededPasso 1.2 — Criar Storage Account com Gen2 ligado
A flag chave é --hns true (Hierarchical Namespace):
az storage account create ` --name $ST ` --resource-group $RG ` --location $REG ` --sku Standard_LRS ` --kind StorageV2 ` --hns true ` --access-tier Hot ` --min-tls-version TLS1_2 ` --allow-blob-public-access false ` --tags projeto=$PROJ ambiente=$AMB trilha=azure-e2eSe der erro is already taken: o nome global colidiu. Acrescente data (stdewdevbrs20260516) ou suas iniciais expandidas.
Validar:
az storage account show -n $ST -g $RG --query "{name:name, hns:isHnsEnabled, kind:kind, sku:sku.name}" -o tableEsperado:
Name Hns Kind Sku------------- ----- ---------- -------------stdewdevbrs True StorageV2 Standard_LRSPasso 1.3 — Pegar a chave (vai usar nos próximos módulos)
$STKEY = az storage account keys list -g $RG -n $ST --query "[0].value" -o tsvWrite-Output "Chave salva em `$STKEY (mantém só na sessão, não cola em arquivo)"Importante: a chave dá acesso total ao storage. Nunca commite em Git, nunca cole em chat. No M03 vamos guardar em Key Vault.
Parte 2 — Verificação no portal (didática)
Só para você ver onde fica visualmente:
- Acesse https://portal.azure.com.
- Topo da tela → digite
rg-de-dev-brs→ abre o Resource Group. - Você vê 1 recurso dentro: o Storage Account.
- Clique no Storage → menu esquerdo → Containers: ainda vazio. No próximo módulo (M02) vamos criar bronze/silver/gold aqui.
- Menu esquerdo → Configuration → procure “Hierarchical namespace”: deve estar Enabled.
Parte 3 — Custo & boas práticas
Quanto custa este módulo
- Storage vazio: USD ~0,02/dia (essencialmente zero).
- O custo aparece quando você grava dados (M02 em diante) e quando faz transações.
Tag everything
Note que usei --tags em ambos os comandos. Sempre marque seus recursos. Em empresas reais, billing e governança dependem de tags.
Locks (opcional, mas vale conhecer)
Para evitar deletar produção sem querer:
# NÃO faça isto agora, é só pra você saber que existe:# az lock create --name no-delete --lock-type CanNotDelete --resource-group $RGPegadinhas
- Esqueci
--hns true: cria como Blob comum, NÃO é ADLS Gen2. Solução: deletar e recriar. Verifique sempreisHnsEnabled: Trueapós criação. --allow-blob-public-access true(default em contas antigas): qualquer um da internet pode acessar. Sempre false em dev/prd.--min-tls-version TLS1_0(default em SKU velho): obsoleto. Use TLS1_2.- Região errada: criei em
eastuspor engano. Latência para Brasil aumenta. Use semprebrazilsouthoubrazilsoutheast(Rio). - Storage account “já existe”: você criou ontem e esqueceu. Liste com
az storage account list -g $RG -o table.
Equivalente em Bicep (opcional — para o M07 vai ficar útil)
Se quiser já se acostumar com IaC, crie storage.bicep:
param location string = 'brazilsouth'param storageName stringparam tags object = { projeto: 'de' ambiente: 'dev' trilha: 'azure-e2e'}
resource sa 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageName location: location sku: { name: 'Standard_LRS' } kind: 'StorageV2' tags: tags properties: { isHnsEnabled: true accessTier: 'Hot' minimumTlsVersion: 'TLS1_2' allowBlobPublicAccess: false }}Deploy:
az deployment group create -g $RG --template-file storage.bicep --parameters storageName=$STNão obrigatório agora. Mas no M07 a gente formaliza.
Checklist de saída
-
az group show -n rg-de-dev-brsretornaSucceeded. - Storage Account criado com
isHnsEnabled: True. - No portal, o storage aparece dentro do RG correto.
- Você salvou (mentalmente ou em local seguro) o nome exato do storage — vai usar muito no M02/M03.
- Não commitou a chave (
$STKEY) em lugar nenhum.