Skip to main content

Azure Bicep介绍

分类:  Azure指南 标签:  #Azure #基础 #Azure Cloud Architecting #Azure入门 发布于: 2023-05-28 10:09:13

Bicep是一个专用领域的编程语言(DSL: Domain-specific Language), 使用描述性语法部署Azure资源。它提供了简明的语法,可靠的类型,支持代码重用。Bicep希望提供给用户在基础架构即代码的方案上有更好的体验。

Tips
基础架构即代码是一种概念,指的是向云环境迁移和部署应用的时候,运维和开发之间由于云平台的特性已经模糊了之前的壁垒,运维也需要使用代码的方式来部署在云平台上的资源,可以将这些代码放入版本管理工具,同时和DevOps集成起来。

你可以使用Bicep代替Json来开发ARM模板并部署Azure资源。使用Json语法创建ARM模板很多时候需要很复杂的表达式,Bicep语法降低了这种复杂性,提升开发体验,而且它具有和使用Json模板一样的能力,另外本质上Bicep使用工具将Bicep文件转化为Json格式的模板文件。所以它不是一个通用的编程语言,它的目的就是为用户定义Azure资源和资源的属性,而不需要像Json格式的ARM模板一样写太多的命令宣告以及参数设置等等。

如果你想了解Bicep的动态,您可以参考这里:https://github.com/Azure/bicep

Get Started

为了开始使用Bicep我们需要安装一个开发环境,请按照如下的步骤来设置你的Bicep环境

编辑器

我们首先冲编辑器开始,毕竟要编写一个Bicep项目,首先需要一个合适的编辑器,我们推荐:

  • Visual Studio Code - 这个就不说了。可以从这里下载来安装:https://code.visualstudio.com/
  • 安装Bicep扩展: 在VS Code里搜索Bicep, 如下图:

需要注意的是Bicep项目文件扩展名是.bicep

部署环境

要部署bicep的文件,我们需要安装Bicep的工具。有很多种方法可以安装。详细的指南您可以参考这里:https://docs.microsoft.com/zh-cn/azure/azure-resource-manager/bicep/install, 我们这里只列举在windows和Linux下如何安装Bicep的工具。

Windows

在Windows下有很多种方式可以安装这个工具:

直接下载安装

Windows下可以直接下载Bicep的安装包:https://github.com/Azure/bicep/releases/latest/download/bicep-setup-win-x64.exe, 下载后,阿庄,并将可执行Bicep CLI添加到用户路径里,就完成了安装。

使用Chocolatey安装

使用Chocolatey安装就更简单了:

choco install bicep
使用Winget安装
winget install -e --id Microsoft.Bicep
使用PowerShell安装
# Create the install folder
$installPath = "$env:USERPROFILE\.bicep"
$installDir = New-Item -ItemType Directory -Path $installPath -Force
$installDir.Attributes += 'Hidden'
# Fetch the latest Bicep CLI binary
(New-Object Net.WebClient).DownloadFile("https://github.com/Azure/bicep/releases/latest/download/bicep-win-x64.exe", "$installPath\bicep.exe")
# Add bicep to your PATH
$currentPath = (Get-Item -path "HKCU:\Environment" ).GetValue('Path', '', 'DoNotExpandEnvironmentNames')
if (-not $currentPath.Contains("%USERPROFILE%\.bicep")) { setx PATH ($currentPath + ";%USERPROFILE%\.bicep") }
if (-not $env:path.Contains($installPath)) { $env:path += ";$installPath" }
# Verify you can now access the 'bicep' command.
bicep --help
# Done!

Linux下安装Bicep

Linux下通过如下命令来安装,假设你的shell是Bash:

# Fetch the latest Bicep CLI binary
curl -Lo bicep https://github.com/Azure/bicep/releases/latest/download/bicep-linux-x64
# Mark it as executable
chmod +x ./bicep
# Add bicep to your PATH (requires admin)
sudo mv ./bicep /usr/local/bin/bicep
# Verify you can now access the 'bicep' command
bicep --help
# Done!

快速入门

我们尝试使用 VS Code来创建Bicep文件带领大家快速入门。

在开始之前您需要:

创建一个main.bicep

在您的系统种创建一个目录:MyProjects\Bicep\Demo1, 然后使用vs code在这个目录下创建一个文件main.bicep,使用VS Code打开这个文件之后,会尝试启动bicep的扩展,如果遇到下述问题:
Bicep Problem

你可以参考这个文档解决:https://github.com/dotnet/vscode-dotnet-runtime/blob/main/Documentation/troubleshooting-runtime.md#install-script-timeouts

也可以使用本机已经有的.Net来配置,只需要在vs code里修改配置:dotnetAcquisitionExtension.existingDotnetPath, 改为下述内容:

"dotnetAcquisitionExtension.existingDotnetPath": [

    {
        "extensionId": "ms-azuretools.vscode-bicep",
        "path": "C:\\Program Files\\dotnet\\dotnet.exe"
    },
    {
        "extensionId": "msazurermtools.azurerm-vscode-tools",
        "path": "C:\\Program Files\\dotnet\\dotnet.exe"
    }
],

如果指定了.Net环境还是不行(我相信这是一个Bug), 那么只能乖乖的让它下载了,在设置里把dotnetAcquisitionExtension.installTimeoutValue, 设置得足够长,例如30分钟:

{
    "dotnetAcquisitionExtension.installTimeoutValue": 1800
}

实在不行就再改长一些。总觉这里是一个很大的问题,希望大家在安装的时候,没有这些问题。

总之安装和配置好VS code的扩展之后,我们就可以开始了。

在 main.bicep 中,键入 vnet。 从列表中选择“res-vnet”,然后按 Tab 或 Enter 键。


Bicep 文件现在包含以下代码:

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'
        }
      }
    ]
  }
}

此代码片段包含用于定义虚拟网络的所有值。 但是,你可以根据自己的要求修改此代码。 例如,name 并不是很适合用作虚拟网络的名称。 将 name 属性更改为 examplevnet。

name: 'examplevnet'

你可以部署此 Bicep 文件,但在部署之前,我们将添加一个参数和存储帐户。

添加参数

现在,我们要添加一个用作存储帐户名称的参数。 在虚拟网络上方添加几行,然后键入:

param storageName

在 storageName 后面添加空格时,可以发现 Intellisense 提供了该参数可用的数据类型。


选择“string”。

你的参数如下:

param storageName string

此参数可以正常工作,但存储帐户对名称的长度施加了限制。 该名称必须至少包含 3 个字符,并且不能超过 24 个字符。 可以通过为参数添加修饰器来指定这些要求。
在参数上方添加一行,然后键入 @。 你将看到可用的修饰器。 可以看到,minLength 和 maxLength 都有修饰器 。


如下所示添加这两个修饰器并指定字符限制:

@minLength(3)
@maxLength(24)
param storageName string

还可以添加参数的说明。 请包含相应的信息,帮助部署 Bicep 文件的人员了解要提供哪个值

@minLength(3)
@maxLength(24)
@description('Provide a name for the storage account. Use only lower case letters and numbers. The name must be unique across Azure.')
param storageName string

添加资源

我们将使用 Intellisense 来设置值,而不是使用代码片段来定义存储帐户。 与手动键入值相比,使用 Intellisense 完成此步骤要方便得多。
使用 resource 关键字定义资源。 在虚拟网络下方,键入 resource exampleStorage:

resource exampleStorage

exampleStorage 是要部署的资源的符号名称。 它可让你轻松在 Bicep 文件的其他部分引用该资源。
在该符号名称的后面添加空格时,会显示资源类型的列表。 不断键入 storage,直到可以从可用选项中选择它。


选择“Microsoft.Storage/storageAccounts”后,你将看到可用的 API 版本。 选择最新版本。


在资源类型的单引号后面,添加 = 和一个空格。 你将看到用于为资源添加属性的选项。 选择“required-properties”。


此选项用于添加部署时所需的所有资源类型属性。 选择此选项后,存储帐户具有以下属性:

resource exampleStorage 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name:
  location:
  sku: {
    name:
  }
  kind:

}

即将完成。 只需为这些属性提供值。
同样,Intellisense 可为你提供帮助。 对于 name,请提供包含存储帐户名称的参数。 对于 location,请将其设置为 eastus。 添加 SKU 名称和类型时,Intellisense 会显示有效选项。
完成后,你将获得:

@minLength(3)
@maxLength(24)
param storageName string

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = {
  name: 'examplevnet'
  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'
        }
      }
    ]
  }
}

resource exampleStorage 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: storageName
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

关于Bicep的详细语法,您可以参考:https://docs.microsoft.com/zh-cn/azure/azure-resource-manager/bicep/file

可视化查看

可以查看文件中资源的表示形式。
在左上角,选择可视化工具按钮以打开 Bicep 可视化工具。


可视化工具显示 Bicep 文件中定义的资源以及资源依赖关系信息。 本快速入门中定义的两个资源不存在依赖关系,因此你在这两个资源之间看不到连接器。

部署Bicep文件

若要部署已创建的文件,请打开 PowerShell 或 Azure CLI。 如果要使用集成的 Visual Studio Code 终端,请选择 ctrl + ` 组合键。 将当前目录更改为 Bicep 文件所在的位置。

这里使用Azure Cli

az group create --name exampleRG --location eastus
az deployment group create --resource-group exampleRG --template-file main.bicep --parameters storageName={your-unique-name}

也可以使用Power shell

New-AzResourceGroup -Name exampleRG -Location eastus
New-AzResourceGroupDeployment -ResourceGroupName exampleRG -TemplateFile ./main.bicep -storageName "{your-unique-name}"