Azure Bicep
Tags: azure, iac, devops, programming
Published: 2021-12-20 22:07:27

## 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