Compartir a través de


Parámetros en Bicep

En este artículo se describe cómo definir y usar parámetros en un archivo Bicep. Si proporciona valores diferentes para los parámetros, podrá volver a usar un archivo Bicep para distintos entornos.

Resource Manager resuelve los valores de parámetro antes de iniciar las operaciones de implementación. Siempre que se use el parámetro, Resource Manager lo reemplaza por el valor resuelto.

Cada parámetro debe establecerse en uno de los tipos de datos.

Bicep permite un máximo de 256 parámetros. Para obtener más información, consulte Límites de plantilla.

Para conocer los procedimientos recomendados de parámetros, consulte Parámetros.

Recursos de aprendizaje

Si prefiere información sobre los parámetros mediante instrucciones paso a paso, consulte Creación de plantillas de Bicep reutilizables mediante parámetros.

Definir parámetros

Cada parámetro tiene un nombre y un tipo de datos. Opcionalmente, puede proporcionar un valor predeterminado para el parámetro.

@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>

Un parámetro no puede tener el mismo nombre que una variable, recurso, salida u otro parámetro en el mismo ámbito.

En el ejemplo siguiente se muestran declaraciones básicas de parámetros.

param demoString string
param demoInt int
param demoBool bool
param demoObject object
param demoArray array

La palabra clave param se usa también en archivos .bicepparam. En los archivos .bicepparam, no es necesario especificar el tipo de datos tal como se define en los archivos de Bicep.

param <parameter-name> = <value>

Para obtener más información, consulte Archivo de parámetros.

Las expresiones de tipo definidas por el usuario se pueden usar como cláusula tipo de una instrucción param. Por ejemplo:

param storageAccountConfig {
  name: string
  sku: string
}

Para obtener más información, consulte Tipos de datos definidos por el usuario.

Establecimiento de valores predeterminados

Puede especificar un valor predeterminado para un parámetro. El valor predeterminado se usa cuando no se proporciona un valor durante la implementación.

param demoParam string = 'Contoso'

Puede usar expresiones con el valor predeterminado. No se permiten expresiones con otras propiedades de parámetro. La función no puede usar la función reference ni ninguna de las funciones list de la sección de parámetros. Estas funciones obtienen el estado del runtime del recurso y no se pueden ejecutar antes de la implementación cuando se resuelven parámetros.

param location string = resourceGroup().location

Puede usar otro valor de parámetro para compilar un valor predeterminado. La plantilla siguiente crea un nombre de plan de host a partir del nombre del sitio.

param siteName string = 'site${uniqueString(resourceGroup().id)}'
param hostingPlanName string = '${siteName}-plan'

output siteNameOutput string = siteName
output hostingPlanOutput string = hostingPlanName

Sin embargo, no se puede hacer referencia a una variable como valor predeterminado.

Uso de decoradores

Los parámetros usan decoradores para restricciones o metadatos. Los decoradores tienen el formato @expression y se colocan encima de la declaración del parámetro. En la tabla siguiente se muestran los decoradores disponibles para los parámetros.

Decorador Aplicar a Argumento Descripción
permitidas all array Use este decorador para asegurarse de que el usuario proporciona los valores correctos. Este decorador solo se permite en instrucciones param. Para declarar que una propiedad debe ser uno de un conjunto de valores predefinidos en una instruccióntype o output, use la sintaxis de tipo de unión. La sintaxis de tipo de unión también se puede usar en instrucciones param.
descripción all string Texto que explica cómo usar el parámetro. La descripción se muestra a los usuarios a través del portal.
discriminator objeto string Use este decorador para asegurarse de que la subclase correcta se identifica y administra. Para obtener más información, consulte Tipo de datos de unión etiquetado personalizado.
maxLength array, string int Longitud máxima de los parámetros de cadena y matriz. El valor es inclusivo.
maxValue int int Valor máximo del parámetro entero. Este valor es inclusivo.
metadata all object Propiedades personalizadas que se van a aplicar al parámetro. Pueden incluir una propiedad de descripción equivalente al decorador de la descripción.
minLength array, string int Longitud mínima de los parámetros de cadena y matriz. El valor es inclusivo.
minValue int int Valor mínimo del parámetro entero. Este valor es inclusivo.
sealed objeto None Eleva BCP089 de una advertencia a un error cuando es probable que un nombre de propiedad de un tipo de datos use-define sea un error tipográfico. Para obtener más información, consulte Elevación del nivel de error.
secure string, object ninguno Marca el parámetro como seguro. El valor de un parámetro seguro no se guarda en el historial de implementaciones y no se registra. Para más información, consulte Protección de cadenas y objetos.

Los decoradores están en el espacio de nombres sys. Si tiene que diferenciar un decorador de otro elemento con el mismo nombre, anteceda el decorador con sys. Por ejemplo, si el archivo de Bicep incluye un parámetro llamado description, debe agregar el espacio de nombres sys al usar el decorador description.

@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string

Valores permitidos

Puede definir valores permitidos para un parámetro. Los valores permitidos se proporcionan en una matriz. Se produce un error en la implementación durante la validación si se pasa un valor para el parámetro que no es uno de los valores permitidos.

@allowed([
  'one'
  'two'
])
param demoEnum string

Si define los valores permitidos para un parámetro de matriz, el valor real puede ser cualquier subconjunto de los valores permitidos.

Descripción

Para ayudar a los usuarios a comprender el valor que se debe proporcionar, agregue una descripción al parámetro. Cuando un usuario implementa la plantilla mediante el portal, el texto de la descripción se utiliza automáticamente como sugerencia para ese parámetro. Agregue solo una descripción cuando el texto proporcione más información de la que se puede deducir del nombre del parámetro.

@description('Must be at least Standard_A3 to support 2 NICs.')
param virtualMachineSize string = 'Standard_DS1_v2'

El texto con formato Markdown se puede usar para el texto de descripción:

@description('''
Storage account name restrictions:
- Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only.
- Your storage account name must be unique within Azure. No two storage accounts can have the same name.
''')
@minLength(3)
@maxLength(24)
param storageAccountName string

Si mantiene el cursor sobre storageAccountName en VS Code, verá el texto con formato:

Uso de texto con formato Markdown en VSCode.

Asegúrese de que el texto sigue el formato correcto de Markdown; de lo contrario, es posible que no se muestre correctamente cuando se represente.

Discriminador

Consulte Tipo de datos de unión etiquetado personalizado.

Restricciones de enteros

Puede establecer valores mínimos y máximos para los parámetros de entero. Puede establecer una o las dos restricciones.

@minValue(1)
@maxValue(12)
param month int

Restricciones de longitud

Puede especificar la longitud mínima y máxima de los parámetros de matriz y de cadena. Puede establecer una o las dos restricciones. Para las cadenas, la longitud indica el número de caracteres. Para las matrices, la longitud indica el número de elementos de la matriz.

En el ejemplo siguiente se declaran dos parámetros. Un parámetro es para un nombre de cuenta de almacenamiento que debe tener entre 3 y 24 caracteres. El otro parámetro es una matriz que debe tener entre 1 y 5 elementos.

@minLength(3)
@maxLength(24)
param storageAccountName string

@minLength(1)
@maxLength(5)
param appNames array

Metadatos

Si tiene propiedades personalizadas que desea aplicar a un parámetro, agregue un decorador de metadatos. Dentro de los metadatos, defina un objeto con los nombres y valores personalizados. El objeto que defina para los metadatos puede contener propiedades de cualquier nombre y tipo.

Puede utilizar este decorador para realizar un seguimiento de la información sobre el parámetro que no tiene sentido agregar a la descripción.

@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
param settings object

Cuando se proporciona un decorador @metadata() con una propiedad que está en conflicto con otro decorador, ese decorador siempre tiene prioridad sobre cualquier elemento del decorador @metadata(). Por tanto, la propiedad en conflicto dentro del valor @metadata() es redundante y se reemplazará. Para obtener más información, consulte Regla de linter: no-conflicting-metadata.

Sellado

Consulte Elevación del nivel de error.

Parámetros seguros

Puede marcar los parámetros de objeto o cadena como seguros. El valor de un parámetro seguro no se guarda en el historial de implementaciones y no se registra.

@secure()
param demoPassword string

@secure()
param demoSecretObject object

Hay varias reglas de linter relacionadas con este decorador: Valor predeterminado de parámetro seguro, Parámetros seguros en implementaciones anidadas, Secretos seguros en parámetros.

Usar parámetros

Para hacer referencia al valor de un parámetro, use el nombre del parámetro. En el ejemplo siguiente se usa un valor de parámetro para un nombre de almacén de claves.

param vaultName string = 'keyVault${uniqueString(resourceGroup().id)}'

resource keyvault 'Microsoft.KeyVault/vaults@2019-09-01' = {
  name: vaultName
  ...
}

Uso de objetos como parámetros

Puede ser más fácil organizar los valores relacionados pasándolos como objetos. Con este enfoque también se reduce el número de parámetros de la plantilla.

En el ejemplo siguiente se muestra un parámetro que es un objeto. El valor predeterminado muestra las propiedades esperadas para el objeto. Esas propiedades se usan al definir el recurso que se va a implementar.

param vNetSettings object = {
  name: 'VNet1'
  location: 'eastus'
  addressPrefixes: [
    {
      name: 'firstPrefix'
      addressPrefix: '10.0.0.0/22'
    }
  ]
  subnets: [
    {
      name: 'firstSubnet'
      addressPrefix: '10.0.0.0/24'
    }
    {
      name: 'secondSubnet'
      addressPrefix: '10.0.1.0/24'
    }
  ]
}

resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
  name: vNetSettings.name
  location: vNetSettings.location
  properties: {
    addressSpace: {
      addressPrefixes: [
        vNetSettings.addressPrefixes[0].addressPrefix
      ]
    }
    subnets: [
      {
        name: vNetSettings.subnets[0].name
        properties: {
          addressPrefix: vNetSettings.subnets[0].addressPrefix
        }
      }
      {
        name: vNetSettings.subnets[1].name
        properties: {
          addressPrefix: vNetSettings.subnets[1].addressPrefix
        }
      }
    ]
  }
}

Pasos siguientes