Bicep: infraestrutura Azure como código — do zero à produção
João Barros
13 de November de 2024
1 min de leitura
O Bicep é a linguagem de IaC (Infrastructure as Code) da Microsoft para Azure, com sintaxe mais limpa que ARM templates puros, compilação automática para JSON e integração nativa com Azure CLI e DevOps.
Estrutura básica de um ficheiro Bicep
// main.bicep
@description('Ambiente de deployment')
@allowed(['dev', 'test', 'prod'])
param environment string
@description('Localização dos recursos')
param location string = resourceGroup().location
var prefix = 'bconcepts-${environment}'
// Recurso: Storage Account
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: 'sta${replace(prefix, '-', \")}'
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
properties: {
isHnsEnabled: true // ADLS Gen2
minimumTlsVersion: 'TLS1_2'
}
}
// Output para referenciar noutros módulos
output storageAccountId string = storageAccount.id
Módulos — reutilização de componentes
// modules/keyvault.bicep
param name string
param location string
param principalId string
resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = {
name: name
location: location
properties: {
tenantId: subscription().tenantId
sku: { name: 'standard', family: 'A' }
enableRbacAuthorization: true
enableSoftDelete: true
softDeleteRetentionInDays: 90
}
}
// main.bicep — usar o módulo
module keyVault 'modules/keyvault.bicep' = {
name: 'deploy-keyvault'
params: {
name: 'kv-${prefix}'
location: location
principalId: adf.identity.principalId // dar acesso ao ADF
}
}
Deploy com Azure CLI
az group create --name rg-analytics-prod --location westeurope
az deployment group create \
--resource-group rg-analytics-prod \
--template-file main.bicep \
--parameters environment=prod \
--what-if # pré-visualizar alterações antes de aplicar
Pipeline CI/CD (GitHub Actions)
name: Deploy Infrastructure
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with: { creds: ${{ secrets.AZURE_CREDENTIALS }} }
- uses: azure/arm-deploy@v2
with:
resourceGroupName: rg-analytics-prod
template: ./infra/main.bicep
parameters: environment=prod
Conclusão
Bicep é a escolha natural para IaC em Azure — menos verboso que ARM, mais nativo que Terraform para recursos Azure puros. Com módulos, a infra é reutilizável e testável. Adicione --what-if sempre antes de um deploy de produção.