Proporcionar valores mediante archivos de parámetros

Completado

En las unidades anteriores, proporcionó los valores de parámetros en la línea de comandos al crear una implementación. Este enfoque funciona bien cuando escribe y prueba los archivos de Bicep, pero no cuando tiene muchos parámetros o cuando necesita automatizar las implementaciones. En esta unidad, conocerá las distintas formas en que se pueden especificar los valores de parámetros.

Nota:

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

Creación de archivos de parámetros

Los archivos de parámetros facilitan la especificación de los valores de parámetros como un conjunto. Especifique los valores de los parámetros del archivo de Bicep en el archivo de parámetros. Los archivos de parámetros se crean mediante el lenguaje de notación de objetos JavaScript (JSON). Puede proporcionar un archivo de parámetros al implementar la plantilla de Bicep. Este es el aspecto de un archivo de parámetros:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    },
    "cosmosDBAccountLocations": {
      "value": [
        {
          "locationName": "australiaeast"
        },
        {
          "locationName": "southcentralus"
        },
        {
          "locationName": "westeurope"
        }
      ]
    }
  }
}

Echemos un vistazo a cada parte del archivo de parámetros con más detalle:

  • $schema ayuda a Azure Resource Manager a comprender que este archivo es un archivo de parámetros.
  • contentVersion es una propiedad que puede usar para realizar un seguimiento de los cambios significativos en el archivo de parámetros, si así lo desea. Normalmente, se establece en su valor predeterminado de 1.0.0.0.
  • En la sección parameters se enumeran cada parámetro y el valor que desea usar. El valor del parámetro debe especificarse como un objeto. El objeto tiene una propiedad denominada value que define el valor de parámetro real que se usará.

Por lo general, creará un archivo de parámetros para cada entorno. Es conveniente incluir el nombre del entorno en el nombre del archivo de parámetros. Por ejemplo, puede tener un archivo de parámetros denominado main.parameters.dev.json para el entorno de desarrollo y uno denominado main.parameters.production.json para el entorno de producción.

Nota:

Asegúrese de especificar solo los valores de los parámetros que existen en la plantilla de Bicep. Al crear una implementación, Azure comprueba los parámetros y genera un error si intentó especificar un valor para un parámetro que no está en el archivo de Bicep.

Uso de archivos de parámetros en el momento de la implementación

Al crear una implementación mediante el comando az deployment group create, puede especificar el nombre del archivo de parámetros que desea usar con el argumento --parameters:

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json

Al crear una implementación mediante el cmdlet New-AzResourceGroupDeployment, puede especificar el nombre del archivo de parámetros que desea usar con el argumento -TemplateParameterFile:

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json

Invalidación de los valores de parámetros

Ya ha aprendido tres maneras de especificar valores de parámetros: valores predeterminados, la línea de comandos y archivos de parámetros. Es habitual usar enfoques diferentes para especificar valores diferentes para el mismo parámetro. Ya observó este enfoque cuando trabajó con valores predeterminados. Cuando se crea un valor predeterminado para un parámetro, pero después se especifica un valor diferente mediante la línea de comandos, el valor de la línea de comandos tiene prioridad. Veamos cómo encajan los archivos de parámetros en este orden de prioridad.

Diagrama en el que se muestra el orden de prioridad de los valores de parámetros. Los archivos de parámetros invalidan los valores predeterminados, y los valores de parámetros de la línea de comandos invalidan los archivos de parámetros.

Puede observar que los archivos de parámetros invalidan los valores predeterminados y que los valores de parámetros de la línea de comandos invalidan los archivos de parámetros.

Veamos cómo funciona este enfoque. Este es un archivo de Bicep de ejemplo que define tres parámetros, cada uno con valores predeterminados:

param location string = resourceGroup().location
param appServicePlanInstanceCount int = 1
param appServicePlanSku object = {
  name: 'F1'
  tier: 'Free'
}

Echemos un vistazo a un archivo de parámetros que invalida el valor de dos de los parámetros, pero que no especifica un valor para el parámetro location:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    }
  }
}

Al crear la implementación, también invalidamos el valor de appServicePlanInstanceCount. Al igual que con los archivos de parámetros, se usa el argumento --parameters, pero se agrega el valor que se quiere invalidar como su propio valor:

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json \
               appServicePlanInstanceCount=5

Al crear la implementación, se invalida uno de los valores de parámetros. Especifique el nombre del parámetro como si fuera un argumento para el cmdlet:

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json `
  -appServicePlanInstanceCount 5

Veamos cuáles serán los valores.

Parámetro Value Explicación
location La ubicación del grupo de recursos. El archivo de Bicep especifica este parámetro como valor predeterminado y no se invalida.
appServicePlanSku Un objeto con una propiedad name establecida en P1v3 y tier de PremiumV3. El archivo de parámetros reemplaza el valor predeterminado del archivo de Bicep.
appServicePlanInstanceCount 5 El valor especificado en el momento de la implementación invalida el valor predeterminado y el valor del archivo de parámetros.

Mediante una combinación de los enfoques para especificar valores de parámetros, puede evitar tener que duplicar los valores de parámetros en muchos lugares, a la vez que se ofrece la flexibilidad de invalidar donde sea necesario.