Funzioni di file per Bicep

Questo articolo descrive le funzioni Bicep per il caricamento di contenuto da file esterni.

loadDirectoryFileInfo

loadDirectoryFileInfo(directoryPath, [searchPattern])

Carica informazioni di base sui file di una directory come oggetto Bicep. La funzione carica i file durante la compilazione, non a runtime.

Spazio dei nomi: sys.

Parametri

Parametro Obbligatorio TIPO Description
directoryPath Yes corda Il percorso è relativo al file Bicep che richiama questa funzione. Puoi usare variabili se sono costanti a tempo di compilazione, ma non puoi usare parametri.
searchPattern NO corda Modello di ricerca da usare durante il caricamento dei file. Questo schema può includere le carte jolly.

Valore restituito

Matrice di oggetti, ognuno dei quali rappresenta un file nella directory. Ogni oggetto contiene le proprietà seguenti:

Proprietà TIPO Description
Basename corda Nome del file.
extension corda Estensione del file.
Percorso relativo corda Percorso relativo del modello corrente.

Esempi

Nell'esempio seguente vengono caricate le informazioni sul file per tutti i file Bicep nella ./modules/ directory .

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

output dirFileInfoOutput object[] = dirFileInfo

La cartella contiene solo un file denominato appService.bicep. L'output è il seguente:

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

loadFileAsBase64

loadFileAsBase64(filePath)

Carica il file come stringa base64.

Spazio dei nomi: sys.

Parametri

Parametro Obbligatorio TIPO Description
filePath Yes corda Percorso del file da caricare. Il percorso è relativo al file Bicep distribuito. Non può includere variabili.

Osservazioni:

Usa questa funzione quando hai contenuti binari da includere nella distribuzione. Invece di codificare manualmente il file in una stringa base64 e aggiungerlo al file Bicep, carica il file usando questa funzione. Il file viene caricato quando il file Bicep viene compilato in un modello JSON. Non puoi usare variabili nel percorso del file perché il compilatore non le risolve quando compila sul template. Durante la distribuzione, il modello JSON contiene il contenuto del file come stringa hardcoded.

Questa funzione richiede l'interfaccia della riga di comando di Bicep versione 0.4.X o successiva.

La dimensione massima consentita del file è di 96 KB.

Valore restituito

File come stringa base64.

Esempi

Il seguente esempio carica uno script PowerShell come stringa base64 e lo utilizza con l'estensione Custom Script per una macchina virtuale (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"""'
    }
  }
}

Note

Questo esempio non utilizza il parametro PowerShell -EncodedCommand . -EncodedCommand si aspetta un comando codificato in UTF-16LE. Questo esempio invece passa una stringa base64 a PowerShell e la decodifica esplicitamente come UTF-8 prima di invocare lo script.

Il file script viene caricato durante la compilazione di Bicep e incorporato nel template JSON generato come stringa codificata base64. Quando la distribuzione viene eseguita, PowerShell decodifica la stringa e invoca lo script sulla VM. Questo approccio è utile quando si incorporano contenuti di script direttamente in commandToExecute, perché evita molti problemi di citazioni, escape e nuove linee che possono verificarsi con i contenuti di script a più linee.

Puoi anche codificare una stringa multi-linea inline e base64() passare parametri nominati allo script decodificato. Per maggiori informazioni, vedi il letterale della stringa multilinea.

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

Note

Questo esempio funziona perché il valore dell'argomento (MyValue) non contiene caratteri speciali. Il costruttore semplice join/map non sfugge né indica valori. Fallirà se un valore contiene spazi (che devono essere avvolti tra virgolette), o virgolette singole, doppie virgolette o altri caratteri speciali per il parser di argomenti a riga di comandi di PowerShell (che deve essere scappato con replace()).

Per un esempio completo che gestisce correttamente booleani, interi, stringhe con escape completo, array e oggetti, vedi Crea uno script di distribuzione con input e output complessi.

loadJsonContent

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

Carica il file JSON specificato come oggetto Any.

Spazio dei nomi: sys.

Parametri

Parametro Obbligatorio TIPO Description
filePath Yes corda Percorso del file da caricare. Il percorso è relativo al file Bicep distribuito. Non può includere variabili.
jsonPath NO corda Espressione JSONPath per specificare che viene caricata solo parte del file.
encoding NO corda Codifica del file. Il valore predefinito è utf-8. Le opzioni disponibili sono: iso-8859-1, us-ascii, utf-16utf-16BE, o utf-8.

Osservazioni:

Usa questa funzione quando hai contenuti JSON o JSON minificati che memorizzi in un file separato. Invece di duplicare il contenuto JSON nel file Bicep, usa questa funzione per caricare il contenuto. È possibile caricare una parte di un file JSON specificando un percorso JSON. Il compilatore Bicep carica il file quando compila il file Bicep nel template JSON. Non puoi includere variabili nel percorso del file perché il compilatore non può risolverle compilando sul template. Durante la distribuzione, il modello JSON contiene il contenuto del file come stringa hardcoded.

In VS Code, IntelliSense è disponibile per le proprietà dell'oggetto caricato. Ad esempio, è possibile creare un file con valori da condividere tra molti file Bicep. Un esempio è illustrato in questo articolo.

Questa funzione richiede l'interfaccia della riga di comando di Bicep versione 0.7.X o successiva.

La dimensione massima consentita del file è di 1.048.576 caratteri, incluse le terminazioni di riga.

Valore restituito

Contenuto del file come oggetto Any.

Esempi

L'esempio seguente crea un file JSON che contiene valori per un gruppo di sicurezza di rete.

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

Il file viene caricato e convertito in un oggetto JSON. Usare l'oggetto per assegnare valori alla risorsa.

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
      }
    ]
  }
}

È possibile riutilizzare il file di valori in altri file Bicep che distribuiscono un gruppo di sicurezza di rete.

loadYamlContent

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

Carica il file YAML specificato come oggetto Any.

Spazio dei nomi: sys.

Parametri

Parametro Obbligatorio TIPO Description
filePath Yes corda Percorso del file da caricare. Il percorso è relativo al file Bicep distribuito. Non può includere variabili.
pathFilter NO corda Il filtro di percorso è un'espressione JSONPath per specificare che viene caricata solo parte del file.
encoding NO corda Codifica del file. Il valore predefinito è utf-8. Le opzioni disponibili sono: iso-8859-1, us-ascii, utf-16utf-16BE, o utf-8.

Osservazioni:

Usa questa funzione quando hai contenuti YAML o contenuti YAML minificati che memorizzi in un file separato. Invece di duplicare il contenuto YAML nel file Bicep, usa questa funzione per caricare il contenuto. È possibile caricare una parte di un file YAML specificando un filtro di percorso. Il compilatore Bicep carica il file quando compila il file Bicep nel template YAML. Non puoi includere variabili nel percorso del file perché il compilatore non può risolverle compilando sul template. Durante la distribuzione, il modello YAML contiene il contenuto del file come stringa hardcoded.

In VS Code, IntelliSense è disponibile per le proprietà dell'oggetto caricato. Ad esempio, è possibile creare un file con valori da condividere tra molti file Bicep. Un esempio è illustrato in questo articolo.

Questa funzione richiede l'interfaccia della riga di comando di Bicep versione 0.16.X o successiva.

La dimensione massima consentita del file è di 1.048.576 caratteri, incluse le terminazioni di riga.

Valore restituito

Contenuto del file come oggetto Any.

Esempi

Nell'esempio seguente viene creato un file YAML contenente valori per un gruppo di sicurezza di rete.

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

Il file viene caricato e convertito in un oggetto JSON. Usare l'oggetto per assegnare valori alla risorsa.

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
      }
    ]
  }
}

È possibile riutilizzare il file di valori in altri file Bicep che distribuiscono un gruppo di sicurezza di rete.

loadTextContent

loadTextContent(filePath, [encoding])

Carica il contenuto del file specificato come stringa.

Spazio dei nomi: sys.

Parametri

Parametro Obbligatorio TIPO Description
filePath Yes corda Percorso del file da caricare. Il percorso è relativo al file Bicep distribuito. Non può contenere variabili.
encoding NO corda Codifica del file. Il valore predefinito è utf-8. Le opzioni disponibili sono: iso-8859-1, us-ascii, utf-16utf-16BE, o utf-8.

Osservazioni:

Usare questa funzione quando si dispone di contenuto archiviato in un file separato. È possibile caricare il contenuto anziché duplicarlo nel file Bicep. Ad esempio, è possibile caricare uno script di distribuzione da un file. Il file viene caricato quando il file Bicep viene compilato nel modello JSON. Non puoi includere nessuna variabile nel percorso del file perché non vengono risolte durante la compilazione sul template. Durante la distribuzione, il modello JSON contiene il contenuto del file come stringa hardcoded.

Per caricare file JSON, usa la loadJsonContent() funzione.

Questa funzione richiede l'interfaccia della riga di comando di Bicep versione 0.4.X o successiva.

La dimensione massima consentita del file è di 131.072 caratteri, incluse le terminazioni di riga.

Valore restituito

Contenuto del file come stringa.

Esempi

Il seguente esempio mostra come caricare uno script da un file e usarlo come script di distribuzione.

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

Passaggi successivi

Per una descrizione delle sezioni in un file Bicep, vedere Informazioni sulla struttura e la sintassi dei file Bicep.