一,引言

  当我们在使用 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

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

Azure Bicep(三)变量控制的更多相关文章

  1. js函数只执行一次,函数重写,变量控制与闭包三种做法

    一.情景需求 调用后台接口需要附带token信息,那么在每个请求的头部添加token的做法就不太优雅了:一个网站请求100次,那就得写添加100次token,假设某天接口有所变动,改起来就十分麻烦了. ...

  2. Azure Bicep(二)语法简介

    一,引言 上一篇文章有介绍到 Azure Bicep 的部署问题,文中也只是演示部署范围为 Sub,并将演示的 Azure Resource Group 到 Azure.给定 Bicep 文件,可以部 ...

  3. Spring使用环境变量控制配置文件加载

    项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...

  4. Swift中文教程(三)--流程控制

    原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制语句和循环语句中,小括号是可选的,但花 ...

  5. Spring使用环境变量控制配置文件加载(转)

    项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...

  6. 关于a和b不用第三变量交换值的问题

    今天在如鹏网(不是发广告)上看到一道题,题目很难就不说了,但是老师给的提示的题目却让我感兴趣,就是标题的内容. 题目是把a与b做异或比较从而实现不通过第三变量来交换a和b的数值答案是这样的: a=a^ ...

  7. JAVA交换两个变量的值-(不使用第三变量)

    以下方法的根本原理就是: 借助第三个变量 c = a; a = b; b = c; 运算符-不借助第三变量: a = a+b; b = a-b; a = a-b; 为运算符-不借助第三个变量: (此种 ...

  8. python 学习之 基础篇三 流程控制

    前言: 一. python中有严格的格式缩进,因为其在语法中摒弃了“{}”来包含代码块,使用严格的缩进来体现代码层次所以在编写代码的时候项目组要严格的统一器缩进语法,一个tab按键设置为四个空格来缩进 ...

  9. C# 8.0和.NET Core 3.0高级编程 分享笔记三:控制流程和转换类型

    控制流程和转换类型 本章的内容主要包括编写代码.对变量执行简单的操作.做出决策.重复执行语句块.将变量或表达式值从一种类型转换为另一种类型.处理异常以及在数值变量中检查溢出. 本章涵盖以下主题: 操作 ...

随机推荐

  1. vscode 1.32.x按下鼠标左键无法拖曳选择,而旧一点的版本1.30.2可以

    最近升级vscode后,无法通过鼠标左键选择文本,恢复到旧版本1.30.2就可以了. 另外:1.32.x和1.31.1都不正常 进一步测试发现:在中文输入法下(无论中英输入模式),都有问题:切换到纯英 ...

  2. 用tinyxml2读写xml文件_C++实现

    下载源代码 开源代码github地址: https://github.com/leethomason/tinyxml2 添加工程文件 将源代码目录中 tinyxml2.h 和 tinyxml2.cpp ...

  3. AFL++初探-手把手Fuzz一个PDF解析器

    CVE-2019-13288 目前漏洞在正式版本已经被修复,本文章仅供学习Fuzz过程,不存在漏洞利用的内容 这是一个pdf查看器的漏洞,可能通过精心制作的文件导致无限递归,由于程序中每个被调用的函数 ...

  4. shell循环语句until

    until 条件 do 执行命令 done until 循环与 while 循环在处理方式上刚好相反. 当条件成立的时候,停止循环.

  5. charles 抓包修改app页面数据

    1,首先给手机安装Charles证书,安装官方的来,在无线网配置项目,输入手动代理地址,后开启飞行模式刷新网络, 2,在浏览器输入chls.pro/ssl 下载并安装证书,此时电脑端charles 会 ...

  6. Spring5(六)——AspectJ(xml)

    一.AspectJ 1.介绍 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,也可以说 AspectJ 是一个基于 Java 语言的 AOP 框架.通常我们在 ...

  7. CentOS8部署tftp

    tftp:简单文本传输协议,而ftp:文本传输协议.可以把tftp看成是ftp的精简版.tftp用于免登录传输小文件,tftp服务端监听在udp协议的69端口tftp简单的工作原理: tftp服务端与 ...

  8. PHP中的文件系统函数(二)

    这次我们来学习的是一些不是太常用,但却也非常有用的一些函数.它们中有些大家可能见过或者使用过,有一些可能就真的没什么印象了.它们都是 PHP 中文件系统相关操作函数的一部分.存在即合理,或许只是我们的 ...

  9. css3 flex的IE8浏览器兼容问题

    我这是进行判断浏览器 css判断ie版本才引用样式或css文件 <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> &l ...

  10. linux centos windows服务器修改数据库最大连接数的方法

    1.可查询数据库最大连接数 show variables like '%max_connections%'; 2.修改数据库最大连接数,最大限制上限为16384. 找到数据库配置文件my.cnf,在配 ...