Parametrizar scripts de implantação

Concluído

Na unidade anterior, você adicionou um comportamento personalizado a um modelo do ARM (Azure Resource Manager) para preparar o conteúdo inicial em uma conta de armazenamento para um novo ambiente de aplicativo. Isso resolveu um problema específico para uma equipe de aplicativo.

Uma forma de tornar os scripts de implantação mais adaptáveis é fornecer dados para o script. Você tem duas opções, argumentos de linha de comando e variáveis de ambiente.

Observação

Os comandos nesta unidade são mostrados para ilustrar conceitos. Não execute os comandos ainda. Você praticará o que aprendeu aqui em breve.

Como usar argumentos de linha de comando

A primeira opção para passar dados para os recursos deploymentScripts é personalizar a propriedade arguments. A propriedade arguments usa uma cadeia de caracteres de argumentos assim como as que você forneceria na linha de comando. Esses argumentos são fornecidos para a propriedade command da instância de contêiner do Azure que executará o script.

Observação

Algumas análises acontecem, portanto, teste algumas variações de sua propriedade arguments. Ele será dividido em uma matriz de cadeias de caracteres da mesma forma que o shell de Windows analisa as linhas de 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'
}

Usando variáveis de ambiente

Sua segunda opção é criar variáveis de ambiente que seus scripts possam acessar.

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

Um benefício de usar variáveis de ambiente é que você pode usar a opção secureValue para segredos que talvez precisem ser transmitidos para scripts de implantação.

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

Como passar parâmetros

Como você aprendeu, é possível definir valores de parâmetros diretamente nas propriedades do script de implantação. Há várias outras opções para valores que podem ser passados. Você pode usar valores dinâmicos provenientes de recursos criados anteriormente, variáveis declaradas no modelo ou parâmetros passados diretamente para o modelo no momento da implantação.

Esses cenários estão disponíveis por meio de funções de modelo na propriedade arguments ou environmentVariables. Você pode usar qualquer uma das funções de modelo do ARM para acessar valores e passá-los para o modelo. Essas funções incluem reference, parameters ou variables.

Esses cenários estão disponíveis por meio de funções de modelo na propriedade arguments ou environmentVariables. Você pode usar qualquer um dos recursos do Bicep para acessar valores e passá-los para o modelo, como se referir a propriedades de outros recursos usando seus nomes simbólicos e se referir a parâmetros e variáveis.