Automatize a transição para o licenciamento SQL pay-as-you-go em larga escala

Aplica-se a:Base de Dados SQL do AzureAzure SQL Managed InstanceSQL Server nas Máquinas Virtuais do AzureSQL Server compatível com o Azure Arc

Este artigo descreve como:

  • Revise e faça a transição de vários produtos SQL para licenciamento pay-as-you-go com um único script PowerShell.
  • Aplicar continuamente o licenciamento pay-as-you-go para um tipo de recurso com o Azure Policy.

A automação neste artigo aplica-se ao SQL Server ativado pelo Azure Arc, SQL Server nas Máquinas Virtuais do Azure, Base de Dados SQL do Azure, e Azure SQL Managed Instance. O script também pode processar um Azure-SSIS Integration Runtime em Azure Data Factory (Azure-SSIS IR).

Alterar um acordo de licenciamento não altera o tipo de licença configurado para os seus recursos SQL. Os fluxos de trabalho deste artigo ajudam-no a fazer a transição dos recursos para a faturação consoante a utilização quando as licenças SQL com Software Assurance, as licenças de subscrição do SQL ou o licenciamento ao abrigo do Service Provider License Agreement (SPLA) deixarem de se aplicar.

Pré-requisitos

  • Uma conta Azure com acesso ao tenant e subscrições que contenham os recursos SQL.
  • PowerShell 5 ou versão posterior com o módulo Az PowerShell.
  • A CLI do Azure quando usa o script PowerShell para atualizar recursos SQL.
  • O papel do Contribuidor em cada subscrição que modifica. Para alternativas de privilégio mínimo, consulte Permissões por tipo de recurso.
  • No modo agendado, permissão para criar atribuições de funções ao nível da subscrição de destino, ou as funções necessárias previamente atribuídas à identidade gerida da conta de Automação.
  • A autoridade para alterar as definições de faturação e atestar os termos de licenciamento dos recursos-alvo.

Para evitar instalar as ferramentas localmente, executa o script no Azure Cloud Shell. O Cloud Shell inclui o Azure PowerShell e a CLI do Azure e autentica a sessão. Especifique -TenantId quando a sua conta pode aceder a mais do que um inquilino.

Escolha um método de automação

Escolha entre:

  • PowerShell para transições entre recursos para o licenciamento com pagamento consoante a utilização.
  • Azure Policy para imposição contínua do pagamento consoante a utilização para um tipo de recurso.

A tabela seguinte fornece detalhes sobre cada método de automação:

Scenario Método recomendado
Revise ou aplique alterações pay-as-you-go em vários tipos de recursos SQL manage-payg-transition.ps1
Transite todos os recursos suportados numa subscrição ou tenant para licenciamento de pagamento conforme a utilização manage-payg-transition.ps1
Faz uma transição pay-as-you-go num calendário recorrente manage-payg-transition.ps1 em modo programado
Aplicar continuamente o licenciamento de pagamento conforme a utilização a um tipo de recurso e corrigir desvios Um exemplo de Azure Policy específico de um recurso
Alterar manualmente um recurso O artigo sobre licenciamento específico de produto

Revise recursos suportados e valores de licença

Os procedimentos neste artigo definem -TargetLicenseType para PAYG. O script traduz este valor para o valor pay-as-you-go exigido por cada fornecedor de recursos. Os valores de origem mostram configurações comuns de licença que a transição pode substituir.

Resource Valor alvo de pagamento conforme a utilização Valores de origem comuns Apoiado pelo script Exemplo do Azure Policy
SQL Server ativado pelo Azure Arc PAYG Paid, LicenseOnly Sim Conformidade com o tipo de licença SQL Server habilitado por Arc
SQL Server em Máquinas Virtuais do Azure PAYG AHUB Sim Conformidade do tipo de licença do SQL Server em Azure VMs
Base de Dados SQL do Azure e conjuntos elásticos LicenseIncluded BasePrice Sim Conformidade do tipo de licença do Base de Dados SQL do Azure
Azure SQL Managed Instance e pools de instâncias LicenseIncluded BasePrice, HybridFailoverRights Sim Conformidade com o tipo de licença SQL Managed Instance
Azure-SSIS IR LicenseIncluded BasePrice Sim Não abordado neste artigo

Os exemplos de políticas podem sobrescrever valores de origem adicionais, como DR para o SQL Server em VMs do Azure. Reveja a amostra selecionada antes de implementar uma atribuição de política.

Compreenda como funciona o script PowerShell

Pode usar o script PowerShell para modificar todos os recursos dentro de um grupo de recursos, todos os recursos de uma subscrição e todos os recursos de uma ou mais subscrições dentro de um inquilino inteiro.

O script é autónomo e funciona entre os recursos SQL suportados. Quando -TargetLicenseType está definido para o padrão PAYG, traduz esse valor para o valor pay-as-you-go exigido por cada tipo de recurso, conforme mostrado nos recursos suportados pela Review e nos valores da licença. Por defeito, a pasta de trabalho gerada mantém-se após o script terminar. Para o remover após uma execução, especifique -cleanDownloads $true.

O script imprime um resumo por tipo de recurso e lista a causa de cada recurso falhado ou ignorado. Quando o script encontra recursos correspondentes, cria também um relatório ModifiedResources_<timestamp>.csv com colunas UpdateResult e UpdateError.

Os seguintes parâmetros controlam o âmbito e a execução do script:

Parameter Valor aceite ou incumprimento Purpose
-Target Arc, Azure, ou Both (padrão) Seleciona SQL Server ativado por recursos Azure Arc, recursos SQL do Azure e Azure-SSIS IR, ou ambos os grupos.
-RunMode Single (predefinido) ou Scheduled Executa a transição uma vez ou configura runbooks diários do Automatização do Azure.
-TargetLicenseType PAYG Seleciona o modelo de licença pay-as-you-go como alvo para os procedimentos deste artigo.
-targetSubscription ID de subscrição; todas as subscrições acessíveis no tenant por defeito Limita a transição a uma subscrição.
-targetResourceGroup Nome do grupo de recursos; todos os grupos de recursos predefinidos Limita a transição a um único grupo de recursos.
-TenantId ID do Locatário; contexto atual do Az PowerShell por defeito Seleciona o tenant do Microsoft Entra.
-ReportOnly Switch; desativado por predefinição Apresenta recursos elegíveis sem os alterar.
-WaitForCompletion Switch; desativado por defeito Aguarda que as alterações submetidas atinjam um estado terminal quando suportadas.
-UsePcoreLicense No (predefinido) ou Yes Controla o licenciamento por núcleo físico do SQL Server habilitado pelo Azure Arc.
-AutomationAccResourceGroupName Obrigatório com -RunMode Scheduled Seleciona o grupo de recursos para a conta de Automação.
-AutomationAccountName aaccAzureArcSQLLicenseType por defeito Define o nome da conta de Automação.
-Location Obrigatório com -RunMode Scheduled Seleciona a região Azure para a conta de Automação e o grupo de recursos.
-cleanDownloads $false (predefinido) ou $true Remove a pasta de trabalho gerada depois do script terminar.

O comportamento de execução por defeito depende do tipo de recurso:

Resource Comportamento padrão Com -WaitForCompletion
Base de Dados SQL do Azure, Instância Gerida do SQL do Azure Submete um pedido assíncrono e reporta RequestSubmitted Esperas e relatórios Updated
SQL Server ativado pelo Azure Arc Submete uma atualização de extensão assíncrona e reporta RequestSubmitted Sonda a extensão e reporta Succeeded, Failed, ou TimedOut
SQL Server em Máquinas Virtuais do Azure Submete um pedido direto do Azure Resource Manager e reportaRequestSubmitted Executa atualizações de VM SQL do Az, espera e reportaUpdated
Azure-SSIS IR Esperas e relatórios Updated Mesmo comportamento

Pré-visualizar a transição para pagamento conforme a utilização

O manage-payg-transition.ps1 script fornece um ponto de entrada para SQL do Azure e SQL Server habilitados pelos recursos do Azure Arc.

Com o script PowerShell, podes especificar uma única subscrição para escanear. Se não especificares uma subscrição, o script analisa todas as subscrições a que a tua função pode aceder.

  1. Descarregue o script:

    $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. Inicie sessão no diretório que contém os recursos:

     Connect-AzAccount -TenantId "<tenant-id>"
    
  3. Execute uma pré-visualização apenas de leitura para uma única subscrição. Especifica -TenantId mesmo quando já tens um contexto no Azure para que o script não use o inquilino errado:

    .\manage-payg-transition.ps1 `
        -Target Both `
        -TenantId "<tenant-id>" `
        -targetSubscription "<subscription-id>" `
        -TargetLicenseType PAYG `
        -ReportOnly
    
  4. Se o script encontrar recursos correspondentes, abra o relatório ModifiedResources_<timestamp>.csv mais recente. Confirme que todos os recursos listados devem mudar:

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

Recursos que já utilizam licenciamento pay-as-you-go não aparecem no relatório. Se o script não encontrar recursos correspondentes, não cria um ficheiro CSV. Para reduzir o âmbito, especifique -targetResourceGroup. Defina -Target como Azure para processar recursos do SQL do Azure e do Azure-SSIS IR. Defina-o como Arc para processar apenas os recursos do SQL Server habilitados pelo Azure Arc.

Execute uma transição pontual para pagamento conforme a utilização com o PowerShell

Execute a transição pay-as-you-go apenas depois de confirmar o âmbito alvo e aprovar todos os recursos no relatório de pré-visualização.

  1. Remova -ReportOnly, e adicione -WaitForCompletion para esperar resultados confirmados onde o fornecedor de recursos os apoie:

    .\manage-payg-transition.ps1 `
        -Target Both `
        -TenantId "<tenant-id>" `
        -targetSubscription "<subscription-id>" `
        -TargetLicenseType PAYG `
        -WaitForCompletion
    
  2. Veja o relatório CSV gerado. Investigue cada resultado Failed ou TimedOut e confirme o estado do recurso para cada alteração submetida.

O PAYG valor define o pay-as-you-go como modelo de licença alvo.

Se omitir -WaitForCompletion, a maioria das alterações aceites tem um UpdateResult de RequestSubmitted. Este resultado significa que o Azure aceitou o pedido, não que o tipo de licença terminou de mudar. Azure-SSIS IR espera sempre porque o seu comando update não suporta execução assíncrona.

Agende transições recorrentes pay-as-you-go com o PowerShell

O modo agendado cria ou atualiza um runbook do Automatização do Azure para cada alvo selecionado, liga cada runbook a um cronograma diário e inicia imediatamente um trabalho único. Indique um grupo de recursos para a conta de Automação e uma região do Azure. O nome padrão da conta de Automação é aaccAzureArcSQLLicenseType. O modo agendado utiliza a identidade gerida da conta de Automação.

  1. Agende a transição para SQL do Azure e SQL Server ativados pelos recursos do Azure Arc numa única subscrição:

    .\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. Na conta de Automação, confirme que os runbooks estão publicados, associados a uma agenda diária e que conseguem iniciar uma tarefa com os parâmetros selecionados.

Se o destino do Azure incluir conjuntos de SQL Managed Instance, atribua à identidade gerida da conta de Automação Contributor ou uma função personalizada com Microsoft.Sql/instancePools/read e Microsoft.Sql/instancePools/write. A configuração agendada não atribui um papel incorporado que conceda essas permissões.

Impor o licenciamento pay-as-you-go com o Azure Policy

Utilize um exemplo do Azure Policy específico para recursos para impor continuamente o licenciamento pay-as-you-go e corrigir desvios de configuração. Cada exemplo contém uma definição de política, um script de implementação e um script de remediação.

Warning

Uma atribuição de política pode alterar todos os recursos correspondentes no seu âmbito. Comece com uma subscrição de teste de âmbito restrito e selecione apenas os tipos de licença atuais que pretende substituir.

A tabela seguinte liga o pacote de políticas e o script de implementação de cada recurso:

Resource Pacote de políticas Script de implementação
SQL Server ativado pelo Azure Arc Conformidade com o tipo de licença SQL Server habilitado por Arc deployment.ps1
SQL Server em Máquinas Virtuais do Azure Conformidade do tipo de licença do SQL Server em Azure VMs deployment.ps1
Azure SQL Managed Instance Conformidade com o tipo de licença SQL Managed Instance deployment.ps1
Base de Dados SQL do Azure Conformidade do tipo de licença do Base de Dados SQL do Azure deployment.ps1

Utilize os valores e papéis para o tipo de recurso selecionado:

Resource Valor alvo de pagamento conforme a utilização Valores fonte que podem ser sobrescritos Função principal obrigatória Limitação importante
SQL Server ativado pelo Azure Arc PAYG Paid; A definição do portal também suporta LicenseOnly Azure Extension for SQL Server Deployment A atribuição aplica um único alvo a todos os anfitriões correspondentes e não é consciente da edição. Delimite os patrimónios mistos separadamente.
SQL Server em Máquinas Virtuais do Azure PAYG AHUB, DR Colaborador da Máquina Virtual O alvo deve cumprir as condições de licenciamento Benefício Híbrido do Azure ou de alta disponibilidade passiva ou recuperação de desastres (HA/DR).
Azure SQL Managed Instance LicenseIncluded BasePrice, HybridFailoverRights SQL Managed Instance Contributor HybridFailoverRights define licenseType como BasePrice e hybridSecondaryUsage como Passive.
Base de Dados SQL do Azure LicenseIncluded BasePrice Colaborador do Banco de Dados SQL A política exclui master e bases de dados Basic. O Base de Dados SQL do Azure suporta alterações do tipo de licença apenas para bases de dados com vCore aprovisionado, pelo que deve excluir ou isentar dessa atribuição outras bases de dados baseadas em unidades de transação da base de dados (DTU) e bases de dados sem servidor.

Cada tarefa também necessita de Leitor e Colaborador de Política de Recursos. Os scripts de implementação concedem as funções necessárias quando a identidade com sessão iniciada tem permissão para criar atribuições de funções. Utilize -GrantMissingPermissions com o script de remediação para verificar e adicionar as funções em falta.

Os scripts de implementação da VM SQL, SQL Managed Instance e SQL Database pedem confirmação quando o valor alvo requer uma atestação de licenciamento. -SkipLicenseConfirmation Use apenas num pipeline automatizado onde o operador já confirmou a elegibilidade e assume a responsabilidade pela conformidade.

Para o SQL Server com Arc ativado, uma política PAYG também configura o consentimento para faturação recorrente. O consentimento permanece na prorrogação caso uma cessão posterior altere o tipo de licença, deixando de ser PAYG.

Os pacotes de políticas utilizam um fluxo de implementação partilhado:

  1. Descarregue as pastas policy e scripts do pacote seguindo as instruções do respetivo README.

  2. Inicie sessão no locatário que contém o âmbito da atribuição:

    Connect-AzAccount -TenantId "<tenant-id>"
    
  3. A partir da pasta do pacote descarregado, implemente a definição e a atribuição. Utilize o valor alvo de pagamento conforme a utilização para o seu tipo de recurso na tabela anterior. O exemplo seguinte atribui a política no âmbito da subscrição:

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

    Se omitir -SubscriptionId, o script usa o âmbito do grupo de gestão. Revise os valores definidos do pacote antes de executar a implementação.

  4. Confirme que a atribuição de política tem uma identidade gerida atribuída pelo sistema e os papéis exigidos no âmbito da atribuição.

  5. Iniciar a remediação dos recursos não conformes existentes:

    .\scripts\start-remediation.ps1 `
        -SubscriptionId "<subscription-id>" `
           -TargetLicenseType "<pay-as-you-go-value>" `
        -GrantMissingPermissions
    
  6. No Azure Policy, reveja os resultados de conformidade da atribuição e a respetiva tarefa de remediação. Em seguida, confirme o tipo de licença nos recursos corrigidos.

Valide a transição para o modelo pré-pago

O relatório CSV inclui um UpdateResult e um UpdateError para cada recurso selecionado. Interprete os resultados comuns da seguinte forma:

Result Meaning Próxima ação
ReportOnly O script identificou um recurso elegível em modo de leitura e não submeteu nenhuma alteração. Confirme que o recurso deve usar licenciamento conforme a utilização antes de efetuar a transição.
RequestSubmitted O Azure aceitou um pedido assíncrono. Espere que a operação de recurso termine e depois valide o estado do recurso.
Updated ou Succeeded O script detetou um resultado final com êxito. Confirme o tipo de licença do recurso.
Failed O serviço rejeitou a atualização ou devolveu um estado terminal falhado. Reveja UpdateError, corrija o problema e execute novamente a pré-visualização.
TimedOut A extensão do Arc não atingiu um estado terminal antes do limite de votação. Verifica o estado da extensão. A atualização pode ser concluída depois do script deixar de esperar.

Para confirmar o tipo de licença atual e o estado de provisionamento do SQL Server ativado pelo Azure Arc, execute a seguinte consulta 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
"@

Após o término das operações submetidas, reexecute o mesmo âmbito com -ReportOnly:

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

O script exclui recursos que já utilizam licenciamento pay-as-you-go. Um escopo totalmente convergente reporta que não há recursos para atualizar. Investigue qualquer recurso que ainda apareça antes de considerar a transição concluída.

Limitações de revisão e salvaguardas de faturação

  • O SQL Server nas VMs do Azure tem de estar em execução. O script ignora VMs paradas ou desalocadas e não as inicia.
  • O script exclui o SQL Server em VMs do Azure que usam o DR tipo de licença, por isso não sobrescreve a definição de licença de uma réplica passiva de HA/DR.
  • O script não expõe a opção de consentimento para faturação recorrente do respetivo processador Arc integrado. Para recursos Arc geridos por CSP que requerem consentimento de faturação recorrente, utilize a política de conformidade com tipos de licença SQL Server habilitada pelo Arc, que configura o consentimento quando se aplica PAYG.
  • Uma execução assíncrona por defeito favorece a escala em detrimento da confirmação imediata. Usa -WaitForCompletion quando precisares do script para observar os resultados terminais antes de ele sair.
  • Por defeito, as atualizações do SQL Server no Azure VM usam um pedido assíncrono do Azure Resource Manager. Se esse pedido falhar, o script volta a az sql vm update, que espera que a operação termine.

Resolução de falhas na automação

Use o relatório gerado e o estado da operação do Azure para identificar recursos que não foram atualizados.

  • Se o relatório estiver vazio, confirme o inquilino, a subscrição e o grupo de recursos. Espera-se um relatório vazio quando todos os recursos dentro do âmbito já utilizam licenciamento pay-as-you-go.
  • Se um recurso com Arc for ignorado, restaure a conectividade do agente Azure Connected Machine, confirme que o estado de provisionamento para a extensão Azure para SQL Server é Succeeded, e depois volte a executar a pré-visualização.
  • Se UpdateResult estiver RequestSubmitted, não considere a solicitação concluída. Verifique o estado do recurso ou volte a executar a pré-visualização depois de terminar a operação no Azure.
  • Se uma operação SQL do Azure ou SQL Server no Azure VM falhar, confirme que o CLI do Azure está instalado, iniciado no mesmo tenant e autorizado para a subscrição alvo.
  • Se o modo agendado falhar, confirme que a identidade gerida da conta de Automação tem as funções listadas no exemplo de origem.
  • Se a remediação da política devolver PolicyAuthorizationFailed, confirme que a identidade da atribuição tem a função específica do produto, Leitor, e Contribuidor da Política de Recursos, no âmbito da atribuição. Execute novamente o script de implementação ou execute novamente o script de remediação com -GrantMissingPermissions depois de a identidade com sessão iniciada poder criar atribuições de funções.

Para a fonte completa, veja manage-payg-transition.ps1. Para as limitações atuais e os resultados dos testes, consulte o manage-payg-transition.ps1 plano de teste.

Permissões por tipo de recurso

Permissões para o script PowerShell

O papel de Contribuinte é um superconjunto das permissões exigidas pelo script neste artigo e é a opção mais simples. Para acesso de privilégios mínimos, atribua as funções necessárias aos tipos de recursos em âmbito:

Tipo de recurso Função ou permissões necessárias
SQL Server em Máquinas Virtuais do Azure Colaborador da Máquina Virtual
Azure SQL Managed Instance SQL Managed Instance Contributor
Base de Dados SQL do Azure Colaborador do Banco de Dados SQL
Base de Dados SQL do Azure conjuntos elásticos Colaborador do SQL Server
Conjuntos de Azure SQL Managed Instance Contribuidor, ou um papel personalizado com Microsoft.Sql/instancePools/read e Microsoft.Sql/instancePools/write
SQL Server ativado pelo Azure Arc Administrador de Recursos de Máquina Conectada do Azure
Azure-SSIS IR Colaborador do Data Factory
Leitura e enumeração de subscrições e recursos Leitor, a menos que outro papel atribuído conceda as permissões de leitura necessárias

Permissões para o Azure Policy

A identidade que executa deployment.ps1 precisa de permissão para criar definições de política no grupo de gestão selecionado e para criar atribuições de política, tarefas de remediação, identidades geridas e atribuições de funções no âmbito da atribuição. Se não conseguir criar atribuições de funções, atribua as funções necessárias à identidade gerida da atribuição da política antes de iniciar a remediação e execute deployment.ps1 com -SkipManagedIdentityRoleAssignment.

Por defeito, deployment.ps1 cria uma identidade gerida atribuída pelo sistema para a atribuição de políticas e concede três funções no âmbito da atribuição. O papel específico do produto depende da amostra de políticas selecionada:

Exemplo de política Função específica de produto
SQL Server ativado pelo Azure Arc Azure Extension for SQL Server Deployment
SQL Server em Máquinas Virtuais do Azure Colaborador da Máquina Virtual
Azure SQL Managed Instance SQL Managed Instance Contributor
Base de Dados SQL do Azure Colaborador do Banco de Dados SQL

Cada identidade de atribuição da política também requer Leitor e Contribuidor da Política de Recursos. O script de implementação só ignora a atribuição automática de funções quando especifica -SkipManagedIdentityRoleAssignment.

Antes de iniciar a remediação, start-remediation.ps1 verifica a identidade da atribuição de política relativamente às três funções necessárias. Se faltar uma função, o script é interrompido. Atribua as funções manualmente ou execute novamente o script de remediação com -GrantMissingPermissions a partir de uma identidade que possa criar atribuições de funções ao nível do âmbito da atribuição.