Fonctions de fichier pour Bicep

Cet article décrit les fonctions Bicep pour le chargement de contenu à partir de fichiers externes.

loadDirectoryFileInfo

loadDirectoryFileInfo(directoryPath, [searchPattern])

Charge des informations de base sur les fichiers d'un répertoire en tant qu'objet Bicep. La fonction charge les fichiers pendant la compilation, pas à l’exécution.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Descriptif
directoryPath Oui ficelle Le chemin d’accès est relatif au fichier Bicep appelant cette fonction. Vous pouvez utiliser des variables si elles sont des constantes de compilation, mais vous ne pouvez pas utiliser de paramètres.
searchPattern Non ficelle Modèle de recherche à utiliser lors du chargement de fichiers. Ce schéma peut inclure des jokers.

Valeur retournée

Tableau d’objets, chacun représentant un fichier dans le répertoire. Chaque objet contient les propriétés suivantes :

Propriété Type Descriptif
Basename ficelle Le nom du fichier.
extension ficelle Extension du fichier.
relativePath ficelle Chemin relatif du modèle actuel.

Examples

L’exemple suivant charge les informations de fichier pour tous les fichiers Bicep dans le ./modules/ répertoire.

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

output dirFileInfoOutput object[] = dirFileInfo

Le dossier ne contient qu’un seul fichier nommé appService.bicep. La sortie est la suivante :

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

loadFileAsBase64

loadFileAsBase64(filePath)

Charge le fichier sous la forme d’une chaîne base64.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Descriptif
filePath Oui ficelle Chemin d’accès au fichier à charger. Le chemin d’accès est relatif au fichier Bicep déployé. Il ne peut pas inclure de variables.

Remarques

Utilisez cette fonction lorsque vous avez du contenu binaire à inclure dans le déploiement. Plutôt que d’encoder manuellement le fichier en une chaîne base64 et de l’ajouter à votre fichier Bicep, chargez le fichier en utilisant cette fonction. Le fichier est chargé lorsque le fichier Bicep est compilé sur un modèle JSON. Vous ne pouvez pas utiliser de variables dans le chemin du fichier car le compilateur ne les résout pas lors de la compilation vers le modèle. Pendant le déploiement, le modèle JSON contient le contenu du fichier sous forme de chaîne codée en dur.

Cette fonction nécessite Bicep CLI version 0.4.X ou ultérieure.

La taille maximale autorisée du fichier est de 96 Ko.

Valeur retournée

Fichier sous la forme d’une chaîne base64.

Examples

L’exemple suivant charge un script PowerShell sous forme de chaîne base64 et l’utilise avec l’extension de script personnalisé pour une machine virtuelle (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

Cet exemple n’utilise pas le paramètre PowerShell -EncodedCommand . -EncodedCommand attend une commande codée en UTF-16LE. Cet exemple transmet plutôt une chaîne base64 à PowerShell et la décode explicitement en UTF-8 avant d’invoquer le script.

Le fichier script est chargé lors de la compilation Bicep et intégré dans le modèle JSON généré sous forme de chaîne encodée en base64. Lorsque le déploiement s’exécute, PowerShell décode la chaîne et invoque le script sur la VM. Cette approche est utile lors de l’intégration directe du contenu de script dans commandToExecute, car elle évite de nombreux problèmes de citations, d’échappements et de nouvelles lignes qui peuvent survenir avec le contenu multiligne.

Vous pouvez aussi encoder une chaîne multi-ligne en ligne et base64() passer des paramètres nommés au script décodé. Pour plus d’informations, voir le littéral de la chaîne multiligne.

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

Cet exemple fonctionne parce que la valeur de l’argument (MyValue) ne contient aucun caractère spécial. Le constructeur simple join/map n’échappe pas ni ne cite de valeurs. Il échouera si une valeur contient des espaces (qui doivent être enroulés entre guillemets), ou des guillemets simples, doubles guillemets ou d’autres caractères spécifiques à l’analyseur d’arguments en ligne de commande de PowerShell (qui doit être échappé avec replace()).

Pour un exemple complet qui gère correctement les booléens, entiers, chaînes avec évasion complète, tableaux et objets, voir Créer un script de déploiement avec entrées et sorties complexes.

loadJsonContent

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

Charge le fichier JSON spécifié en tant qu’objet Any.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Descriptif
filePath Oui ficelle Chemin d’accès au fichier à charger. Le chemin d’accès est relatif au fichier Bicep déployé. Il ne peut pas inclure de variables.
jsonPath Non ficelle Expression JSONPath pour spécifier que seule une partie du fichier est chargée.
encodage Non ficelle Encodage de fichier. La valeur par défaut est utf-8. Les options disponibles sont les suivantes : iso-8859-1, , us-asciiutf-16, utf-16BE, ou utf-8.

Remarques

Utilisez cette fonction lorsque vous avez du contenu JSON ou du contenu JSON minifié que vous stockez dans un fichier séparé. Au lieu de dupliquer le contenu JSON dans votre fichier Bicep, utilisez cette fonction pour charger le contenu. Vous pouvez charger une partie d’un fichier JSON en spécifiant un chemin JSON. Le compilateur Bicep charge le fichier lorsqu’il compile le fichier Bicep dans le modèle JSON. Vous ne pouvez pas inclure de variables dans le chemin du fichier car le compilateur ne peut pas les résoudre lors de la compilation vers le modèle. Pendant le déploiement, le modèle JSON contient le contenu du fichier sous forme de chaîne codée en dur.

Dans VS Code, IntelliSense est disponible pour les propriétés de l’objet chargé. Par exemple, vous pouvez créer un fichier avec des valeurs à partager sur de nombreux fichiers Bicep. Un exemple est illustré dans cet article.

Cette fonction nécessite Bicep CLI version 0.7.X ou ultérieure.

La taille maximale autorisée du fichier est de 1 048 576 caractères, y compris les terminaisons de ligne.

Valeur retournée

Contenu du fichier en tant qu’objet Any.

Examples

L’exemple suivant crée un fichier JSON qui contient des valeurs pour un groupe de sécurité réseau.

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

Vous chargez ce fichier et le convertissez en objet JSON. Vous utilisez l’objet pour affecter des valeurs à la ressource.

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

Vous pouvez réutiliser le fichier de valeurs dans d’autres fichiers Bicep qui déploient un groupe de sécurité réseau.

loadYamlContent

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

Charge le fichier YAML spécifié en tant qu’objet Any.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Descriptif
filePath Oui ficelle Chemin d’accès au fichier à charger. Le chemin d’accès est relatif au fichier Bicep déployé. Il ne peut pas inclure de variables.
pathFilter Non ficelle Le filtre de chemin d’accès est une expression JSONPath pour spécifier que seule une partie du fichier est chargée.
encodage Non ficelle Encodage de fichier. La valeur par défaut est utf-8. Les options disponibles sont les suivantes : iso-8859-1, , us-asciiutf-16, utf-16BE, ou utf-8.

Remarques

Utilisez cette fonction lorsque vous avez du contenu YAML ou du contenu YAML minifié que vous stockez dans un fichier séparé. Au lieu de dupliquer le contenu YAML dans votre fichier Bicep, utilisez cette fonction pour charger le contenu. Vous pouvez charger une partie d’un fichier YAML en spécifiant un filtre de chemin d’accès. Le compilateur Bicep charge le fichier lorsqu’il compile le fichier Bicep vers le modèle YAML. Vous ne pouvez pas inclure de variables dans le chemin du fichier car le compilateur ne peut pas les résoudre lors de la compilation vers le modèle. Pendant le déploiement, le modèle YAML contient le contenu du fichier sous forme de chaîne codée en dur.

Dans VS Code, IntelliSense est disponible pour les propriétés de l’objet chargé. Par exemple, vous pouvez créer un fichier avec des valeurs à partager sur de nombreux fichiers Bicep. Un exemple est illustré dans cet article.

Cette fonction nécessite Bicep CLI version 0.16.X ou ultérieure.

La taille maximale autorisée du fichier est de 1 048 576 caractères, y compris les terminaisons de ligne.

Valeur retournée

Contenu du fichier en tant qu’objet Any.

Examples

L’exemple suivant crée un fichier YAML qui contient des valeurs pour un groupe de sécurité réseau.

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

Vous chargez ce fichier et le convertissez en objet JSON. Vous utilisez l’objet pour affecter des valeurs à la ressource.

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

Vous pouvez réutiliser le fichier de valeurs dans d’autres fichiers Bicep qui déploient un groupe de sécurité réseau.

loadTextContent

loadTextContent(filePath, [encoding])

Charge le contenu du fichier spécifié sous forme de chaîne.

Espace de noms : sys.

Paramètres

Paramètre Obligatoire Type Descriptif
filePath Oui ficelle Chemin d’accès au fichier à charger. Le chemin d’accès est relatif au fichier Bicep déployé. Elle ne peut pas contenir de variables.
encodage Non ficelle Encodage de fichier. La valeur par défaut est utf-8. Les options disponibles sont les suivantes : iso-8859-1, , us-asciiutf-16, utf-16BE, ou utf-8.

Remarques

Utilisez cette fonction lorsque vous avez du contenu stocké dans un fichier distinct. Vous pouvez charger le contenu plutôt que de le dupliquer dans votre fichier Bicep. Par exemple, vous pouvez charger un script de déploiement à partir d’un fichier. Le fichier est chargé lorsque le fichier Bicep est compilé sur le modèle JSON. Vous ne pouvez pas inclure de variables dans le chemin du fichier car elles ne sont pas résolues lors de la compilation vers le modèle. Pendant le déploiement, le modèle JSON contient le contenu du fichier sous forme de chaîne codée en dur.

Pour charger des fichiers JSON, utilisez la loadJsonContent() fonction.

Cette fonction nécessite Bicep CLI version 0.4.X ou ultérieure.

La taille maximale autorisée du fichier est de 131 072 caractères, y compris les extrémités de ligne.

Valeur retournée

Contenu du fichier sous forme de chaîne.

Examples

L’exemple suivant montre comment charger un script à partir d’un fichier et l’utiliser pour un script de déploiement.

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

Étapes suivantes

Pour obtenir une description des sections d’un fichier Bicep, consultez Comprendre la structure et la syntaxe des fichiers Bicep.