Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Reduzca la repetición de valores compartidos en los archivos de Bicep. En su lugar, cargue esos valores desde un archivo JSON compartido dentro del archivo de Bicep. Al usar matrices, concatene los valores compartidos con valores específicos de implementación en el código de Bicep.
Contexto y problema
Al escribir el código de Bicep, es posible que tenga variables comunes que se reutilizan en un conjunto de archivos Bicep. Puede duplicar los valores cada vez que declare el recurso, como copiando y pegando los valores entre los archivos de Bicep. Sin embargo, este enfoque es propenso a errores y, cuando necesita realizar cambios, debe actualizar cada definición de recurso para mantenerlo sincronizado con los demás.
Además, al trabajar con variables definidas como matrices, es posible que tenga un conjunto de valores comunes en varios archivos de Bicep y también tenga que agregar valores específicos para el recurso que va a implementar. Al mezclar las variables compartidas con las variables específicas del recurso, es más difícil que alguien comprenda la distinción entre las dos categorías de variables.
Solución
Cree un archivo JSON que incluya las variables que necesita compartir. Use la loadJsonContent()
función para cargar el archivo y acceder a las variables. Para las variables de matriz, use la concat()
función para combinar los valores compartidos con los valores personalizados del recurso específico.
Ejemplo 1: Nomenclatura de prefijos
Supongamos que tiene varios archivos Bicep que definen recursos. Debe usar un prefijo de nomenclatura coherente para todos los recursos.
Defina un archivo JSON que incluya los prefijos de nomenclatura comunes que se aplican en toda la empresa:
{
"storageAccountPrefix": "stg",
"appServicePrefix": "app"
}
En el archivo de Bicep, declare una variable que importe los prefijos de nomenclatura compartidos:
var sharedNamePrefixes = loadJsonContent('./shared-prefixes.json')
Al definir los nombres de recursos, use la interpolación de cadenas para concatenar los prefijos de nombre compartido con sufijos de nombre únicos:
var appServiceAppName = '${sharedNamePrefixes.appServicePrefix}-myapp-${uniqueString(resourceGroup().id)}'
var storageAccountName = '${sharedNamePrefixes.storageAccountPrefix}myapp${uniqueString(resourceGroup().id)}'
Ejemplo 2: Reglas de grupo de seguridad de red
Supongamos que tiene varios archivos Bicep que definen sus propios grupos de seguridad de red (NSG). Tiene un conjunto común de reglas de seguridad que se deben aplicar a cada grupo de seguridad de red y, a continuación, tiene reglas específicas de la aplicación que se deben agregar.
Defina un archivo JSON que incluya las reglas de seguridad comunes que se aplican en toda la empresa:
{
"securityRules": [
{
"name": "Allow_RDP_from_company_IP_address",
"properties": {
"description": "Allow inbound RDP from the company's IP address range.",
"protocol": "Tcp",
"sourceAddressPrefix": "203.0.113.0/24",
"sourcePortRange": "*",
"destinationAddressPrefix": "VirtualNetwork",
"destinationPortRange": "3389",
"access": "Allow",
"priority": 100,
"direction": "Inbound"
}
},
{
"name": "Allow_VirtualNetwork_to_Storage",
"properties": {
"description": "Allow outbound connections to the Azure Storage service tag.",
"protocol": "Tcp",
"sourceAddressPrefix": "VirtualNetwork",
"sourcePortRange": "*",
"destinationAddressPrefix": "Storage",
"destinationPortRange": "*",
"access": "Allow",
"priority": 100,
"direction": "Outbound"
}
}
// other rules here
]
}
En el archivo de Bicep, declare una variable que importe las reglas de seguridad compartidas:
var sharedRules = loadJsonContent('./shared-rules.json', 'securityRules')
Cree una matriz de variables que represente las reglas personalizadas para este grupo de seguridad de red específico:
var customRules = [
{
name: 'Allow_Internet_HTTPS_Inbound'
properties: {
description: 'Allow inbound internet connectivity for HTTPS only.'
protocol: 'Tcp'
sourcePortRange: '*'
destinationPortRange: '443'
sourceAddressPrefix: 'Internet'
destinationAddressPrefix: 'VirtualNetwork'
access: 'Allow'
priority: 400
direction: 'Inbound'
}
}
]
Defina el recurso de NSG. Use la concat()
función para combinar las dos matrices y establecer la securityRules
propiedad :
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-08-01' = {
name: nsgName
location: location
properties: {
securityRules: concat(sharedRules, customRules)
}
}
Consideraciones
- Al usar este enfoque, el archivo JSON se incluirá dentro de la plantilla de ARM generada por Bicep. Las plantillas de ARM JSON generadas por Bicep tienen un límite de 4 MB, por lo que es importante evitar el uso de archivos de variables compartidos de gran tamaño.
- Asegúrese de que las matrices de variables compartidas no entran en conflicto con los valores de matriz especificados en cada archivo de Bicep. Por ejemplo, al usar el patrón de conjunto de configuración para definir grupos de seguridad de red, asegúrese de que no tiene varias reglas que definan la misma prioridad y dirección.
Pasos siguientes
Obtenga información sobre el patrón de conjunto de configuración.