將部署指令碼參數化

已完成

在上一個單元中,您在 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'
}

傳遞參數

如您所見,您可以直接在部署指令碼的屬性中設定參數值。 對於可傳入的值,還有其他幾個選項。 您可以使用先前建立的資源所提供的動態值、範本中宣告的變數,或部署時直接傳入範本中的參數。

argumentsenvironmentVariables 屬性中可透過範本函式來支援這些情節。 您可以使用任何 ARM 範本函式來存取值並傳入範本中。 這些函式包括 referenceparametersvariables

argumentsenvironmentVariables 屬性中可透過範本函式來支援這些情節。 您可以使用任何 Bicep 功能來存取值並傳入範本中,例如使用符號名稱來參考其他資源的屬性,以及參考參數和變數。