Автоматизируйте переход на лицензирование SQL с оплатой по мере использования в большом масштабе

Относится к:База данных SQL AzureУправляемый экземпляр SQL AzureSQL Server на виртуальных машинах AzureSQL Server с поддержкой Azure Arc

В этой статье описывается, как выполнить следующее:

  • Проверьте и переведите несколько SQL-продуктов на модель лицензирования с оплатой по мере использования с помощью одного скрипта PowerShell.
  • Непрерывно применяйте лицензию pay-as-you-go для одного типа ресурса с помощью Политика Azure.

Автоматизация, описанная в этой статье, применяется к SQL Server, поддерживаемому Azure Arc, SQL Server на Azure Virtual Machines, База данных SQL Azure и Управляемый экземпляр SQL Azure. Скрипт также может обрабатывать Azure-SSIS Integration Runtime в Фабрика данных Azure (Azure-SSIS IR).

Изменение лицензионного соглашения не меняет тип лицензии, настроенный для ваших SQL-ресурсов. Процедуры, описанные в этой статье, помогут вам перевести ресурсы на модель оплаты по мере использования после того, как лицензии SQL с программой Software Assurance, подписки SQL или лицензирование по Соглашению о лицензировании поставщиков услуг (SPLA) перестанут действовать.

Необходимые условия

  • Учетная запись Azure с доступом к клиенту и подпискам, содержащим ресурсы SQL.
  • PowerShell 5 или более позднее с модулем Az PowerShell.
  • Azure CLI, когда вы используете скрипт PowerShell для обновления ресурсов SQL.
  • Роль участника в каждой подписке, которую вы изменяете. Для альтернатив с наименьшими привилегиями проверьте разрешения по типу ресурса.
  • Для режима по расписанию — разрешение на создание назначений ролей в области целевой подписки либо необходимые роли, предварительно назначенные управляемой идентичности учетной записи Automation.
  • Полномочия менять настройки выставления счетов и подтверждать лицензионные условия для целевых ресурсов.

Чтобы избежать локальной установки инструментов, запустите скрипт в Azure Cloud Shell. Cloud Shell включает Azure PowerShell и Azure CLI, а также аутентифицирует сессию. Уточните -TenantId , когда ваш аккаунт может получить доступ к нескольким арендаторам.

Выберите метод автоматизации

Выберите один из вариантов:

  • PowerShell для перехода между ресурсами к лицензированию с оплатой по мере использования.
  • Политика Azure для постоянного применения модели оплаты по мере использования для одного типа ресурса.

Следующая таблица содержит подробную информацию о каждом методе автоматизации:

Сценарий Рекомендуемый способ
Просматривайте или применяйте изменения модели оплаты по мере использования для нескольких типов ресурсов SQL manage-payg-transition.ps1
Переведите все поддерживаемые ресурсы в подписке или арендаторе на лицензию с оплатой по мере использования manage-payg-transition.ps1
Запустите переход на оплату по мере использования по регулярному расписанию manage-payg-transition.ps1 в режиме работы по расписанию
Постоянно применяйте лицензию pay-as-you-use для одного типа ресурса и устраняйте дрейф Пример Политика Azure для конкретного ресурса
Измените один ресурс вручную Статья о лицензировании для конкретного продукта

Проверьте поддерживаемые ресурсы и ценности лицензий

В этой статье описаны процедуры, позволяющие установить -TargetLicenseType в значение PAYG. Скрипт переводит это значение в стоимость оплаты по мере использования, необходимую каждому поставщику ресурсов. Исходные значения показывают общие лицензионные конфигурации, которые переход может заменить.

Resource Целевая стоимость оплаты по мере использования Общие значения источника Поддерживается скриптом Пример Политика Azure
SQL Server, управляемый с помощью Azure Arc PAYG Paid, LicenseOnly Да Соответствие типу лицензий SQL Server с поддержкой Arc
SQL Server на Виртуальных машинах Microsoft Azure PAYG AHUB Да Соответствие типов лицензий SQL Server на Azure VM
База данных SQL Azure и эластичные пулы LicenseIncluded BasePrice Да Соответствие типу лицензии База данных SQL Azure
Управляемый экземпляр SQL Azure и пулы экземпляров LicenseIncluded BasePrice, HybridFailoverRights Да Соответствие типу лицензии Управляемый экземпляр SQL
Azure-SSIS IR LicenseIncluded BasePrice Да В этой статье это не обсуждается

Образцы политик могут перезаписывать дополнительные исходные значения, напримерDR, для SQL Server на виртуальных машинах Azure. Просмотрите выбранный пример перед развертыванием назначения политики.

Поймите, как работает скрипт PowerShell

Вы можете использовать скрипт PowerShell для изменения всех ресурсов внутри группы ресурсов, всех ресурсов внутри подписки и всех ресурсов по одной или нескольким подпискам внутри всего арендатора.

Скрипт самостоятельный и работает с поддерживаемыми SQL-ресурсами. Если для -TargetLicenseType задано значение по умолчанию PAYG, это значение преобразуется в значение оплаты по мере использования, необходимое для каждого типа ресурса, как показано в разделе Обзор поддерживаемых ресурсов и значений лицензий. По умолчанию сгенерированная рабочая папка остаётся после завершения скрипта. Чтобы удалить его после запуска, укажите -cleanDownloads $true.

Скрипт печатает сводку по типу ресурса и указывает причину каждого неисправного или пропущенного ресурса. Когда скрипт находит соответствующие ресурсы, он также создаёт ModifiedResources_<timestamp>.csv отчёт с UpdateResult и UpdateError столбцами.

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

Parameter Принятое значение или по умолчанию Purpose
-Target Arc, Azure, или Both (по умолчанию) Выбирает ресурсы SQL Server с поддержкой Azure Arc, ресурсы Azure SQL и Azure-SSIS IR либо обе группы.
-RunMode Single (по умолчанию) или Scheduled Запускает переход один раз или настраивает ежедневные ранбуки Cлужба автоматизации Azure.
-TargetLicenseType PAYG Выбирает модель оплаты по мере использования в качестве целевой лицензионной модели для процедур, описанных в этой статье.
-targetSubscription ID подписки; все доступные подписки по умолчанию в арендаторе Ограничивает переход на одну подписку.
-targetResourceGroup Название группы ресурсов; все группы ресурсов по умолчанию Ограничивает переход к одной группе ресурсов.
-TenantId Идентификатор арендатора; текущий контекст Az PowerShell по умолчанию Выбирает клиента Microsoft Entra.
-ReportOnly Переключатель; по умолчанию отключён Выводит сведения о ресурсах, соответствующих критериям, не изменяя их.
-WaitForCompletion Переключатель; по умолчанию отключён Ожидает, пока отправленные изменения не достигнут конечного состояния, если это поддерживается.
-UsePcoreLicense No (по умолчанию) или Yes Управляет лицензированием физических ядер для SQL Server, поддерживаемым Azure Arc.
-AutomationAccResourceGroupName Обязательно с -RunMode Scheduled Выбирает группу ресурсов для аккаунта автоматизации.
-AutomationAccountName aaccAzureArcSQLLicenseType по умолчанию Задает имя учетной записи автоматизации.
-Location Обязательно с -RunMode Scheduled Выбирает регион Azure для аккаунта Автоматизации и группы ресурсов.
-cleanDownloads $false (по умолчанию) или $true Удаляет сгенерированную рабочую папку после завершения скрипта.

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

Resource Поведение по умолчанию С -WaitForCompletion
База данных SQL Azure, Управляемый экземпляр SQL Azure Отправляет асинхронный запрос и сообщает RequestSubmitted Ожидания и доклады Updated
SQL Server, управляемый с помощью Azure Arc Отправляет асинхронное обновление расширения и сообщает RequestSubmitted Опрашивает расширение и сообщает Succeeded, Failed или TimedOut
SQL Server на Виртуальных машинах Microsoft Azure Отправляет прямой запрос Azure Resource Manager и отчитываетRequestSubmitted Запускает az sql vm update, ожидает и сообщает Updated
Azure-SSIS IR Ожидания и доклады Updated То же поведение

Ознакомьтесь с переходом на оплату по мере использования

Скрипт manage-payg-transition.ps1 предоставляет одну точку входа для Azure SQL и SQL Server, поддерживаемую ресурсами Azure Arc.

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

  1. Скачайте скрипт:

    $scriptUri = "https://raw.githubusercontent.com/microsoft/sql-server-samples/master/samples/manage/manage-payg-transition/manage-payg-transition.ps1"
    Invoke-WebRequest -Uri $scriptUri -OutFile ".\manage-payg-transition.ps1"
    
  2. Войдите в каталог, содержащий ресурсы:

     Connect-AzAccount -TenantId "<tenant-id>"
    
  3. Запустите предпросмотр только для чтения для одной подписки. Указывайте -TenantId даже если у вас уже есть контекст Azure, чтобы скрипт не использовал неправильный tenant:

    .\manage-payg-transition.ps1 `
        -Target Both `
        -TenantId "<tenant-id>" `
        -targetSubscription "<subscription-id>" `
        -TargetLicenseType PAYG `
        -ReportOnly
    
  4. Если скрипт найдёт совпадающие ресурсы, откройте самый новый отчёт ModifiedResources_<timestamp>.csv. Убедитесь, что каждый перечисленный ресурс должен измениться:

    $report = Get-ChildItem -Filter "ModifiedResources_*.csv" |
        Sort-Object LastWriteTime -Descending |
        Select-Object -First 1
    
    Import-Csv $report.FullName | Format-Table
    

Ресурсы, которые уже используют лицензии с оплатой по мере использования, не представлены в отчёте. Если скрипт не находит соответствующих ресурсов, он не создаёт CSV-файл. Чтобы уменьшить область действия, укажите -targetResourceGroup. Установите для -Target значение Azure, чтобы обрабатывать ресурсы Azure SQL и Azure-SSIS IR. Установите значение Arc, чтобы обрабатывать только ресурсы SQL Server с поддержкой Azure Arc.

Проведите одноразовый переход с оплатой по мере использования с помощью PowerShell

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

  1. Удалите -ReportOnly, и добавьте -WaitForCompletion для ожидания подтвержденных результатов, если поставщик ресурса их поддерживает:

    .\manage-payg-transition.ps1 `
        -Target Both `
        -TenantId "<tenant-id>" `
        -targetSubscription "<subscription-id>" `
        -TargetLicenseType PAYG `
        -WaitForCompletion
    
  2. Просмотрите сгенерированный отчёт CSV. Проверьте каждый Failed или TimedOut результат и подтвердите состояние ресурса для каждого внесенного изменения.

Значение PAYG задает оплату по мере использования в качестве целевой модели лицензирования.

Если опустить -WaitForCompletion, большинство принятых изменений имеют UpdateResult, равный RequestSubmitted. Этот результат означает, что Azure приняла запрос, а не что тип лицензии полностью изменился. Azure-SSIS IR всегда ждёт, потому что команда обновления не поддерживает асинхронное выполнение.

Планируйте повторяющиеся переходы с оплатой по мере использования с помощью PowerShell

Запланированный режим создаёт или обновляет один runbook Cлужба автоматизации Azure для каждой выбранной цели, связывает каждый runbook с ежедневным расписанием запуска и немедленно запускает одноразовое задание. Укажите группу ресурсов для учетной записи службы автоматизации и регион Azure. Имя аккаунта автоматизации по умолчанию — aaccAzureArcSQLLicenseType. Запланированный режим использует управляемую идентификацию учетной записи автоматизации.

  1. Запланируйте переход для Azure SQL и SQL Server с помощью ресурсов Azure Arc в одной подписке:

    .\manage-payg-transition.ps1 `
        -Target Both `
        -RunMode Scheduled `
        -TenantId "<tenant-id>" `
        -targetSubscription "<subscription-id>" `
        -TargetLicenseType PAYG `
        -AutomationAccResourceGroupName "<automation-resource-group>" `
        -AutomationAccountName "<automation-account>" `
        -Location "<azure-region>"
    
  2. В аккаунте автоматизации убедитесь, что ранбуки опубликованы, связаны с ежедневным графиком и могут начать работу с выбранными параметрами.

Если целевой объект Azure включает пулы Управляемый экземпляр SQL, назначьте управляемой идентификации учетной записи автоматизации роль Contributor или настраиваемую роль с Microsoft.Sql/instancePools/read и Microsoft.Sql/instancePools/write. Запланированная настройка не назначает встроенную роль, которая предоставляет эти разрешения.

Обеспечьте лицензирование по мере использования с помощью Политика Azure

Используйте образец Политики Azure для конкретного ресурса, чтобы на постоянной основе обеспечивать применение лицензирования по мере использования и устранять дрейф конфигурации. Каждый образец содержит определение политики, скрипт развертывания и скрипт исправления.

Предупреждение

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

Следующая таблица связывает пакет политик и скрипт развертывания для каждого ресурса:

Resource Пакет политики Скрипт развертывания
SQL Server, управляемый с помощью Azure Arc Соответствие типу лицензий SQL Server с поддержкой Arc deployment.ps1
SQL Server на Виртуальных машинах Microsoft Azure Соответствие типов лицензий SQL Server на Azure VM deployment.ps1
Управляемый экземпляр Azure SQL Соответствие типу лицензии Управляемый экземпляр SQL deployment.ps1
База данных SQL Azure Соответствие типу лицензии База данных SQL Azure deployment.ps1

Используйте значения и роли для выбранного типа ресурса:

Resource Целевая стоимость оплаты по мере использования Исходные значения, которые можно перезаписать Основная обязательная роль Важное ограничение
SQL Server, управляемый с помощью Azure Arc PAYG Paid; Определение портала также поддерживает LicenseOnly Azure Extension for SQL Server Deployment Задание применяет одну цель ко всем совпадающим хостам и не учитывает версию. Охватывайте смешанные поместья отдельно.
SQL Server на Виртуальных машинах Microsoft Azure PAYG AHUB, DR Сотрудник по управлению виртуальными машинами Цель должна соответствовать условиям лицензирования Преимущество гибридного использования Azure или пассивной высокой доступности или аварийного восстановления (HA/DR).
Управляемый экземпляр Azure SQL LicenseIncluded BasePrice, HybridFailoverRights Управляемый экземпляр SQL Contributor HybridFailoverRights Устанавливает licenseType в BasePrice и hybridSecondaryUsage в Passive.
База данных SQL Azure LicenseIncluded BasePrice Соавтор базы данных SQL Политика исключает master базы данных Basic. База данных SQL Azure поддерживает изменение типов лицензий только для подготовленных баз данных vCore, поэтому исключайте или исключайте из присваивания другие базы данных на основе транзакций (DTU) и бессерверные базы.

Для каждого задания также требуется Reader и Resource Policy Contributor. Скрипты развертывания назначают необходимые роли, если учетная запись, под которой выполнен вход, имеет разрешение на создание назначений ролей. Используйте -GrantMissingPermissions вместе со скриптом исправления, чтобы проверить и добавить недостающие роли.

Скрипты развертывания SQL-виртуальной машины, Управляемый экземпляр SQL и SQL Database требуют подтверждения, когда целевое значение требует лицензионной аттестации. Используйте -SkipLicenseConfirmation только в автоматизированном конвейере, где оператор уже подтвердил правомочность и берёт на себя ответственность за соблюдение.

Для SQL Server с поддержкой Arc политика PAYG также настраивает регулярное согласие на выставление счетов. Согласие на продление остаётся в силе, если при последующей передаче тип лицензии изменится с PAYG.

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

  1. Скачайте папки policy и scripts пакета, следуя инструкциям в его README.

  2. Войдите в клиент, содержащий область назначения:

    Connect-AzAccount -TenantId "<tenant-id>"
    
  3. Из папки загруженного пакета разверните определение и назначение. Используйте целевое значение для модели оплаты по мере использования для вашего типа ресурса из предыдущей таблицы. В следующем примере политика назначается на уровне подписки:

    .\scripts\deployment.ps1 `
        -SubscriptionId "<subscription-id>" `
        -TargetLicenseType "<pay-as-you-go-value>"
    

    Если вы его -SubscriptionIdпропустите, скрипт использует область действия группы управления. Проверьте настройки пакета по умолчанию перед запуском развертывания.

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

  5. Начните устранение существующих несоответствующих ресурсов:

    .\scripts\start-remediation.ps1 `
        -SubscriptionId "<subscription-id>" `
           -TargetLicenseType "<pay-as-you-go-value>" `
        -GrantMissingPermissions
    
  6. В Политика Azure просмотрите результаты проверки соответствия назначения и задачу устранения. Затем подтвердите тип лицензии на исправленных ресурсах.

Подтвердите переход на модель оплаты по мере использования

Отчёт в формате CSV включает UpdateResult и UpdateError для каждого выбранного ресурса. Интерпретируем распространённые результаты следующим образом:

Result Значение Дальнейшие действия
ReportOnly Скрипт определил подходящий ресурс в режиме только для чтения и не подал изменения. Убедитесь, что для ресурса будет использоваться модель лицензирования с оплатой по мере использования перед выполнением перехода.
RequestSubmitted Azure приняла асинхронный запрос. Дождитесь завершения операции с ресурсом, а затем проверьте состояние ресурса.
Updated или Succeeded Скрипт обнаружил успешный окончательный результат. Подтвердите тип лицензии на ресурсе.
Failed Сервис отклонил обновление или вернул неудачное состояние терминала. Проверьте UpdateError, исправьте проблему и повторите предпросмотр.
TimedOut Расширение Arc не достигло конечного состояния до достижения предела опроса. Проверьте состояние расширения. Обновление может завершиться после того, как скрипт перестанет ждать.

Чтобы подтвердить текущий тип лицензии и состояние предоставления SQL Server, поддерживаемого Azure Arc, выполните следующий запрос Azure Resource Graph:

Search-AzGraph -Query @"
resources
| where type =~ 'microsoft.hybridcompute/machines/extensions'
| where properties.type in~ ('WindowsAgent.SqlServer', 'LinuxAgent.SqlServer')
| project name = split(id, '/')[8],
          licenseType = properties.settings.LicenseType,
          state = properties.provisioningState
"@

После завершения отправленных операций повторно запустите ту же область с -ReportOnly:

.\manage-payg-transition.ps1 `
    -Target Both `
    -TenantId "<tenant-id>" `
    -targetSubscription "<subscription-id>" `
    -TargetLicenseType PAYG `
    -ReportOnly

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

Проверьте ограничения и меры по выставлению счетов

  • SQL Server на Azure VM должен работать. Скрипт пропускает остановленные или деаллоцированные виртуальные машины и не запускает их.
  • Скрипт исключает SQL Server на виртуальных машинах Azure, использующих тип DR лицензии, поэтому не перезаписывает лицензионные настройки для пассивной реплики HA/DR.
  • Скрипт не раскрывает повторяющуюся опцию согласия на оплату в встроенном обработчике Arc. Для ресурсов Arc, управляемых CSP, требующих регулярного согласия на выставление счетов, используйте политику соответствия типов лицензий SQL Server с поддержкой Arc, которая настраивает согласие при его примененииPAYG.
  • Асинхронный запуск по умолчанию ориентирован на масштабируемость, а не на немедленное подтверждение. Используйте -WaitForCompletion, когда нужно, чтобы скрипт отслеживал результаты в терминале перед завершением.
  • По умолчанию обновления SQL Server на Azure VM используют асинхронный запрос Azure Resource Manager. Если этот запрос не срабатывает, скрипт возвращается к az sql vm update, который ждёт завершения операции.

Устранение неисправностей автоматизации

Используйте сгенерированный отчет и статус операции Azure, чтобы определить ресурсы, которые не были обновлены.

  • Если отчёт пуст, подтвердите арендатор, подписку и группу ресурсов. Следует ожидать пустой отчёт, если все охваченные ресурсы уже используют модель лицензирования pay-as-you-go.
  • Если ресурс с поддержкой Arc пропущен, восстановите связь для агента Azure Connected Machine, убедитесь, что состояние предоставления расширения Azure для SQL Server равно Succeeded, и затем запустите предпросмотр заново.
  • Если UpdateResult имеет значение RequestSubmitted, не считайте запрос завершённым. Проверьте состояние ресурса или перезапустите предпросмотр после завершения операции Azure.
  • Если операция с Azure SQL или SQL Server на виртуальной машине Azure завершается сбоем, убедитесь, что Azure CLI установлен, в нём выполнен вход в тот же клиент и он авторизован для целевой подписки.
  • Если режим по расписанию не работает, убедитесь, что управляемому удостоверению учетной записи службы автоматизации назначены роли, указанные в исходном примере.
  • Если при исправлении политики возвращается сообщение PolicyAuthorizationFailed, убедитесь, что удостоверение назначения имеет специфичную для продукта роль Читатель и роль Участник политики ресурсов в области назначения. Повторно запустите скрипт развертывания или скрипт исправления с -GrantMissingPermissions после того, как вошедшая в систему учетная запись сможет создавать назначения ролей.

Полный источник см. manage-payg-transition.ps1. Для текущих ограничений и результатов тестов смотрите manage-payg-transition.ps1 план тестирования.

Разрешения по типу ресурса

Разрешения для скрипта PowerShell

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

Тип ресурса Роль или необходимые разрешения
SQL Server на Виртуальных машинах Microsoft Azure Сотрудник по управлению виртуальными машинами
Управляемый экземпляр Azure SQL Управляемый экземпляр SQL Contributor
База данных SQL Azure Соавтор базы данных SQL
Эластичные пулы База данных SQL Azure Участник SQL Server
Пулы Управляемый экземпляр SQL Azure Автор, или индивидуальная роль с Microsoft.Sql/instancePools/read и Microsoft.Sql/instancePools/write
SQL Server, управляемый с помощью Azure Arc Администратор ресурсов Azure Connected Machine
Azure-SSIS IR Контрибьютор фабрики данных
Чтение и перечисление подписок и ресурсов Читатель, если только другая назначенная роль не предоставляет необходимые разрешения на чтение

Разрешения для Политика Azure

Идентичность, которая запускается deployment.ps1 , требует разрешения на создание определений политик в выбранной управленческой группе и для создания назначений политик, задач исправления, управляемых идентичностей и ролей в области назначения. Если он не может создавать назначение ролей, назначьте необходимые роли управляемой идентичности назначения политики до начала восстановления и запускайте deployment.ps1 с -SkipManagedIdentityRoleAssignment.

По умолчанию deployment.ps1 создаёт управляемую идентичность, назначенную системой, для назначения политики и присваивает три роли в области присваивания. Роль для конкретного продукта зависит от выбранного образца политики:

Образец политики Роль, связанная с продуктом
SQL Server, управляемый с помощью Azure Arc Azure Extension for SQL Server Deployment
SQL Server на Виртуальных машинах Microsoft Azure Сотрудник по управлению виртуальными машинами
Управляемый экземпляр Azure SQL Управляемый экземпляр SQL Contributor
База данных SQL Azure Соавтор базы данных SQL

Каждый идентификатор назначения политики также требует Reader и Resource Policy Contributor. Скрипт развертывания пропускает автоматическое назначение роли только при указании -SkipManagedIdentityRoleAssignment.

Перед началом исправления start-remediation.ps1 проверяет идентичность назначения политики на наличие всех трёх необходимых ролей. Если роль отсутствует, скрипт останавливается. Назначьте роли вручную или повторно запустите сценарий исправления с -GrantMissingPermissions из-под учетной записи, которая может создавать назначения ролей в этой области назначения.