Управление назначениями с помощью PowerShell

Important

Azure Blueprints (предварительная версия) будет выведена из эксплуатации 31 января 2027 года, при этом поэтапный вывод из эксплуатации начнется 31 июля 2026 года. Перенесите существующие определения и назначения схем в стеки развертывания (рекомендуется) и спецификации шаблонов. Артефакты схемы преобразуются в JSON-шаблоны ARM или Bicep-файлы, которые используются для определения стеков развертывания. Сведения о полном поэтапном графике, последствиях и часто задаваемых вопросах см. в разделе О прекращении поддержки Azure Blueprints или https://aka.ms/AzureBlueprintsRetirement. Сведения о том, как создать артефакт в качестве ресурса ARM, см. в статье:

Назначением схемы можно управлять с помощью модуля Az.Blueprint Azure PowerShell. Модуль поддерживает получение, создание, обновление и удаление назначений. Модуль также может получить сведения о существующих определениях схемы. В этой статье описывается, как установить модуль и начать использовать его.

Добавление модуля Az.Blueprint

Чтобы Azure PowerShell мог управлять назначениями схем, необходимо добавить модуль. Этот модуль можно использовать с локально установленным PowerShell, с Azure Cloud Shell или с образом Docker Azure PowerShell.

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

Для модуля Azure Blueprints требуется следующее программное обеспечение:

  • Azure PowerShell 1.5.0 или более поздней версии. Если она еще не установлена, выполните эти инструкции.
  • PowerShellGet 2.0.1 или более поздней версии. Если он не установлен или не обновлен, следуйте этим инструкциям.

Установка модуля

Модуль Azure Blueprints для PowerShell — Az.Blueprint.

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

    # Install the Azure Blueprints module from PowerShell Gallery
    Install-Module -Name Az.Blueprint
    

    Note

    Если Az.Accounts уже установлен, для принудительной установки может потребоваться использовать -AllowClobber .

  2. Убедитесь, что модуль импортирован и является правильной версией (0.2.6):

    # Get a list of commands for the imported Az.Blueprint module
    Get-Command -Module 'Az.Blueprint' -CommandType 'Cmdlet'
    

Получение определений схемы

Первым шагом при работе с назначением часто является получение ссылки на определение шаблона. Командлет Get-AzBlueprint получает одно или несколько определений схемы. Командлет может получать определения схем из группы управления с помощью -ManagementGroupId {mgId} или из подписки с помощью -SubscriptionId {subId}. Параметр Name получает определение схемы, но его необходимо использовать с ManagementGroupId или SubscriptionId. Версия может использоваться с именем, чтобы точнее указать, какое определение шаблона будет возвращено. Вместо Version переключатель -LatestPublished выбирает последнюю опубликованную версию.

В следующем примере используется Get-AzBlueprint для получения всех версий определения схемы с именем "101-blueprints-definition-subscription" из определенной подписки, представленной как {subId}:

# Login first with Connect-AzAccount if not using Cloud Shell

# Get all versions of the blueprint definition in the specified subscription
$blueprints = Get-AzBlueprint -SubscriptionId '{subId}' -Name '101-blueprints-definition-subscription'

# Display the blueprint definition object
$blueprints

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

Name                 : 101-blueprints-definition-subscription
Id                   : /subscriptions/{subId}/providers/Microsoft.Blueprint/blueprints/101
                       -blueprints-definition-subscription
DefinitionLocationId : {subId}
Versions             : {1.0, 1.1}
TimeCreated          : 2019-02-25
TargetScope          : Subscription
Parameters           : {storageAccount_storageAccountType, storageAccount_location,
                       allowedlocations_listOfAllowedLocations, [Usergrouporapplicationname]:Reader_RoleAssignmentName}
ResourceGroups       : ResourceGroup

Параметры плана в определении плана можно развернуть, чтобы показать дополнительную информацию.

$blueprints.Parameters
Key                                                    Value
---                                                    -----
storageAccount_storageAccountType                      Microsoft.Azure.Commands.Blueprint.Models.PSParameterDefinition
storageAccount_location                                Microsoft.Azure.Commands.Blueprint.Models.PSParameterDefinition
allowedlocations_listOfAllowedLocations                Microsoft.Azure.Commands.Blueprint.Models.PSParameterDefinition
[Usergrouporapplicationname]:Reader_RoleAssignmentName Microsoft.Azure.Commands.Blueprint.Models.PSParameterDefinition

Получить назначения шаблона

Если назначение схемы уже существует, вы можете получить ссылку на нее с помощью командлета Get-AzBlueprintAssignment . Командлет принимает SubscriptionId и Name в качестве необязательных параметров. Если Идентификатор подписки не указан, используется текущий контекст подписки.

В следующем примере используется Get-AzBlueprintAssignment для получения одного назначения схемы с именем 'Assignment-lock-resource-groups' из конкретной подписки, обозначенной как {subId}:

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the blueprint assignment in the specified subscription
$blueprintAssignment = Get-AzBlueprintAssignment -SubscriptionId '{subId}' -Name 'Assignment-lock-resource-groups'

# Display the blueprint assignment object
$blueprintAssignment

Пример выходных данных для назначения схемы выглядит следующим образом:

Name              : Assignment-lock-resource-groups
Id                : /subscriptions/{subId}/providers/Microsoft.Blueprint/blueprintAssignme
                    nts/Assignment-lock-resource-groups
Scope             : /subscriptions/{subId}
LastModified      : 2019-02-19
LockMode          : AllResourcesReadOnly
ProvisioningState : Succeeded
Parameters        :
ResourceGroups    : ResourceGroup

Создать назначения шаблона

Если назначение схемы еще не существует, его можно создать с помощью командлета New-AzBlueprintAssignment . Этот командлет использует следующие параметры:

  • Имя [обязательно]

    • Указывает название назначения схемы
    • Должен быть уникальным и еще не существовать в SubscriptionId
  • Схема [обязательный]

    • Указывает определение схемы для назначения
    • Использование Get-AzBlueprint для получения эталонного объекта
  • Расположение [обязательно]

    • Указывает регион, в котором будут созданы управляемое удостоверение, назначаемое системой, и объект развертывания подписки.
  • Подписка (необязательно)

    • Указывает подписку, в которую развертывается это назначение.
    • Если это не указано, по умолчанию используется контекст текущей подписки.
  • Блокировка (необязательно)

    • Определяет блокировку ресурсов плана, используемую для развернутых ресурсов
    • Поддерживаемые параметры: None, AllResourcesReadOnly, AllResourcesDoNotDelete
    • Если значение не указано, по умолчанию используется значение None
  • SystemAssignedIdentity (необязательно)

    • Выберите, чтобы создать управляемое удостоверение, назначаемое системой для назначения, и развернуть ресурсы
    • Используется по умолчанию для набора параметров «identity»
    • Невозможно использовать с UserAssignedIdentity
  • UserAssignedIdentity (необязательно)

    • Указывает управляемую идентификацию, назначаемую пользователем, используемую для назначения и развертывания ресурсов
    • Часть набора параметров "identity"
    • Невозможно использовать с SystemAssignedIdentity
  • Параметр (необязательно)

    • Хэш-таблица пар "ключ-значение" для задания динамических параметров в назначении схемы

    • По умолчанию для динамического параметра используется значение defaultValue в определении.

    • Если параметр не указан и не имеет значения по умолчанию, параметр не является необязательным

      Note

      Параметр не поддерживает secureStrings.

  • ResourceGroupParameter (необязательно)

    • Хэш-таблица артефактов группы ресурсов
    • Каждый заполнитель артефакта группы ресурсов содержит пары "ключ-значение" для динамической установки Name и Location для этого артефакта группы ресурсов
    • Если параметр группы ресурсов не указан и не имеет значения по умолчанию, параметр группы ресурсов не является необязательным.
  • AssignmentFile (необязательно)

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

Пример 1. Предоставление параметров

В следующем примере создается новое назначение версии "1.1" определения схемы "my-blueprint", полученного с помощью Get-AzBlueprint, задается расположение управляемого удостоверения и объекта назначения как "westus2", ресурсы блокируются с помощью AllResourcesReadOnly, а также задаются хеш-таблицы для Parameter и ResourceGroupParameter для конкретной подписки, представленной как {subId}:

# Login first with Connect-AzAccount if not using Cloud Shell

# Get version '1.1' of the blueprint definition in the specified subscription
$bpDefinition = Get-AzBlueprint -SubscriptionId '{subId}' -Name 'my-blueprint' -Version '1.1'

# Create the hash table for Parameters
$bpParameters = @{storageAccount_storageAccountType='Standard_GRS'}

# Create the hash table for ResourceGroupParameters
# ResourceGroup is the resource group artifact placeholder name
$bpRGParameters = @{ResourceGroup=@{name='storage_rg';location='westus2'}}

# Create the new blueprint assignment
$bpAssignment = New-AzBlueprintAssignment -Name 'my-blueprint-assignment' -Blueprint $bpDefinition `
    -SubscriptionId '{subId}' -Location 'westus2' -Lock AllResourcesReadOnly `
    -Parameter $bpParameters -ResourceGroupParameter $bpRGParameters

Пример выходных данных для создания назначения схемы выглядит следующим образом:

Name              : my-blueprint-assignment
Id                : /subscriptions/{subId}/providers/Microsoft.Blueprint/blueprintAssi
                    gnments/my-blueprint-assignment
Scope             : /subscriptions/{subId}
LastModified      : 2019-03-13
LockMode          : AllResourcesReadOnly
ProvisioningState : Creating
Parameters        : {storageAccount_storageAccountType}
ResourceGroups    : ResourceGroup

Пример 2. Использование файла определения назначения JSON

В следующем примере создается почти то же назначение, что и пример 1. Вместо передачи параметров командлету в примере показано использование файла определения назначения JSON и параметра AssignmentFile . Кроме того, свойство excludedPrincipals настраивается как часть блокировок. Для excludedPrincipals нет параметра PowerShell, и это свойство можно задать только в JSON-файле определения назначения.

{
  "identity": {
    "type": "SystemAssigned"
  },
  "location": "westus2",
  "properties": {
    "description": "Assignment of the 101-blueprint-definition-subscription",
    "blueprintId": "/subscriptions/{subId}/providers/Microsoft.Blueprint/blueprints/101-blueprints-definition-subscription",
    "locks": {
      "mode": "AllResourcesReadOnly",
      "excludedPrincipals": [
          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
          "38833b56-194d-420b-90ce-cff578296714"
      ]
    },
    "parameters": {
      "storageAccount_storageAccountType": {
        "value": "Standard_GRS"
      }
    },
    "resourceGroups": {
      "ResourceGroup": {
        "name": "storage_rg",
        "location": "westus2"
      }
    }
  }
}
# Login first with Connect-AzAccount if not using Cloud Shell

# Create the new blueprint assignment
$bpAssignment = New-AzBlueprintAssignment -Name 'my-blueprint-assignment' -SubscriptionId '{subId}' `
    -AssignmentFile '.\assignment.json'

Пример файла определения назначения JSON для управляемого удостоверения, назначаемого пользователем, см. в теле запроса в разделе Пример: назначение с управляемым удостоверением, назначаемым пользователем для REST API.

Обновить назначения шаблона

Иногда требуется обновить уже созданное назначение проекта. Командлет Set-AzBlueprintAssignment выполняет это действие. Командлет принимает большинство тех же параметров, что и командлет New-AzBlueprintAssignment, что позволяет обновить всё, что было задано для назначения. Исключения : Name, Blueprint и SubscriptionId. Обновляются только указанные значения.

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

  • Имя [обязательно]

    • Указывает имя назначения схемы для обновления
    • Используется для поиска назначения для обновления, а не для изменения назначения.
  • Схема [обязательный]

    • Указывает определение плана для назначения плана
    • Использование Get-AzBlueprint для получения эталонного объекта
    • Используется для поиска назначения для обновления, а не для изменения назначения.
  • Расположение (необязательно)

    • Указывает регион, в котором будут созданы управляемое удостоверение, назначаемое системой, и объект развертывания подписки.
  • Подписка (необязательно)

    • Указывает подписку, в которую развертывается это назначение.
    • Если это не указано, по умолчанию используется контекст текущей подписки.
    • Используется для поиска назначения для обновления, а не для изменения назначения.
  • Блокировка (необязательно)

    • Определяет блокировку ресурсов плана, используемую для развернутых ресурсов
    • Поддерживаемые параметры: None, AllResourcesReadOnly, AllResourcesDoNotDelete
  • SystemAssignedIdentity (необязательно)

    • Выберите, чтобы создать управляемое удостоверение, назначаемое системой для назначения, и развернуть ресурсы
    • Используется по умолчанию для набора параметров «identity»
    • Невозможно использовать с UserAssignedIdentity
  • UserAssignedIdentity (необязательно)

    • Указывает управляемую идентификацию, назначаемую пользователем, используемую для назначения и развертывания ресурсов
    • Часть набора параметров "identity"
    • Невозможно использовать с SystemAssignedIdentity
  • Параметр (необязательно)

    • Хэш-таблица пар "ключ-значение" для задания динамических параметров в назначении схемы

    • По умолчанию для динамического параметра используется значение defaultValue в определении.

    • Если параметр не указан и не имеет значения по умолчанию, параметр не является необязательным

      Note

      Параметр не поддерживает secureStrings.

  • ResourceGroupParameter (необязательно)

    • Хэш-таблица артефактов группы ресурсов
    • Каждый заполнитель артефакта группы ресурсов содержит пары "ключ-значение" для динамической установки Name и Location для этого артефакта группы ресурсов
    • Если параметр группы ресурсов не указан и не имеет значения по умолчанию, параметр группы ресурсов не является необязательным.

В следующем примере обновляется назначение для версии '1.1' определения схемы 'my-blueprint', полученного с помощью Get-AzBlueprint, путем изменения режима блокировки:

# Login first with Connect-AzAccount if not using Cloud Shell

# Get version '1.1' of the blueprint definition in the specified subscription
$bpDefinition = Get-AzBlueprint -SubscriptionId '{subId}' -Name 'my-blueprint' -Version '1.1'

# Update the existing blueprint assignment
$bpAssignment = Set-AzBlueprintAssignment -Name 'my-blueprint-assignment' -Blueprint $bpDefinition `
    -SubscriptionId '{subId}' -Lock AllResourcesDoNotDelete

Пример выходных данных для создания назначения схемы выглядит следующим образом:

Name              : my-blueprint-assignment
Id                : /subscriptions/{subId}/providers/Microsoft.Blueprint/blueprintAssi
                    gnments/my-blueprint-assignment
Scope             : /subscriptions/{subId}
LastModified      : 2019-03-13
LockMode          : AllResourcesDoNotDelete
ProvisioningState : Updating
Parameters        : {storageAccount_storageAccountType}
ResourceGroups    : ResourceGroup

Удаление назначений схемы

Когда нужно удалить назначение схемы, Remove-AzBlueprintAssignment командлет обрабатывает это действие. Командлет принимает либо Name, либо InputObject, чтобы указать, какое назначение схемы следует удалить. Идентификатор подпискиявляется обязательным и должен быть предоставлен во всех случаях.

В следующем примере с помощью Get-AzBlueprintAssignment получается существующее назначение схемы, а затем оно удаляется из конкретной подписки, обозначенной как {subId}:

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the blueprint assignment in the specified subscription
$blueprintAssignment = Get-AzBlueprintAssignment -Name 'Assignment-lock-resource-groups'

# Remove the existing blueprint assignment
Remove-AzBlueprintAssignment -InputObject $blueprintAssignment -SubscriptionId '{subId}'

Пример кода

Объединяя все шаги, в следующем примере сначала получается определение схемы, а затем в конкретной подписке, обозначенной как {subId}, создаётся, обновляется и удаляется назначение схемы:

# Login first with Connect-AzAccount if not using Cloud Shell

#region GetBlueprint
# Get version '1.1' of the blueprint definition in the specified subscription
$bpDefinition = Get-AzBlueprint -SubscriptionId '{subId}' -Name 'my-blueprint' -Version '1.1'
#endregion

#region CreateAssignment
# Create the hash table for Parameters
$bpParameters = @{storageAccount_storageAccountType='Standard_GRS'}

# Create the hash table for ResourceGroupParameters
# ResourceGroup is the resource group artifact placeholder name
$bpRGParameters = @{ResourceGroup=@{name='storage_rg';location='westus2'}}

# Create the new blueprint assignment
$bpAssignment = New-AzBlueprintAssignment -Name 'my-blueprint-assignment' -Blueprint $bpDefinition `
    -SubscriptionId '{subId}' -Location 'westus2' -Lock AllResourcesReadOnly `
    -Parameter $bpParameters -ResourceGroupParameter $bpRGParameters
#endregion CreateAssignment

# Wait for the blueprint assignment to finish deployment prior to the next steps

#region UpdateAssignment
# Update the existing blueprint assignment
$bpAssignment = Set-AzBlueprintAssignment -Name 'my-blueprint-assignment' -Blueprint $bpDefinition `
    -SubscriptionId '{subId}' -Lock AllResourcesDoNotDelete
#endregion UpdateAssignment

# Wait for the blueprint assignment to finish deployment prior to the next steps

#region RemoveAssignment
# Remove the existing blueprint assignment
Remove-AzBlueprintAssignment -InputObject $bpAssignment -SubscriptionId '{subId}'
#endregion

Дальнейшие действия