一,引言
当我们在使用 Azure Bicep 的时候会出现以下几个问题:
1)文件中有很多地方会重用很多相同的值
2)输入参数可以在统一的地方进行修改
带着这些问题,我们开始今天的内容,学习如何在 Bicep 中使用变量。
--------------------我是分割线--------------------
1,Azure Bicep 开发利器
2,Azure Bicep(二)语法简介
3,Azure Bicep(三)变量控制
二,正文
1,语法
在 Bicep 中声明变量并给其初值时非常简单的。如下图所示,为标准的参数赋值的语句
param runtime string='.NET 6'
Bicep 语句中的变量的定义类似于其他语言,但是也有它的奇特之处,我称它为 “Azure Bicep 语法糖”
var myString = 'some string value' var myNull = null var location = resourceGroup().location
以上的语句中,我们不难看出,
第一个变量没有类型
第二个变量没有类型,而且变量默认值为 null
第三个变量的默认值为表达式
2,使用参数,变量
常见的情况时在变量声明中使用参数
//targetScope='resourceGroup' Default Deplay Target param webAppName string = toLower('cnbateblogweb') param webSiteName string=toLower('${webAppName}-appservice')
变量也是一样的,但是需要注意的时,我们不能在变量使用的时候引入循环,这个是不允许的
var name = 'Allen' var str= 'Hello, ${name}!'
3,资源属性
除了使用参数和变量之外,还可以使用资源属性来创建变量 planid
//targetScope='resourceGroup' Default Deplay Target param webAppName string = toLower('cnbateblogweb') param webSiteName string = toLower('${webAppName}-appservice') param runtime string = '.NET 6' param webAppPlanName string = toLower('${webAppName}-appserviceplan') param location string = resourceGroup().location // Location for all resources resource appServicePlan 'Microsoft.Web/serverfarms@2020-12-01' = { name: webAppPlanName location: location sku: { name: 'F1' capacity: 1 } } var planid = '${appServicePlan.id}' resource webApplication 'Microsoft.Web/sites@2018-11-01' = { name: webSiteName location: location properties: { serverFarmId: planid siteConfig: { linuxFxVersion: runtime } } }
4,模块
如果模块在 outpus 部分中返回一些值,它们也可以用于变量声明。模块在输出中返回完整的存储帐户对象,然后我们在主模板中使用这些对象
main.bicep
module stg 'storageaccount/storage.bicep' = { name: 'storageDeployment' params: { storageAccountName: 'cnbateblogsa' } } var myTag = '${stg.outputs.storageAccount.kind}-${stg.outputs.storageAccount.sku.name}'
storage.bicep
param storageAccountName string resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = { name: storageAccountName location: resourceGroup().location kind: 'StorageV2' sku: { name: 'Standard_LRS' } } output storageAccount object = stg
5,循环
使用循环来初始化变量,并且可以使用循环定义多个资源模块
// Creating a variable using a for-loop var secretsValues = [for i in range(0, 3): { name: 'secret${i}' value: 'supersecretvalue${i}' }] // Assuming that a key vault already exists resource kv 'Microsoft.KeyVault/vaults@2019-09-01' existing = { name: 'kv-contoso' } // Using variable to create multiple resources resource secrets 'Microsoft.KeyVault/vaults/secrets@2019-09-01' = [for secret in secretsValues: { name: secret.name parent: kv properties: { value: secret.value } }]
三,结尾
今天我们介绍了Azure Bicep的变量的相关用法。变量用于简化 Bicep 文件开发。 请定义包含复杂表达式的变量,而不必在整个 Bicep 文件中重复使用复杂的表达式。 然后,在整个 Bicep 文件中根据需要使用该变量。资源管理器会在启动部署操作之前解析变量。 在 Bicep 文件中所有使用该变量的位置,资源管理器都会将其替换为解析的值。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还包含,并且指出不足之处!!!!!
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。