Parametrizzare gli script di distribuzione

Completato

Nell'unità precedente è stato aggiunto un comportamento personalizzato a un modello di Azure Resource Manager (ARM) per lo staging del contenuto iniziale in un account di archiviazione per un nuovo ambiente dell'applicazione. In questo modo è stato risolto un problema specifico per un team.

Uno dei modi per rendere più adattabili gli script di distribuzione consiste nel fornire dati allo script. Sono disponibili due opzioni, ovvero gli argomenti della riga di comando e le variabili di ambiente.

Nota

I comandi riportati in questa unità vengono illustrati per spiegare i concetti. Non eseguire ancora i comandi. Presto sarà possibile provare quanto appreso.

Uso degli argomenti della riga di comando

La prima opzione per passare i dati nelle risorse deploymentScripts consiste nel personalizzare la proprietà arguments. La proprietà arguments accetta una stringa di argomenti esattamente come quelli specificati nella riga di comando. Questi argomenti vengono forniti alla proprietà command dell'istanza del contenitore di Azure che eseguirà lo script.

Nota

Viene eseguita un'analisi, quindi testare alcune varianti della proprietà arguments. Verrà suddivisa in una matrice di stringhe nello stesso modo in cui la shell Windows analizza le righe di comando.

"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 delle variabili di ambiente

La seconda opzione consiste nel creare variabili di ambiente a cui gli script possono accedere.

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

Uno dei vantaggi dell'uso delle variabili di ambiente è che è possibile usare l'opzione secureValueper i segreti che potrebbe essere necessario passare agli script di distribuzione.

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

Passaggio dei parametri

Come si è appreso, è possibile impostare i valori dei parametri direttamente nelle proprietà dello script di distribuzione. Esistono diverse altre opzioni per i valori che è possibile passare. È possibile usare valori dinamici provenienti da risorse create in precedenza, variabili dichiarate nel modello o parametri passati direttamente al modello in fase di distribuzione.

Questi scenari sono disponibili tramite le funzioni del modello nella proprietà arguments o environmentVariables. È possibile usare una qualsiasi delle funzioni del modello di ARM per accedere ai valori e passarli al modello. Queste funzioni includono reference, parameters o variables.

Questi scenari sono disponibili tramite le funzioni del modello nella proprietà arguments o environmentVariables. È possibile usare una qualsiasi delle funzionalità di Bicep per accedere ai valori e passarli al modello, ad esempio fare riferimento alle proprietà di altre risorse usando i relativi nomi simbolici e fare riferimento a parametri e variabili.