(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Infraestrutura como Código & DevOps
Infraestrutura como Código & DevOps 1 min

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.

Partilhar: