Parametrización de scripts de implementación

Completado

En la unidad anterior, ha agregado comportamiento personalizado a una plantilla de Azure Resource Manager (ARM) para almacenar en fases el contenido inicial en una cuenta de almacenamiento para un nuevo entorno de aplicación. Esto ha resuelto un problema específico para un equipo de aplicaciones.

Una manera de hacer que los scripts de implementación sean más adaptables consiste en proporcionar datos al script. Tiene dos opciones, argumentos de línea de comandos y variables de entorno.

Nota:

Los comandos de esta unidad se muestran para ilustrar conceptos. No los ejecute todavía. Pronto va a practicar lo que aprenderá aquí.

Uso de argumentos de línea de comandos

La primera opción para pasar datos a los recursos deploymentScripts consiste en personalizar la propiedad arguments. La propiedad arguments toma una cadena de argumentos como los que se proporcionarían en la línea de comandos. Estos argumentos se proporcionan a la propiedad command de la instancia de contenedor de Azure que ejecutará el script.

Nota:

Se produce un análisis, así que pruebe algunas variaciones de la propiedad arguments. Se dividirá en una matriz de cadenas de la misma manera que el shell de Windows analiza las líneas de comandos.

"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'
}

Uso de variables de entorno

La segunda opción consiste en crear variables de entorno a las que puedan acceder los scripts.

"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'
}

Una ventaja del uso de variables de entorno es que puede usar la opción secureValue para los secretos que es posible que se pasen a los scripts de implementación.

"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'
}

Paso mediante parámetros

Como ha visto, puede establecer valores de parámetro directamente en las propiedades del script de implementación. Hay otras opciones para los valores que se pueden pasar. Puede usar valores dinámicos procedentes de recursos creados previamente, variables declaradas en la plantilla o parámetros pasados directamente a la plantilla en el momento de la implementación.

Estos escenarios están disponibles mediante funciones de plantilla en la propiedad arguments o environmentVariables. Puede usar cualquiera de las funciones de plantilla de ARM para acceder a los valores y pasarlos a la plantilla. Entre estas funciones se incluyen reference, parameters o variables.

Estos escenarios están disponibles mediante funciones de plantilla en la propiedad arguments o environmentVariables. Puede usar cualquiera de las características de Bicep para acceder a los valores y pasarlos a la plantilla, como hacer referencia a las propiedades de otros recursos mediante sus nombres simbólicos y hacer referencia a parámetros y variables.