Руководство по использованию стека развертывания с Bicep (предварительная версия)

В этом руководстве описан процесс создания стека развертывания и управления ими. В этом руководстве основное внимание уделяется созданию стека развертывания в группе ресурсов область. Однако вы также можете создавать стеки развертывания в область подписки. Дополнительные сведения о создании стеков развертывания см. в статье "Создание стеков развертывания".

Необходимые компоненты

Создание BICEP-файла

Создайте Bicep-файл в Visual Studio Code для создания учетной записи хранения и виртуальной сети. Этот файл используется для создания стека развертывания.

param resourceGroupLocation string = resourceGroup().location
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param vnetName string = 'vnet${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: resourceGroupLocation
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-11-01' = {
  name: vnetName
  location: resourceGroupLocation
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: 'Subnet-1'
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: 'Subnet-2'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

Сохраните файл Bicep в качестве main.bicep.

Создание стека развертывания

Чтобы создать группу ресурсов и стек развертывания, выполните следующие команды, чтобы обеспечить соответствующий путь к файлу Bicep в зависимости от расположения выполнения.

az group create \
  --name 'demoRg' \
  --location 'centralus'

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Параметр deny-settings-mode назначает определенный тип разрешений управляемым ресурсам, что предотвращает их удаление несанкционированными субъектами безопасности. Дополнительные сведения см. в разделе "Защита управляемых ресурсов для удаления".

Перечисление стека развертывания и управляемых ресурсов

Чтобы проверить развертывание, можно перечислить стек развертывания и перечислить управляемые ресурсы стека развертывания.

Чтобы получить список развернутого стека развертывания, выполните следующие действия.

az stack group show \
  --resource-group 'demoRg' \
  --name 'demoStack'

В выходных данных показаны два управляемых ресурса : одна учетная запись хранения и одна виртуальная сеть:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-08-14-58-28-fd6bb",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT30.1685405S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-08T14:58:28.377564+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-08T14:58:28.377564+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

Вы также можете проверить развертывание, перечислив управляемые ресурсы в стеке развертывания:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Выходные данные должны иметь следующий вид:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-05-20-55-48-38d09",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT29.006353S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetzu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storezu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-05T20:55:48.006789+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-05T20:55:48.006789+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

Обновление стека развертывания

Чтобы обновить стек развертывания, внесите необходимые изменения в базовый файл Bicep, а затем выполните команду для создания стека развертывания или используйте команду set в Azure PowerShell.

В этом руководстве описаны следующие действия.

  • Обновление свойства управляемого ресурса.
  • Добавьте ресурс в стек.
  • Отключите управляемый ресурс.
  • Подключите существующий ресурс к стеку.
  • Удаление управляемого ресурса.

Обновление управляемого ресурса

В конце предыдущего шага у вас есть один стек с двумя управляемыми ресурсами. Вы обновите свойство ресурса учетной записи хранения.

Измените файл main.bicep , чтобы изменить имя SKU на Standard_LRSStandard_GRS:

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_GRS'
  }
}

Обновите управляемый ресурс, выполнив следующую команду:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Чтобы проверить свойство SKU, выполните следующую команду:

az resource list --resource-group 'demoRg'

Добавление управляемого ресурса

В конце предыдущего шага у вас есть один стек с двумя управляемыми ресурсами. Вы добавите еще один ресурс учетной записи хранения в стек.

Измените файл main.bicep, чтобы включить другое определение учетной записи хранения:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Обновите стек развертывания, выполнив следующую команду:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Вы можете проверить развертывание, перечислив управляемые ресурсы в стеке развертывания:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Вы увидите новую учетную запись хранения в дополнение к двум существующим ресурсам.

Отключение управляемого ресурса

В конце предыдущего шага у вас есть один стек с тремя управляемыми ресурсами. Вы отсоедините один из управляемых ресурсов. После отключения ресурса он останется в группе ресурсов.

Измените файл main.bicep, чтобы удалить следующее определение учетной записи хранения на предыдущем шаге:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Обновите стек развертывания, выполнив следующую команду:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Вы можете проверить развертывание, перечислив управляемые ресурсы в стеке развертывания:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

В стеке отображаются два управляемых ресурса. Однако отключенный ресурс по-прежнему указан в группе ресурсов. Вы можете перечислить ресурсы в группе ресурсов, выполнив следующую команду:

az resource list --resource-group 'demoRg'

Присоединение существующего ресурса к стеку

В конце предыдущего шага у вас есть один стек с двумя управляемыми ресурсами. Существует неуправляемый ресурс в той же группе ресурсов, что и управляемые ресурсы. Вы присоедините этот неуправляемый ресурс к стеку.

Измените файл main.bicep , чтобы включить определение учетной записи хранения неуправляемого ресурса:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Обновите стек развертывания, выполнив следующую команду:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Вы можете проверить развертывание, перечислив управляемые ресурсы в стеке развертывания:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Вы увидите три управляемых ресурса.

Удаление управляемого ресурса

В конце предыдущего шага у вас есть один стек с тремя управляемыми ресурсами. На одном из предыдущих шагов вы отсоединили управляемый ресурс. Иногда может потребоваться удалить ресурс, а не отсоединить его. Чтобы удалить ресурс, используйте параметр delete-resources с командой create/set.

Измените файл main.bicep, чтобы удалить следующее определение учетной записи хранения:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Выполните следующую команду с параметром delete-resources:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none' \
  --delete-resources

В дополнение к коммутатору delete-resources доступны два других коммутатора: delete-all и delete-resource-groups. Дополнительные сведения см. в разделе "Отсоединение элементов управления" и "Удаление".

Вы можете проверить развертывание, перечислив управляемые ресурсы в стеке развертывания:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

В стеке отображаются два управляемых ресурса. Ресурс также удаляется из группы ресурсов. Чтобы проверить группу ресурсов, выполните следующую команду:

az resource list --resource-group 'demoRg'

Настройка параметров запрета

При создании стека развертывания можно назначить определенные типы разрешений управляемым ресурсам, что предотвращает их удаление несанкционированными субъектами безопасности. Эти параметры называются параметрами запрета.

Azure CLI включает следующие параметры для настройки назначения запрета:

  • deny-settings-mode: определяет операции, которые запрещены для управляемых ресурсов для защиты от несанкционированных субъектов безопасности, пытающихся удалить или обновить их. Это ограничение применяется ко всем пользователям, если только явно не предоставлен доступ. К значениям относятся: none, denyDeleteи denyWriteAndDelete.
  • deny-settings-apply-to-child-scopes: параметры запрета применяются к дочерним область управления Azure.
  • deny-settings-excluded-actions: список операций управления доступом на основе ролей (RBAC), исключенных из параметров запрета. Разрешено до 200 действий.
  • deny-settings-excluded-principals: список идентификаторов субъектов Microsoft Entra, исключенных из блокировки. Допускается до пяти субъектов.

В этом руководстве описана настройка режима запрета параметров. Дополнительные сведения о других параметрах запрета см. в разделе "Защита управляемых ресурсов для удаления".

В конце предыдущего шага у вас есть один стек с двумя управляемыми ресурсами.

Выполните следующую команду с параметром режима запрета параметров, установленным для запрета на удаление:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'denyDelete'

Следующая команда удаления завершится ошибкой, так как для режима запрета параметров задано значение deny-delete:

az resource delete \
  --resource-group 'demoRg' \
  --name '<storage-account-name>' \
  --resource-type 'Microsoft.Storage/storageAccounts'

Обновите стек с режимом запрета на нет, чтобы завершить остальную часть учебника:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

Экспорт шаблона из стека

Экспортируя стек развертывания, можно создать файл Bicep. Этот файл Bicep служит ресурсом для будущих разработки и последующих развертываний.

az stack group export \
  --name 'demoStack' \
  --resource-group 'demoRg'

Выходные данные можно передать в файл.

Удаление стека развертывания

Чтобы удалить стек развертывания и управляемые ресурсы, выполните следующую команду:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --delete-all

При выполнении команд удаления без всех параметров управляемые ресурсы отсоединяются, но не удаляются. Например:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg'

Следующие параметры можно использовать для управления между отсоединением и удалением.

  • --delete-all: удалите как ресурсы, так и группы ресурсов.
  • --delete-resources: удалите только ресурсы.
  • --delete-resource-groups: удалите только группы ресурсов.

Дополнительные сведения см. в разделе "Удаление стеков развертывания".

Следующие шаги