DEV Community

Luiz Bernardo
Luiz Bernardo

Posted on

Azure Bicep

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.

az bicep install
Enter fullscreen mode Exit fullscreen mode

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.

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'
        }
      }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

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.

az deployment group create --resource-group vnet --template-file test.bicep
Enter fullscreen mode Exit fullscreen mode

Sim é isso.

Se você escrever isso em um modelo ARM seria assim:

{
    "$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"
            }
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

O Azure tem evoluído para práticas de IaC mais modernas, espero que continuem nesse caminho =D

Vlw Flw

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay