將部署指令碼參數化
在上一個單元中,您在 Azure Resource Manager (ARM) 範本中新增一些自訂行為,將新應用程式環境的起始內容暫存在儲存體帳戶中。 這為一個應用程式小組解決特定的問題。
若要讓部署指令碼更具適應性,方法之一就是提供資料給指令碼。 有兩個選項:命令列引數和環境變數。
注意
本單元中的命令僅用於示範概念。 請先不要執行命令。 您很快就會在此練習所學到的內容。
使用命令列引數
為了將資料傳給 deploymentScripts
資源,第一個選項是自訂 arguments
屬性。 arguments
屬性接受一串引數,就像您在命令列提供的引數一樣。 這些引數提供給 Azure 容器執行個體 (將執行指令碼) 的 command
屬性。
注意
將會進行剖析,請測試 arguments
屬性的一些變化。 此屬性會分解成字串陣列,就像 Windows 殼層剖析命令列一樣。
"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 功能來存取值並傳入範本中,例如使用符號名稱來參考其他資源的屬性,以及參考參數和變數。