参数化部署脚本

已完成

在上一单元中,你向 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'
}

传递参数

正如你所了解的,可以直接在部署脚本的属性中设置参数值。 对于可以传递的值,还有其他几个选项。 可以使用来自以前创建的资源的动态值、模板中声明的变量或在部署时直接传递到模板的参数。

可通过 argumentsenvironmentVariables 属性中的模板函数实现这些方案。 可以使用任何 ARM 模板函数来访问值,并将它们传递到模板。 这些函数包括 referenceparametersvariables

可通过 argumentsenvironmentVariables 属性中的模板函数实现这些方案。 可以使用任何 Bicep 功能来访问值,并将它们传递到模板,例如,通过使用其他资源的符号名称来引用其属性,以及引用参数和变量。