# Azure Bicep [![hackmd-github-sync-badge](https://hackmd.io/Q1SQ_fQFTuO_cLrdxY4Z_Q/badge)](https://hackmd.io/Q1SQ_fQFTuO_cLrdxY4Z_Q) ###### tags: `azure` `iac` `devops` `cloud` ## O que é Azure Bicep? Azure Bicep é uma linguagem específica de domínio (DSL) que implanta recursos do Azure usando sintaxe declarativa. Até agora, quando o IaC era usado no Azure, era comum usar o modelo do Azure Resource Manager (modelo ARM) . No entanto, este modelo ARM é muito detalhado. Os modelos ARM são escritos em JSON, portanto, tendem a ser longos e difíceis de manejar. Bicep é uma abstração do template ARM redundante e pode ser convertido como template Bicep ⇔ ARM. ## Instale o Azure Bicep Agora, vamos instalá-lo agora! O Bicep utiliza a CLI do Azure. Digite o seguinte comando no prompt de comando do ambiente onde o CLI está instalado. ```powershell az bicep install ``` Sim é isso. Se a versão for antiga, não pode ser instalada. Se falhar, atualize a versão CLI. Além disso, o VSC tem uma extensão para bíceps, para que você possa escrever um programa facilmente usando-o. A extensão é chamada de [Bicep] ## Tente implantar com o Azure Bicep Vamos escrever Bicep agora. Vamos criar vnet, por exemplo. ```terraform resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = { name: 'name' location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ '10.0.0.0/16' ] } subnets: [ { name: 'Subnet-1' properties: { addressPrefix: '10.0.0.0/24' } } { name: 'Subnet-2' properties: { addressPrefix: '10.0.1.0/24' } } ] } } ``` A sintese me lembrou bastante o Terraform e o CloudFormation. ## Vamos implantá-lo agora. Especifique o resource group "vnet" e implemente "test.bicep" que salvou o código vnet bicep criado anteriormente com o comando az. ```powershell az deployment group create --resource-group vnet --template-file test.bicep ``` Sim é isso. Se você escrever isso em um modelo ARM seria assim: ```json { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "virtualNetworks_sample_vnet_name": { "defaultValue": "sample-vnet", "type": "String" } }, "variables": {}, "resources": [ { "type": "Microsoft.Network/virtualNetworks", "apiVersion": "2020-11-01", "name": "[parameters('virtualNetworks_sample_vnet_name')]", "location": "japaneast", "properties": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/16" ] }, "subnets": [ { "name": "Subnet-1", "properties": { "addressPrefix": "10.0.0.0/24", "delegations": [], "privateEndpointNetworkPolicies": "Enabled", "privateLinkServiceNetworkPolicies": "Enabled" } }, { "name": "Subnet-2", "properties": { "addressPrefix": "10.0.1.0/24", "delegations": [], "privateEndpointNetworkPolicies": "Enabled", "privateLinkServiceNetworkPolicies": "Enabled" } } ], "virtualNetworkPeerings": [], "enableDdosProtection": false } }, { "type": "Microsoft.Network/virtualNetworks/subnets", "apiVersion": "2020-11-01", "name": "[concat(parameters('virtualNetworks_sample_vnet_name'), '/Subnet-1')]", "dependsOn": [ "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworks_sample_vnet_name'))]" ], "properties": { "addressPrefix": "10.0.0.0/24", "delegations": [], "privateEndpointNetworkPolicies": "Enabled", "privateLinkServiceNetworkPolicies": "Enabled" } }, { "type": "Microsoft.Network/virtualNetworks/subnets", "apiVersion": "2020-11-01", "name": "[concat(parameters('virtualNetworks_sample_vnet_name'), '/Subnet-2')]", "dependsOn": [ "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworks_sample_vnet_name'))]" ], "properties": { "addressPrefix": "10.0.1.0/24", "delegations": [], "privateEndpointNetworkPolicies": "Enabled", "privateLinkServiceNetworkPolicies": "Enabled" } } ] } ``` O Azure tem evoluído para práticas de [IaC mais modernas](https://docs.microsoft.com/pt-br/azure/azure-resource-manager/bicep/overview), espero que continuem nesse caminho =D Vlw Flw