Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описаны функции Bicep для загрузки содержимого из внешних файлов.
loadDirectoryFileInfo
loadDirectoryFileInfo(directoryPath, [searchPattern])
Загружает базовую информацию о файлах каталога в виде объекта Bicep. Функция загружает файлы во время компиляции, а не во время выполнения.
Пространство имен: sys.
Параметры
| Параметр | Обязательно | Тип | Description |
|---|---|---|---|
| directoryPath | Да | струна | Путь относительно файла Bicep, вызывающего эту функцию. Вы можете использовать переменные, если они являются константами по времени компиляции, но параметры использовать нельзя. |
| searchPattern | нет | струна | Шаблон поиска, используемый при загрузке файлов. Эта схема может включать джокеры. |
Возвращаемое значение
Массив объектов, каждый из которых представляет файл в каталоге. Каждый объект содержит следующие свойства:
| Недвижимость | Тип | Description |
|---|---|---|
| baseName | струна | Имя файла. |
| Расширение | струна | Расширение файла. |
| relativePath | струна | Относительный путь к текущему шаблону. |
Примеры
В следующем примере загружаются сведения о файле для всех файлов Bicep в каталоге ./modules/ .
var dirFileInfo = loadDirectoryFileInfo('./modules/', '*.bicep')
output dirFileInfoOutput object[] = dirFileInfo
Папка содержит только один файл с именем appService.bicep. Результат выглядит так:
[{"relativePath":"modules/appService.bicep","baseName":"appService.bicep","extension":".bicep"}]
loadFileAsBase64
loadFileAsBase64(filePath)
Загружает файл в виде строки base64.
Пространство имен: sys.
Параметры
| Параметр | Обязательно | Тип | Description |
|---|---|---|---|
| filePath | Да | струна | Путь к загружению файла. Путь относительно развернутого Bicep-файла. Не удается включить переменные. |
Замечания
Используйте эту функцию, когда у вас есть бинарный контент, который вы хотите включить в развертывание. Вместо того чтобы вручную кодировать файл в строку base64 и добавлять его в файл Bicep, загружайте файл с помощью этой функции. Файл загружается при компиляции Bicep-файла в шаблон JSON. Нельзя использовать переменные в пути к файлу, потому что компилятор не разрешает их при компиляции в шаблон. Во время развертывания шаблон JSON содержит содержимое файла как жестко закодированную строку.
Для этой функции требуется интерфейс командной строки Bicep версии 0.4.X или более поздней.
Максимальный допустимый размер файла составляет 96 КБ.
Возвращаемое значение
Файл в виде строки base64.
Примеры
Следующий пример загружает скрипт PowerShell в виде строки base64 и использует его вместе с расширением Custom Script Extension для виртуальной машины (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
В этом примере параметр PowerShell -EncodedCommand не использован.
-EncodedCommand ожидает команды, закодированной UTF-16LE. В этом примере вместо этого строка base64 передаётся в PowerShell и явно декодирует её как UTF-8 перед вызовом скрипта.
Файл скрипта загружается во время компиляции Bicep и встраивается в сгенерированный шаблон JSON в виде строки, закодированной в base64. Когда развертывание запускается, PowerShell декодирует строку и вызывает скрипт на виртуальной машине. Этот подход полезен при встраивании содержимого скрипта напрямую в commandToExecute, поскольку он избегает множества проблем с цитированием, побегом и новыми строками, которые могут возникнуть при многострочном содержимом скриптов.
Вы также можете закодировать встроенную многострочную строку и base64() передавать именованные параметры декодированному скрипту. Для получения дополнительной информации см. многострочный литерал.
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
Этот пример работает потому, что значение аргумента (MyValue) не содержит специальных символов. Простой join/map строитель не уходит и не цитирует значения. Он провалится, если какое-либо значение содержит пробелы (которые должны быть обернуты в кавычки), или одиночные кавычки, двойные кавычки или другие символы, специфические для парсера командной строки PowerShell (который нужно отклонять с replace()помощью ).
Для полного примера, который корректно обрабатывает булевые значения, целые числа, строки с полным выходом, массивы и объекты, см. раздел Create a Deployment Script с комплексными входами и выходами.
loadJsonContent
loadJsonContent(filePath, [jsonPath], [encoding])
Загружает указанный JSON-файл в виде объекта Any.
Пространство имен: sys.
Параметры
| Параметр | Обязательно | Тип | Description |
|---|---|---|---|
| filePath | Да | струна | Путь к загружению файла. Путь относительно развернутого Bicep-файла. Не удается включить переменные. |
| jsonPath | нет | струна | Выражение JSONPath, указывающее, что загружается только часть файла. |
| encoding | нет | струна | Кодировка файла. Значение по умолчанию — utf-8. Доступны следующие варианты: iso-8859-1, , us-asciiutf-16, utf-16BEили utf-8. |
Замечания
Используйте эту функцию, когда у вас есть JSON-контент или минифицированный JSON-контент, который вы храните в отдельном файле. Вместо копирования JSON-контента в файле Bicep используйте эту функцию для загрузки контента. Вы можете загрузить часть JSON-файла, указав путь к JSON. Компилятор Bicep загружает файл при компиляции файла Bicep в шаблон JSON. Нельзя включать переменные в путь к файлу, потому что компилятор не может их разрешить при компиляции в шаблон. Во время развертывания шаблон JSON содержит содержимое файла как жестко закодированную строку.
В VS Code IntelliSense доступен для свойств загруженного объекта. Например, можно создать файл со значениями для общего доступа ко многим файлам Bicep. Пример показан в этой статье.
Для этой функции требуется интерфейс командной строки Bicep версии 0.7.X или более поздней.
Максимальный допустимый размер файла составляет 1 048 576 символов, включая окончания строки.
Возвращаемое значение
Содержимое файла как объекта Any.
Примеры
В следующем примере создается JSON-файл, содержащий значения для группы безопасности сети.
{
"description": "Allows SSH traffic",
"protocol": "Tcp",
"sourcePortRange": "*",
"destinationPortRange": "22",
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 100,
"direction": "Inbound"
}
Вы загружаете этот файл и преобразуете его в объект JSON. Объект используется для назначения значений ресурсу.
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
}
]
}
}
Вы можете повторно использовать файл значений в других файлах Bicep, которые развертывают группу безопасности сети.
loadYamlContent
loadYamlContent(filePath, [pathFilter], [encoding])
Загружает указанный ФАЙЛ YAML в виде объекта Any.
Пространство имен: sys.
Параметры
| Параметр | Обязательно | Тип | Description |
|---|---|---|---|
| filePath | Да | струна | Путь к загружению файла. Путь относительно развернутого Bicep-файла. Не удается включить переменные. |
| pathFilter | нет | струна | Фильтр пути — это выражение JSONPath, указывающее, что загружается только часть файла. |
| encoding | нет | струна | Кодировка файла. Значение по умолчанию — utf-8. Доступны следующие варианты: iso-8859-1, , us-asciiutf-16, utf-16BEили utf-8. |
Замечания
Используйте эту функцию, если у вас есть YAML-контент или минифицированный YAML-контент, который вы храните в отдельном файле. Вместо дублирования содержимого YAML в вашем файле Bicep используйте эту функцию для загрузки содержимого. Вы можете загрузить часть ФАЙЛА YAML, указав фильтр пути. Компилятор Bicep загружает файл при компиляции файла Bicep в шаблон YAML. Нельзя включать переменные в путь к файлу, потому что компилятор не может их разрешить при компиляции в шаблон. Во время развертывания шаблон YAML содержит содержимое файла как жестко закодированную строку.
В VS Code IntelliSense доступен для свойств загруженного объекта. Например, можно создать файл со значениями для общего доступа ко многим файлам Bicep. Пример показан в этой статье.
Для этой функции требуется интерфейс командной строки Bicep версии 0.16.X или более поздней.
Максимальный допустимый размер файла составляет 1 048 576 символов, включая окончания строки.
Возвращаемое значение
Содержимое файла как объекта Any.
Примеры
В следующем примере создается ФАЙЛ YAML, содержащий значения для группы безопасности сети.
description: "Allows SSH traffic"
protocol: "Tcp"
sourcePortRange: "*"
destinationPortRange: "22"
sourceAddressPrefix: "*"
destinationAddressPrefix: "*"
access: "Allow"
priority: 100
direction: "Inbound"
Вы загружаете этот файл и преобразуете его в объект JSON. Объект используется для назначения значений ресурсу.
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
}
]
}
}
Вы можете повторно использовать файл значений в других файлах Bicep, которые развертывают группу безопасности сети.
loadTextContent
loadTextContent(filePath, [encoding])
Загружает содержимое указанного файла в виде строки.
Пространство имен: sys.
Параметры
| Параметр | Обязательно | Тип | Description |
|---|---|---|---|
| filePath | Да | струна | Путь к загружению файла. Путь относительно развернутого Bicep-файла. Он не может содержать переменные. |
| encoding | нет | струна | Кодировка файла. Значение по умолчанию — utf-8. Доступны следующие варианты: iso-8859-1, , us-asciiutf-16, utf-16BEили utf-8. |
Замечания
Используйте эту функцию при наличии содержимого, хранящегося в отдельном файле. Вы можете загрузить содержимое, а не дублировать его в файле Bicep. Например, можно загрузить скрипт развертывания из файла. Файл загружается при компиляции Bicep-файла в шаблон JSON. Вы не можете включать переменные в путь к файлу, потому что они не разрешаются при компиляции в шаблон. Во время развертывания шаблон JSON содержит содержимое файла как жестко закодированную строку.
Чтобы загрузить JSON-файлы, используйте функцию loadJsonContent() .
Для этой функции требуется интерфейс командной строки Bicep версии 0.4.X или более поздней.
Максимальный допустимый размер файла составляет 131 072 символов, включая окончания строки.
Возвращаемое значение
Содержимое файла в виде строки.
Примеры
Следующий пример показывает, как загрузить скрипт из файла и использовать его для скрипта развертывания.
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'
}
}
Дальнейшие шаги
Описание разделов в файле Bicep приведено в статье Общие сведения о структуре и синтаксисе файлов Bicep.