Разработка скрипта развертывания в Bicep
В этой статье приведены примеры разработки скрипта развертывания в Bicep.
Ресурсы скрипта развертывания могут иметь длительность развертывания. Для эффективной разработки и тестирования этих скриптов рекомендуется установить выделенную среду разработки, например экземпляр контейнера Azure (ACI) или экземпляр Docker. Дополнительные сведения см. в разделе "Создание среды разработки".
Синтаксис
Следующий файл Bicep является примером ресурса скрипта развертывания. Дополнительные сведения см. в последней схеме скрипта развертывания.
resource <symbolic-name> 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: '<resource-name>'
location: resourceGroup().location
tags: {}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'<user-assigned-identity-id>': {}
}
}
kind: 'AzureCLI'
properties: {
storageAccountSettings: {
storageAccountName: '<storage-account-name>'
storageAccountKey: '<storage-account-key>'
}
containerSettings: {
containerGroupName: '<container-group-name>'
subnetIds: [
{
id: '<subnet-id>'
}
]
}
environmentVariables: []
azCliVersion: '2.52.0'
arguments: '<script-arguments>'
scriptContent: '''<azure-cli-or-azure-powershell-script>''' // or primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/inlineScript.ps1'
supportingScriptUris: []
timeout: 'P1D'
cleanupPreference: 'OnSuccess'
retentionInterval: 'P1D'
forceUpdateTag: '1'
}
}
В скрипте развертывания укажите следующие значения свойств:
tags
: укажите теги скрипта развертывания. Если служба скриптов развертывания создает два вспомогательных ресурса (учетную запись хранения и экземпляр контейнера), теги передаются обоим ресурсам. Теги можно использовать для идентификации ресурсов. Другим способом определить эти вспомогательные ресурсы является суффиксы, которые содержат azscripts. Дополнительные сведения см. в статье "Мониторинг и устранение неполадок сценариев развертывания".identity
: для версии2020-10-01
API сценариев развертывания или более поздней, назначаемое пользователем управляемое удостоверение является необязательным, если вам не нужно выполнять какие-либо действия , связанные с Azure, в скрипте или выполняете скрипт развертывания в частной сети. Версия2019-10-01-preview
API требует управляемого удостоверения, так как служба скриптов развертывания использует ее для запуска скриптов.При указании
identity
свойства служба скриптов вызываетсяConnect-AzAccount -Identity
перед вызовом пользовательского скрипта. В настоящее время поддерживается только управляемое удостоверение, назначаемое пользователем. Чтобы войти с помощью другого удостоверения в скрипте развертывания, можно вызвать Connect-AzAccount. Дополнительные сведения см. в разделе "Настройка минимальных разрешений".kind
: укажите тип скрипта либоAzurePowerShell
AzureCLI
. Кроме тогоkind
, необходимо указатьazPowerShellVersion
илиazCliVersion
свойство.storageAccountSettings
: укажите параметры для использования имеющейся учетной записи хранения. ЕслиstorageAccountName
не указано, учетная запись хранения создается автоматически. Дополнительные сведения см. в статье "Использование существующей учетной записи хранения".containerSettings
: настройте имя экземпляра контейнера Azure. Сведения о настройке имени группы контейнера см . в разделе "Настройка экземпляра контейнера" далее в этой статье. Сведения о настройкеsubnetIds
запуска скрипта развертывания в частной сети см. в статье Access к частной виртуальной сети.environmentVariables
: укажите переменные среды для передачи скрипту.azPowerShellVersion
/azCliVersion
: укажите используемую версию модуля.См. список поддерживаемые версии Azure CLI.
Внимание
Сценарий развертывания использует доступные образы CLI из Реестр артефактов Microsoft. Обычно требуется около одного месяца для сертификации образа ИНТЕРФЕЙСА командной строки для сценария развертывания. Не используйте версии CLI, выпущенные за последние 30 дней. Чтобы найти даты выпуска образов, ознакомьтесь с заметками о выпуске Azure CLI. Если вы используете неподдерживаемую версию, в сообщении об ошибке выводится список поддерживаемых версий.
arguments
: укажите значения параметров. Значения разделяются пробелами.Скрипт развертывания разбивает аргументы на массив строк путем вызова системного вызова CommandLineToArgvW . Этот шаг необходим, так как аргументы передаются в качестве свойства команды в Экземпляры контейнеров Azure, а свойство команды — массив строк.
Если аргументы содержат escape-символы, дважды экранируйте символы. Например, в предыдущем примере синтаксиса Bicep аргумент имеет значение
-name \"John Dole\"
. Escape-строка имеет значение-name \\"John Dole\\"
.Чтобы передать параметр Bicep типа
object
в качестве аргумента, преобразуйте объект в строку с помощью функции string(), а затем используйте функцию replace() для замены кавычек ("
) на двойные кавычки (\\"
). Например:replace(string(parameters('tables')), '"', '\\"')
Дополнительные сведения см. в разделе Пример файла Bicep.
scriptContent
: укажите содержимое сценария. Это может быть встроенный скрипт или внешний файл скрипта, импортированный с помощью функции loadTextContent . Дополнительные сведения см. в разделе Inline и внешний файл далее в этой статье. Чтобы запустить внешний сценарий, используйтеprimaryScriptUri
.primaryScriptUri
: укажите общедоступный URL-адрес основного скрипта развертывания с поддерживаемыми расширениями файлов. Дополнительные сведения см. в разделе "Использование внешних скриптов " далее в этой статье.supportingScriptUris
: укажите массив общедоступных URL-адресов для вспомогательных файлов, которые вызываются посредствомscriptContent
либоprimaryScriptUri
. Дополнительные сведения см. в разделе Inline и внешний файл далее в этой статье.timeout
: укажите максимально допустимое время выполнения скрипта в формате ISO 8601. Значение по умолчанию —P1D
.forceUpdateTag
: изменение этого значения между развертываниями файлов Bicep заставляет скрипт развертывания выполняться снова. При использованииnewGuid()
илиutcNow()
функции его можно использовать только в значении по умолчанию для параметра. Дополнительные сведения см. в статье "Запуск скрипта более одного раза " в этой статье.cleanupPreference
. Укажите предпочтение очистки двух вспомогательных ресурсов развертывания (учетной записи хранения и экземпляра контейнера) при получении выполнения скрипта в состоянии терминала. Параметром по умолчанию являетсяAlways
удаление вспомогательных ресурсов независимо от состояния терминала (Succeeded
илиFailed
Canceled
). Дополнительные сведения см. в статье "Очистка ресурсов скрипта развертывания" далее в этой статье.retentionInterval
: укажите интервал, для которого служба сохраняет ресурс скрипта развертывания после выполнения скрипта развертывания достигает состояния терминала. Ресурс скрипта развертывания удаляется при истечении этого срока действия. Длительность основывается на методике ISO 8601. Интервал хранения составляет от 1 часа (PT1H
) до 26 часов (PT26H
). Это свойство используется, еслиcleanupPreference
задано значениеOnExpiration
. Дополнительные сведения см. в статье "Очистка ресурсов скрипта развертывания" далее в этой статье.
Другие примеры
- Пример 1. Создание хранилища ключей и использование скрипта развертывания для назначения сертификата хранилищу ключей.
- Пример 2. Создание группы ресурсов на уровне подписки, создание хранилища ключей в группе ресурсов и использование скрипта развертывания для назначения сертификата хранилищу ключей.
- Пример 3. Создание управляемого удостоверения, назначаемого пользователем, назначьте удостоверению роль участника на уровне группы ресурсов, создайте хранилище ключей, а затем используйте скрипт развертывания для назначения сертификата хранилищу ключей.
- Пример 4. Вручную создайте управляемое удостоверение, назначаемое пользователем, и назначьте ему разрешение на использование API Microsoft Graph для создания приложений Microsoft Entra. В файле Bicep используйте скрипт развертывания для создания приложения Microsoft Entra и субъекта-службы, а также для вывода идентификаторов объектов и идентификатора клиента.
Встроенный и внешний файл
Скрипт развертывания может находиться в Bicep-файле или хранить его во внешнем виде в виде отдельного файла.
Использование встроенного скрипта
В следующем файле Bicep показано, как использовать встроенный скрипт.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'inlineCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'set -e; output="Hello $1"; echo $output'
retentionInterval: 'P1D'
}
}
Включите set -e
в скрипт немедленный выход, если команда возвращает ненулевое состояние. Эта практика упрощает процессы отладки ошибок.
Загрузка файла скрипта
Используйте функцию loadTextContent для получения файла скрипта в виде строки. Эта функция позволяет поддерживать скрипт во внешнем файле и обращаться к нему как к скрипту развертывания. Путь, указанный для файла скрипта, относится к файлу Bicep.
Вы можете извлечь встроенный скрипт из предыдущего Bicep-файла в файл hello.sh , а затем поместить его в вложенную папку, называемую скриптами.
output="Hello $1"
echo $output
Затем можно изменить предыдущий файл Bicep, как показано в следующем примере:
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'loadTextContentCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: loadTextContent('./scripts/hello.sh')
retentionInterval: 'P1D'
}
}
Использование внешних сценариев
Вы можете использовать внешние файлы скриптов вместо встроенных скриптов. Поддерживаются только основные скрипты PowerShell с расширением PS1 . Для сценариев CLI первичные скрипты могут содержать любые допустимые расширения скриптов Bash или вообще не имеют расширения. Чтобы использовать внешние файлы скриптов, переключение с scriptContent
primaryScriptUri
помощью .
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'externalScriptCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/hello.sh'
arguments: '-name ${name}'
retentionInterval: 'P1D'
}
}
Внешние файлы сценария должны быть доступны. Чтобы защитить файлы скриптов, хранящиеся в учетных записях хранения Azure, создайте маркер подписанного URL-адреса (SAS) и включите его в URI шаблона. Задайте срок действия, чтобы разрешить достаточно времени для завершения развертывания. Дополнительные сведения см. в статье "Развертывание частного шаблона ARM с помощью маркера SAS".
Вы несете ответственность за обеспечение целостности скрипта, ссылающегося на скрипт развертывания ( primaryScriptUri
или supportingScriptUris
). Указывайте только те надежные сценарии.
Использование вспомогательных сценариев
Можно разделить сложную логику и поместить ее в один или несколько вспомогательных файлов сценария. supportingScriptUris
При необходимости используйте свойство для предоставления массива URI вспомогательным файлам скриптов.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'supportingScriptCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'output="Hello $1"; echo $output; ./hello.sh "$1"'
supportingScriptUris: [
'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/master/samples/deployment-script/hello.sh'
]
retentionInterval: 'P1D'
}
}
Вы можете вызывать вспомогательные файлы скриптов как из встроенных сценариев, так и из основных файлов скриптов. Поддержка файлов сценария не накладывает ограничений на расширение файла.
Вспомогательные файлы копируются в azscripts/azscriptinput во время выполнения. Используйте относительный путь для ссылки на вспомогательные файлы из встроенных скриптов и основных файлов скриптов.
Оценка ресурсов Azure
Чтобы получить доступ к ресурсам Azure, необходимо настроить identity
элемент. В следующем файле Bicep показано, как получить список хранилищ ключей Azure. Кроме того, необходимо предоставить удостоверение управления назначениями пользователей для доступа к хранилищу ключей.
param identity string
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'listKvCLI'
location: location
kind: 'AzureCLI'
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${identity}': {}
}
}
properties: {
azCliVersion: '2.52.0'
scriptContent: 'result=$(az keyvault list); echo $result | jq -c \'{Result: map({id: .id})}\' > $AZ_SCRIPTS_OUTPUT_PATH'
retentionInterval: 'P1D'
}
}
output result object = deploymentScript.properties.outputs
Примечание.
Логика повторных попыток для входа в Azure теперь встроена в скрипт оболочки. Если вы предоставляете разрешения в том же файле Bicep, что и сценарии развертывания, служба сценариев развертывания повторяет вход в течение 10 минут (с 10-секундными интервалами), пока назначение роли управляемого удостоверения не будет реплицировано.
Работа с выходными данными
Подход к обработке выходных данных зависит от типа используемого скрипта — Azure CLI или Azure PowerShell.
Скрипт развертывания Azure CLI использует переменную среды с именем AZ_SCRIPTS_OUTPUT_PATH
, чтобы указать расположение файла для выходных данных скрипта. При запуске скрипта развертывания в файле Bicep оболочка Bash автоматически настраивает эту переменную среды. Его предопределенное значение задается как /mnt/azscripts/azscriptoutput/scriptoutputs.json
.
Выходные данные должны соответствовать допустимой структуре объекта строки JSON. Содержимое файла должно быть отформатировано как пара "ключ-значение". Например, сохраните массив строк как { "MyResult": [ "foo", "bar"] }
. Хранение только недопустимых результатов массива, например [ "foo", "bar" ]
недопустимых.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'outputCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
retentionInterval: 'P1D'
}
}
output text string = deploymentScript.properties.outputs.text
В предыдущем примере используется jq для создания выходных данных. Средство jq поставляется с образами контейнеров. Дополнительные сведения см. в разделе "Настройка среды разработки".
Использование переменных среды
Передача защищенных строк в скрипт развертывания
Переменные среды (EnvironmentVariable
) можно задать в экземплярах контейнеров, чтобы обеспечить динамическую конфигурацию приложения или скрипта, запущенного контейнером. Скрипт развертывания обрабатывает незащищенные и защищенные переменные среды так же, как и Экземпляры контейнеров Azure. Узнайте больше об определении переменных среды для экземпляров контейнеров.
Максимальный допустимый размер переменных среды составляет 64 КБ.
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'passEnvVariablesCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
environmentVariables: [
{
name: 'UserName'
value: 'jdole'
}
{
name: 'Password'
secureValue: 'jDolePassword'
}
]
scriptContent: 'echo "Username is :$Username"; echo "Password is: $Password"'
retentionInterval: 'P1D'
}
}
Системные переменные среды
В следующей таблице перечислены системные переменные среды:
Переменная среды | Значение по умолчанию (CLI) | Значение по умолчанию (PowerShell) | Зарезервировано системой |
---|---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT |
AzureCloud |
AzureCloud |
No |
AZ_SCRIPTS_CLEANUP_PREFERENCE |
Always |
Always |
No |
AZ_SCRIPTS_OUTPUT_PATH |
/mnt/azscripts/azscriptoutput/scriptoutputs.json |
Нет данных | Да |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY |
/mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput |
Неприменимо | Да |
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY |
/mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput |
Неприменимо | Да |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME |
userscript.sh |
userscript.ps1 |
Да |
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME |
primaryscripturi.config |
primaryscripturi.config |
Да |
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME |
supportingscripturi.config |
supportingscripturi.config |
Да |
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME |
scriptoutputs.json |
scriptoutputs.json |
Да |
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME |
executionresult.json |
executionresult.json |
Да |
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY |
Неприменимо | Неприменимо | No |
Пример использования AZ_SCRIPTS_OUTPUT_PATH
см. в статье "Работа с выходными данными " выше в этой статье.
Чтобы получить доступ к переменным среды, используйте следующий код.
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'listEnvVariablesCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
scriptContent: 'echo "AZ_SCRIPTS_AZURE_ENVIRONMENT is : $AZ_SCRIPTS_AZURE_ENVIRONMENT",echo "AZ_SCRIPTS_CLEANUP_PREFERENCE is : $AZ_SCRIPTS_CLEANUP_PREFERENCE",echo "AZ_SCRIPTS_OUTPUT_PATH is : $AZ_SCRIPTS_OUTPUT_PATH",echo "AZ_SCRIPTS_PATH_INPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_INPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME is : $AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME",echo "AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME is : $AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME is : $AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME is : $AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME",echo "AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME is : $AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME",echo "AZ_SCRIPTS_USER_ASSIGNED_IDENTITY is : $AZ_SCRIPTS_USER_ASSIGNED_IDENTITY"'
retentionInterval: 'P1D'
}
}
Использование имеющейся учетной записи хранения
Чтобы скрипт выполнялся и разрешал устранение неполадок, требуется учетная запись хранения и экземпляр контейнера. Можно либо назначить существующую учетную запись хранения, либо разрешить службе сценариев автоматически создавать учетную запись хранения и экземпляр контейнера.
Ниже приведены требования к использованию существующей учетной записи хранения:
В следующей таблице перечислены поддерживаемые типы учетных записей. Столбец для уровней
-SkuName
ссылается на значение или--sku
параметр. Столбец поддерживаемых типов ссылается на-Kind
или--kind
параметр.Уровень Поддерживаемый тип Premium_LRS
FileStorage
Premium_ZRS
FileStorage
Standard_GRS
Storage
,StorageV2
Standard_GZRS
StorageV2
Standard_LRS
Storage
,StorageV2
Standard_RAGRS
Storage
,StorageV2
Standard_RAGZRS
StorageV2
Standard_ZRS
StorageV2
Эти комбинации поддерживают общие папки. Дополнительные сведения см. в разделах Создание общей папки Azure и Типы учетных записей хранения.
Правила брандмауэра для учетных записей хранения пока не поддерживаются. Дополнительные сведения см. в статье Настройка брандмауэров службы хранилища Azure и виртуальных сетей.
Субъект развертывания должен иметь разрешения на управление учетной записью хранения, которая включает чтение, создание и удаление общих папок. Дополнительные сведения см. в разделе "Настройка минимальных разрешений".
Свойство
allowSharedKeyAccess
учетной записи хранения должно иметь значениеtrue
. Единственным способом подключения учетной записи хранения в экземпляре контейнеров Azure (ACI) является ключ доступа.
Чтобы указать существующую учетную запись хранения, добавьте следующий код Bicep в элемент Microsoft.Resources/deploymentScripts
свойства:
param storageAccountName string = 'myStorageAccount'
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
...
properties: {
...
storageAccountSettings: {
storageAccountName: storageAccountName
storageAccountKey: listKeys(resourceId('Microsoft.Storage/storageAccounts', storageAccountName), '2023-01-01').keys[0].value
}
}
}
Полный Microsoft.Resources/deploymentScripts
пример определения см . в разделе "Синтаксис " ранее в этой статье.
При использовании существующей учетной записи хранения служба скриптов создает общую папку с уникальным именем. Сведения о том, как служба сценариев очищает общую папку, см . в статье "Очистка ресурсов скриптов развертывания" далее в этой статье.
Настройка экземпляра контейнера
Для скрипта развертывания требуется новый экземпляр контейнера Azure. Невозможно указать существующий экземпляр контейнера. Однако можно настроить имя группы контейнера с помощью containerGroupName
. Если имя группы не указано, он создается автоматически. Для создания этого экземпляра контейнера требуются дополнительные конфигурации. Дополнительные сведения см. в разделе "Настройка минимальных разрешений".
Можно также указать subnetId
значения для запуска скрипта развертывания в частной сети. Дополнительные сведения см. в статье "Доступ к частной виртуальной сети".
param containerGroupName string = 'mycustomaci'
param subnetId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet'
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
...
properties: {
...
containerSettings: {
containerGroupName: containerGroupName
subnetIds: [
{
id: subnetId
}
]
}
}
}
Выполнение скрипта более одного раза
Выполнение сценария развертывания является идемпотентной операцией. Если нет изменений в каких-либо deploymentScripts
свойствах ресурса, включая встроенный скрипт, скрипт не запускается при повторном развертывании файла Bicep.
Служба сценариев развертывания сравнивает имена ресурсов в файле Bicep с имеющимися ресурсами в той же группе ресурсов. Существует два варианта, если требуется выполнить один и тот же сценарий развертывания несколько раз:
Измените имя ресурса
deploymentScripts
. Например, используйте функцию UTCNow в качестве имени ресурса или в составе имени ресурса. Функцию можно использоватьutcNow
только в значении по умолчанию для параметра.При изменении имени ресурса создается новый ресурс
deploymentScripts
. Целесообразно сохранить журнал выполнения сценария.Укажите другое значение в свойстве
forceUpdateTag
. Например, используйте значениеutcNow
.
Напишите скрипты развертывания, чтобы обеспечить идемпотенс, поэтому случайное повторное выполнение не приведет к изменениям системы. Например, при создании ресурса Azure с помощью скрипта развертывания проверьте его отсутствие перед созданием, чтобы убедиться, что скрипт успешно выполнен или избегает избыточного создания ресурсов.
Использование Microsoft Graph в сценарии развертывания
Скрипт развертывания может использовать Microsoft Graph для создания и работы с объектами в идентификаторе Microsoft Entra.
Команды
При использовании сценариев развертывания Azure CLI можно использовать команды в az ad
группе команд для работы с приложениями, субъектами-службами, группами и пользователями. Вы также можете напрямую вызывать API Microsoft Graph с помощью az rest
команды.
При использовании скриптов развертывания Azure PowerShell можно использовать Invoke-RestMethod
командлет для непосредственного вызова API Microsoft Graph.
Разрешения
Удостоверение, которое использует скрипт развертывания, должно быть авторизовано для работы с API Microsoft Graph с соответствующими разрешениями для выполняемых операций. Необходимо авторизовать удостоверение за пределами файла Bicep, например путем создания управляемого удостоверения, назначаемого пользователем, и назначения ему роли приложения для Microsoft Graph. Дополнительные сведения см . в этом кратком руководстве.
Очистка ресурсов сценария развертывания
Два автоматически созданных вспомогательных ресурса никогда не могут выпустить deploymentScript
ресурс, если только не будут удалены ошибки. Свойство cleanupPreference
управляет жизненным циклом вспомогательных ресурсов. Свойство retentionInterval
управляет жизненным циклом deploymentScript
ресурса. Вот как использовать следующие свойства:
cleanupPreference
: укажите предпочтение очистки двух вспомогательных ресурсов при получении выполнения скрипта в состоянии терминала. Поддерживаются такие значения:Always
: удалите два вспомогательных ресурса после выполнения скрипта в состоянии терминала. При использовании существующей учетной записи хранения служба скриптов удаляет общую папку, созданную службой.deploymentScripts
Так как ресурс по-прежнему может присутствовать после очистки вспомогательных ресурсов, служба скриптов сохраняет результаты выполнения скрипта (например,stdout
), выходные данные и возвращаемое значение перед удалением ресурсов.OnSuccess
: удалите два вспомогательных ресурса, только если выполнение скрипта выполнено успешно. Если вы используете существующую учетную запись хранения, служба скриптов удаляет общую папку только в случае успешного выполнения скрипта.Если выполнение скрипта не выполнено, служба скриптов ожидает истечения срока действия, прежде
retentionInterval
чем очистить вспомогательные ресурсы, а затем ресурс скрипта развертывания.OnExpiration
: удалите два вспомогательных ресурса, только еслиretentionInterval
срок действия параметра истек. Если вы используете существующую учетную запись хранения, служба скриптов удаляет общую папку, но сохраняет учетную запись хранения.
Экземпляр контейнера и учетная запись хранения удаляются в соответствии со значением
cleanupPreference
. Однако если скрипт завершается ошибкой иcleanupPreference
не заданAlways
, процесс развертывания автоматически сохраняет контейнер в течение одного часа или пока контейнер не будет удален. Вы можете использовать время для устранения неполадок скрипта.Чтобы контейнер запускался после успешного развертывания, добавьте в скрипт шаг "спящий режим". Например, добавьте Start-Sleep в конце скрипта. Если вы не добавите шаг сна, контейнер установлен в состояние терминала и не может быть доступен, даже если вы еще не удалили его.
retentionInterval
: укажите интервал времени, в течение которогоdeploymentScript
ресурс будет сохранен до истечения срока действия и удаления.
Примечание.
Мы не рекомендуем использовать учетную запись хранения и экземпляр контейнера, создаваемый службой сценариев для других целей. Эти два ресурса могут быть удалены в зависимости от жизненного цикла скрипта.
Следующие шаги
Из этой статьи вы узнали, как создать ресурсы скрипта развертывания. Чтобы получить дополнительные сведения, обратитесь к разделу