参数化部署脚本
在上一单元中,你向 Azure 资源管理器 (ARM) 模板添加了一些自定义行为,以将启动内容暂存在新应用程序环境的存储帐户中。 这为应用程序团队解决了一个特定问题。
使部署脚本更具适应性的方法之一是向脚本提供数据。 你有两个选项:命令行参数和环境变量。
注意
本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。
使用命令行参数
将数据传递到 deploymentScripts
资源的第一个选项是自定义 arguments
属性。 arguments
属性采用参数字符串,就像在命令行中提供的参数一样。 会将这些参数提供给将运行脚本的 Azure 容器实例的 command
属性。
注意
会进行一些分析,因此请测试 arguments
属性的一些变体。 它将分解成字符串数组,分解方式与 Windows shell 分析命令行的方式相同。
"properties": {
"arguments": "-Name Learner",
"azPowerShellVersion": "3.0",
"scriptContent": "
param ([string]$Name)
$output = \"Hello $Name!\"
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"retentionInterval":"P1D"
}
properties: {
arguments: '-Name Learner'
azPowerShellVersion: '3.0'
scriptContent: '''
param ([string]$Name)
$output = "Hello $Name!"
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
'''
retentionInterval: 'P1D'
}
使用环境变量
第二个选项是创建脚本可访问的环境变量。
"properties": {
"arguments": "-Name Learner",
"environmentVariables:": [
{
"name": "Subject",
"value": "Deployment Scripts"
}
],
"azPowerShellVersion": "3.0",
"scriptContent": "
param ([string]$Name)
$output = \"Hello $Name!\"
$output += \"Learning about $env:Subject can be very helpful in your deployments.\"
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"retentionInterval":"P1D"
}
properties: {
arguments: '-Name Learner'
environmentVariables: [
{
name: 'Subject'
value: 'Deployment Scripts'
}
]
azPowerShellVersion: '3.0'
scriptContent: '''
param ([string]$Name)
$output = "Hello $Name!"
$output += "Learning about $env:Subject can be very helpful in your deployments."
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
'''
retentionInterval: 'P1D'
}
使用环境变量的好处之一是,你可以将 secureValue
选项用于可能需要传递到部署脚本的机密。
"properties": {
"arguments": "-Name Learner",
"environmentVariables:": [
{
"name": "Subject",
"value": "Deployment Scripts"
},
{
"name": "MySecretValue",
"secureValue": "PleaseDoNotPrintMeToTheConsole!"
}
],
"azPowerShellVersion": "3.0",
"scriptContent": "
param ([string]$Name)
$output = \"Hello $Name!\"
$output += \"Learning about $env:Subject can be very helpful in your deployments.\"
$output += \"Secure environment variables (like $env:MySecretValue) are only secure if you keep them that way.\"
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"retentionInterval":"P1D"
}
properties: {
arguments: '-Name Learner'
environmentVariables: [
{
name: 'Subject'
value: 'Deployment Scripts'
}
{
name: 'MySecretValue'
secureValue: 'PleaseDoNotPrintMeToTheConsole!'
}
]
azPowerShellVersion: '3.0'
scriptContent: '''
param ([string]$Name)
$output = "Hello $Name!"
$output += "Learning about $env:Subject can be very helpful in your deployments."
$output += "Secure environment variables (like $env:MySecretValue) are only secure if you keep them that way."
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
'''
retentionInterval: 'P1D'
}
传递参数
正如你所了解的,可以直接在部署脚本的属性中设置参数值。 对于可以传递的值,还有其他几个选项。 可以使用来自以前创建的资源的动态值、模板中声明的变量或在部署时直接传递到模板的参数。
可通过 arguments
或 environmentVariables
属性中的模板函数实现这些方案。 可以使用任何 ARM 模板函数来访问值,并将它们传递到模板。 这些函数包括 reference
、parameters
或 variables
。
可通过 arguments
或 environmentVariables
属性中的模板函数实现这些方案。 可以使用任何 Bicep 功能来访问值,并将它们传递到模板,例如,通过使用其他资源的符号名称来引用其属性,以及引用参数和变量。