Funciones de archivo para Bicep

En este artículo se describen las funciones de Bicep para cargar contenido desde archivos externos.

loadDirectoryFileInfo

loadDirectoryFileInfo(directoryPath, [searchPattern])

Carga información básica sobre los archivos de un directorio como objeto Bicep. La función carga archivos durante la compilación, no en tiempo de ejecución.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Tipo Description
directoryPath cuerda / cadena La ruta de acceso es relativa al archivo de Bicep que invoca esta función. Puedes usar variables si son constantes en tiempo de compilación, pero no puedes usar parámetros.
searchPattern No cuerda / cadena Patrón de búsqueda que se va a usar al cargar archivos. Este patrón puede incluir comodines.

Valor devuelto

Matriz de objetos, cada uno que representa un archivo en el directorio. Cada objeto contiene las siguientes propiedades:

Propiedad Tipo Description
baseName cuerda / cadena El nombre del archivo.
extensión cuerda / cadena Extensión del archivo.
relativePath cuerda / cadena Ruta de acceso relativa a la plantilla actual.

Examples

En el ejemplo siguiente se carga la información del archivo para todos los archivos de Bicep del ./modules/ directorio.

var dirFileInfo = loadDirectoryFileInfo('./modules/', '*.bicep')

output dirFileInfoOutput object[] = dirFileInfo

La carpeta solo contiene un archivo denominado appService.bicep. La salida es la siguiente:

[{"relativePath":"modules/appService.bicep","baseName":"appService.bicep","extension":".bicep"}]

loadFileAsBase64

loadFileAsBase64(filePath)

Carga el archivo como una cadena base64.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Tipo Description
filePath cuerda / cadena Ruta de acceso al archivo que se va a cargar. La ruta de acceso es relativa al archivo de Bicep implementado. No puede incluir variables.

Observaciones

Usa esta función cuando tengas contenido binario que quieras incluir en el despliegue. En lugar de codificar manualmente el archivo en una cadena base64 y añadirlo a tu archivo Bicep, carga el archivo usando esta función. El archivo se carga cuando el archivo bicep se compila en una plantilla JSON. No puedes usar variables en la ruta del archivo porque el compilador no las resuelve al compilar en la plantilla. Durante la implementación, la plantilla JSON contiene el contenido del archivo como una cadena codificada de forma rígida.

Esta función requiere la versión 0.4.X o posterior de la CLI de Bicep.

El tamaño máximo permitido del archivo es de 96 KB.

Valor devuelto

El archivo como una cadena base64.

Examples

El siguiente ejemplo carga un script PowerShell como una cadena base64 y lo utiliza con la Extensión de Script Personalizado para una máquina virtual (VM).

param vmName string
param location string

resource vmExtension 'Microsoft.Compute/virtualMachines/extensions@2024-07-01' = {
  name: '${vmName}/CustomScriptExtension'
  location: location
  properties: {
    publisher: 'Microsoft.Compute'
    type: 'CustomScriptExtension'
    typeHandlerVersion: '1.10'
    autoUpgradeMinorVersion: true
    forceUpdateTag: 'true'
    protectedSettings: {
      commandToExecute: 'powershell.exe -ExecutionPolicy Unrestricted -Command "iex ""& { $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(\'${loadFileAsBase64('vm-provisioning.ps1')}\'))) } -ParamX foo -ParamY bar"""'
    }
  }
}

Nota:

Este ejemplo no utiliza el parámetro PowerShell -EncodedCommand . -EncodedCommand espera un comando codificado en UTF-16LE. Este ejemplo, en cambio, pasa una cadena base64 a PowerShell y la decodifica explícitamente como UTF-8 antes de invocar el script.

El archivo de script se carga durante la compilación de Bicep y se incrusta en la plantilla JSON generada como una cadena codificada en base64. Cuando se ejecuta el despliegue, PowerShell decodifica la cadena e invoca el script en la VM. Este enfoque es útil al incrustar contenido de guion directamente en commandToExecute, porque evita muchos problemas de citas, escapes y nuevas líneas que pueden ocurrir con contenido de escritura multilínea.

También puedes codificar una cadena multilínea en línea y base64() pasar parámetros nombrados al script decodificado. Para más información, véase el literal de cadena multilínea.

var scriptContent = '''
param(
  [string] $Name
)

Write-Host "Hello $Name!"
'''

var scriptArgs = {
  Name: 'MyValue'
}

// Builds a string of the form '-ArgA ValA -ArgB ValB'
var argumentString = join(map(items(scriptArgs), i => '-${i.key} ${i.value}'), ' ')

var commandToExecute = 'powershell.exe -ExecutionPolicy Unrestricted -Command "iex \\"& { $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(\'${base64(scriptContent)}\'))) } ${argumentString}\\""'

Nota:

Este ejemplo funciona porque el valor del argumento (MyValue) no contiene caracteres especiales. El constructor sencillo join/map no se escapa ni da valores. Fallará si algún valor contiene espacios (que deben estar envueltos entre comillas), comillas simples, comillas dobles u otros caracteres que sean especiales para el analizador de argumentos de línea de comandos de PowerShell (que debe escapar con replace()).

Para un ejemplo completo que maneja correctamente booleanos, enteros, cadenas con escape completo, arrays y objetos, véase Crear un script de despliegue con entradas y salidas complejas.

loadJsonContent

loadJsonContent(filePath, [jsonPath], [encoding])

Carga el archivo JSON especificado como un objeto Any.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Tipo Description
filePath cuerda / cadena Ruta de acceso al archivo que se va a cargar. La ruta de acceso es relativa al archivo de Bicep implementado. No puede incluir variables.
jsonPath No cuerda / cadena Expresión JSONPath para especificar que solo se carga parte del archivo.
encoding No cuerda / cadena Codificación de archivos. El valor predeterminado es utf-8. Las opciones disponibles son: iso-8859-1, us-ascii, utf-16, o utf-16BEutf-8.

Observaciones

Usa esta función cuando tengas contenido JSON o contenido JSON minificado que almacenes en un archivo separado. En lugar de duplicar el contenido JSON en tu archivo Bicep, usa esta función para cargar el contenido. Puede cargar una parte de un archivo JSON especificando una ruta de acceso JSON. El compilador Bicep carga el archivo cuando compila el archivo Bicep a la plantilla JSON. No puedes incluir variables en la ruta del archivo porque el compilador no puede resolverlas al compilar en la plantilla. Durante la implementación, la plantilla JSON contiene el contenido del archivo como una cadena codificada de forma rígida.

En VS Code, IntelliSense está disponible para las propiedades del objeto cargado. Por ejemplo, puede crear un archivo con valores para compartirlos en muchos archivos de Bicep. En este artículo se muestra un ejemplo.

Esta función requiere la versión 0.7.X o posterior de la CLI de Bicep.

El tamaño máximo permitido del archivo es de 1048 576 caracteres, incluidos los finales de línea.

Valor devuelto

Contenido del archivo como un objeto Any.

Examples

En el ejemplo siguiente se crea un archivo JSON que contiene valores para un grupo de seguridad de red.

{
  "description": "Allows SSH traffic",
  "protocol": "Tcp",
  "sourcePortRange": "*",
  "destinationPortRange": "22",
  "sourceAddressPrefix": "*",
  "destinationAddressPrefix": "*",
  "access": "Allow",
  "priority": 100,
  "direction": "Inbound"
}

Carga ese archivo y lo convierte en un objeto JSON. El objeto se usa para asignar valores al recurso.

param location string = resourceGroup().location

var nsgconfig = loadJsonContent('nsg-security-rules.json')

resource newNSG 'Microsoft.Network/networkSecurityGroups@2025-01-01' = {
  name: 'example-nsg'
  location: location
  properties: {
    securityRules: [
      {
        name: 'SSH'
        properties: nsgconfig
      }
    ]
  }
}

Puede reutilizar el archivo de valores en otros archivos de Bicep que implementan un grupo de seguridad de red.

loadYamlContent

loadYamlContent(filePath, [pathFilter], [encoding])

Carga el archivo YAML especificado como un objeto Any.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Tipo Description
filePath cuerda / cadena Ruta de acceso al archivo que se va a cargar. La ruta de acceso es relativa al archivo de Bicep implementado. No puede incluir variables.
pathFilter No cuerda / cadena El filtro de ruta de acceso es una expresión JSONPath para especificar que solo se carga parte del archivo.
encoding No cuerda / cadena Codificación de archivos. El valor predeterminado es utf-8. Las opciones disponibles son: iso-8859-1, us-ascii, utf-16, o utf-16BEutf-8.

Observaciones

Usa esta función cuando tengas contenido YAML o contenido YAML minificado que almacenes en un archivo separado. En lugar de duplicar el contenido YAML en tu archivo Bicep, usa esta función para cargar el contenido. Puede cargar una parte de un archivo YAML especificando un filtro de ruta de acceso. El compilador Bicep carga el archivo cuando compila el archivo Bicep a la plantilla YAML. No puedes incluir variables en la ruta del archivo porque el compilador no puede resolverlas al compilar en la plantilla. Durante la implementación, la plantilla YAML contiene el contenido del archivo como una cadena codificada de forma rígida.

En VS Code, IntelliSense está disponible para las propiedades del objeto cargado. Por ejemplo, puede crear un archivo con valores para compartirlos en muchos archivos de Bicep. En este artículo se muestra un ejemplo.

Esta función requiere la versión 0.16.X o posterior de la CLI de Bicep.

El tamaño máximo permitido del archivo es de 1048 576 caracteres, incluidos los finales de línea.

Valor devuelto

Contenido del archivo como un objeto Any.

Examples

En el ejemplo siguiente se crea un archivo YAML que contiene valores para un grupo de seguridad de red.

description: "Allows SSH traffic"
protocol: "Tcp"
sourcePortRange: "*"
destinationPortRange: "22"
sourceAddressPrefix: "*"
destinationAddressPrefix: "*"
access: "Allow"
priority: 100
direction: "Inbound"

Carga ese archivo y lo convierte en un objeto JSON. El objeto se usa para asignar valores al recurso.

param location string = resourceGroup().location

var nsgconfig = loadYamlContent('nsg-security-rules.yaml')

resource newNSG 'Microsoft.Network/networkSecurityGroups@2025-01-01' = {
  name: 'example-nsg'
  location: location
  properties: {
    securityRules: [
      {
        name: 'SSH'
        properties: nsgconfig
      }
    ]
  }
}

Puede reutilizar el archivo de valores en otros archivos de Bicep que implementan un grupo de seguridad de red.

loadTextContent

loadTextContent(filePath, [encoding])

Carga el contenido del archivo especificado como una cadena.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Tipo Description
filePath cuerda / cadena Ruta de acceso al archivo que se va a cargar. La ruta de acceso es relativa al archivo de Bicep implementado. No puede contener variables.
encoding No cuerda / cadena Codificación de archivos. El valor predeterminado es utf-8. Las opciones disponibles son: iso-8859-1, us-ascii, utf-16, o utf-16BEutf-8.

Observaciones

Use esta función cuando tenga contenido almacenado en un archivo independiente. Puede cargar el contenido en lugar de duplicarlo en el archivo de Bicep. Por ejemplo, puede cargar un script de implementación desde un archivo. El archivo se carga cuando el archivo de Bicep se compila en la plantilla JSON. No puedes incluir ninguna variable en la ruta del archivo porque no se resuelven al compilar en la plantilla. Durante la implementación, la plantilla JSON contiene el contenido del archivo como una cadena codificada de forma rígida.

Para cargar archivos JSON, usa la loadJsonContent() función.

Esta función requiere la versión 0.4.X o posterior de la CLI de Bicep.

El tamaño máximo permitido del archivo es de 131 072 caracteres, incluidos los finales de línea.

Valor devuelto

Contenido del archivo como una cadena.

Examples

El siguiente ejemplo muestra cómo cargar un script desde un archivo y usarlo para un script de despliegue.

resource exampleScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'exampleScript'
  location: resourceGroup().location
  kind: 'AzurePowerShell'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '/subscriptions/{sub-id}/resourcegroups/{rg-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{id-name}': {}
    }
  }
  properties: {
    azPowerShellVersion: '14.0'
    scriptContent: loadTextContent('myscript.ps1')
    retentionInterval: 'P1D'
  }
}

Pasos siguientes

Puede encontrar una descripción de las secciones de un archivo de Bicep en Nociones sobre la estructura y la sintaxis de los archivos de Bicep.