Bicep: infraestructura Azure como código — de cero a producción
João Barros
13 de November de 2024
1 min de lectura
Bicep es el lenguaje de IaC (Infrastructure as Code) de Microsoft para Azure, con una sintaxis más limpia que los ARM templates puros, compilación automática a JSON e integración nativa con Azure CLI y DevOps.
Estructura básica de un fichero Bicep
// main.bicep
@description('Entorno de deployment')
@allowed(['dev', 'test', 'prod'])
param environment string
@description('Ubicación de los 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 en otros módulos
output storageAccountId string = storageAccount.id
Módulos — reutilización 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 el módulo
module keyVault 'modules/keyvault.bicep' = {
name: 'deploy-keyvault'
params: {
name: 'kv-${prefix}'
location: location
principalId: adf.identity.principalId // dar acceso al ADF
}
}
Deploy con 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 # previsualizar los cambios 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
Conclusión
Bicep es la elección natural para IaC en Azure — menos verboso que ARM, más nativo que Terraform para recursos Azure puros. Con módulos, la infraestructura es reutilizable y testeable. Añada siempre --what-if antes de un deploy de producción.