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

Aplica-se a:Banco de Dados SQL do AzureInstância Gerenciada de SQL do AzureSQL Server em Máquinas Virtuais do AzureSQL Server habilitado pelo Azure Arc

Este artigo descreve como:

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

A automação neste artigo se aplica ao SQL Server habilitado pelo Azure Arc, SQL Server em Máquinas Virtuais do Azure, Banco de Dados SQL do Azure, e Instância Gerenciada de SQL do Azure. 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 seus recursos SQL. Os fluxos de trabalho deste artigo ajudam você a migrar os recursos para a cobrança pay-as-you-go quando as licenças do SQL com Software Assurance, as licenças de assinatura do SQL ou o Service Provider License Agreement (SPLA) deixarem de se aplicar.

Pré-requisitos

  • Uma conta Azure com acesso ao tenant e assinaturas que contêm os recursos SQL.
  • PowerShell 5 ou versões posteriores com o módulo PowerShell do Arizona.
  • CLI do Azure quando você usa o script do PowerShell para atualizar recursos SQL.
  • O papel do Contribuidor em cada assinatura que você modifica. Para alternativas de privilégio mínimo, revise as permissões por tipo de recurso.
  • Para o modo agendado, permissão para criar atribuições de funções no escopo da assinatura de destino ou as funções necessárias previamente atribuídas à identidade gerenciada da conta de Automação.
  • A autoridade para alterar as configurações de faturamento e atestar os termos de licenciamento para os recursos-alvo.

Para evitar instalar as ferramentas localmente, execute 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 sua conta pode acessar mais de um inquilino.

Escolha um método de automação

Escolha entre:

  • PowerShell para transições entre recursos para licenciamento de pagamento conforme o uso.
  • Azure Policy para aplicação contínua de pagamento conforme o uso para um tipo de recurso.

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

Scenario Método recomendado
Revise ou aplique mudanças pay-as-you-go em vários tipos de recursos SQL manage-payg-transition.ps1
Migre todos os recursos compatíveis em uma assinatura ou locatário para o licenciamento de pagamento conforme o uso manage-payg-transition.ps1
Faça uma transição de pagamento conforme o uso em um cronograma recorrente manage-payg-transition.ps1 no modo programado
Impor continuamente o licenciamento de pagamento conforme o uso para um tipo de recurso e corrigir desvios Um exemplo específico de recurso do Azure Policy
Altere um recurso manualmente 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 esse valor para o valor pay-as-you-go exigido por cada provedor de recursos. Os valores de origem mostram configurações comuns de licença que a transição pode substituir.

Resource Valor alvo pré-pago Valores de fonte comuns Apoiado pelo script Exemplo do Azure Policy
SQL Server habilitado pelo Azure Arc PAYG Paid, LicenseOnly Sim Conformidade com tipos de licença SQL Server habilitados por Arc
SQL Server em Máquinas Virtuais do Azure PAYG AHUB Sim Conformidade com tipos de licença do SQL Server on Azure VMs
Banco de Dados SQL do Azure e pools elásticos LicenseIncluded BasePrice Sim Conformidade do tipo de licença do Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure e pools de instâncias LicenseIncluded BasePrice, HybridFailoverRights Sim Conformidade com o tipo de licença Instância Gerenciada de SQL
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 SQL Server em VMs do Azure. Revise a amostra selecionada antes de implantar uma tarefa de política.

Entenda como funciona o script PowerShell

Você pode usar o script PowerShell para modificar todos os recursos dentro de um grupo de recursos, todos os recursos dentro de uma assinatura e todos os recursos de uma ou mais assinaturas 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, ele traduz esse valor para o valor pay-as-you-go exigido por cada tipo de recurso, conforme mostrado em Recursos suportados pela Review e valores de licença. Por padrão, a pasta funcional gerada permanece após o término do script. Para removê-lo após uma execução, especifique -cleanDownloads $true.

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

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

Parâmetro Valor aceito ou padrão Purpose
-Target Arc, Azure, ou Both (padrão) Seleciona SQL Server habilitado por recursos Azure Arc, recursos SQL do Azure e Azure-SSIS IR, ou ambos os grupos.
-RunMode Single (padrão) ou Scheduled Executa a transição uma vez ou configura runbooks diários do Automação do Azure.
-TargetLicenseType PAYG Seleciona o modelo de licença pay-as-you-go como modelo de licença alvo para os procedimentos deste artigo.
-targetSubscription ID de assinatura; todas as assinaturas acessíveis no tenant por padrão Limita a transição a uma assinatura.
-targetResourceGroup Nome do grupo de recursos; todos os grupos de recursos por padrão Limita a transição a um único grupo de recursos.
-TenantId ID do Inquilino; contexto atual do PowerShell do Arizona por padrão Seleciona o inquilino Microsoft Entra.
-ReportOnly Switch; desativado por padrão Reporta recursos qualificados sem alterá-los.
-WaitForCompletion Switch; desativado por padrão Aguarda que as mudanças submetidas atinjam um estado terminal quando suportadas.
-UsePcoreLicense No (padrão) ou Yes Controla o licenciamento por núcleo físico do SQL Server habilitado para Azure Arc.
-AutomationAccResourceGroupName Exigido com -RunMode Scheduled Seleciona o grupo de recursos para a conta de Automação.
-AutomationAccountName aaccAzureArcSQLLicenseType por padrão Define o nome da conta de Automação.
-Location Exigido com -RunMode Scheduled Seleciona a região do Azure para a conta de Automação e o grupo de recursos.
-cleanDownloads $false (padrão) ou $true Remove a pasta de trabalho gerada depois que o script termina.

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

Resource Comportamento padrão Com -WaitForCompletion
Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure Submete uma solicitação assíncrona e reporta RequestSubmitted Esperas e relatórios Updated
SQL Server habilitado pelo Azure Arc Submete uma atualização de extensão assíncrona e reporta RequestSubmitted Pesquisa a extensão e reporta Succeeded, Failed, ou TimedOut
SQL Server em Máquinas Virtuais do Azure Envia uma solicitação direta no Azure Resource Manager e reportaRequestSubmitted Executa az sql vm update, aguarda e relata Updated
Azure-SSIS IR Esperas e relatórios Updated Mesmo comportamento

Visualize a transição para pagamento conforme o uso

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, você pode especificar uma única assinatura para escanear. Se você não especificar uma assinatura, o script verifica todas as assinaturas às quais sua função pode acessar.

  1. Baixe 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. Faça login no locatário que contém os recursos:

     Connect-AzAccount -TenantId "<tenant-id>"
    
  3. Execute uma prévia somente leitura para uma única assinatura. Especifique -TenantId mesmo quando você já tem um contexto do 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 licença pay-as-you-go não aparecem no relatório. Se o script não encontrar recursos correspondentes, ele não cria um arquivo CSV. Para reduzir o escopo, especifique -targetResourceGroup. Defina -Target como Azure para processar recursos do SQL do Azure e o Azure-SSIS IR. Defina como Arc para processar apenas os recursos do SQL Server habilitados pelo Azure Arc.

Realize uma transição única de pagamento conforme uso com o PowerShell

Execute a transição pay-as-you-go somente depois de confirmar o escopo alvo e aprovar todos os recursos no relatório de prévia.

  1. Remova -ReportOnly, e adicione -WaitForCompletion para esperar por resultados confirmados onde o provedor de recursos os apoia:

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

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

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

Programe transições recorrentes de pagamento conforme o uso usando o PowerShell

O modo agendado cria ou atualiza um runbook do Automação do Azure para cada alvo selecionado, vincula cada runbook a um cronograma diário e inicia um trabalho único imediatamente. Informe o grupo de recursos da conta de Automação e a região do Azure. O nome padrão da conta de Automação é aaccAzureArcSQLLicenseType. O modo Agendado usa a identidade gerenciada da conta de Automação.

  1. Agende a transição para SQL do Azure e SQL Server habilitados pelos recursos do Azure Arc em uma única assinatura:

    .\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, vinculados a um cronograma diário e que é possível iniciar um trabalho com os parâmetros selecionados.

Se o destino do Azure incluir pools de Instância Gerenciada de SQL, atribua à identidade gerenciada da conta de Automação a função Contributor ou uma função personalizada com Microsoft.Sql/instancePools/read e Microsoft.Sql/instancePools/write. A configuração programada não atribui um papel embutido que conceda essas permissões.

Aplicar o licenciamento conforme o uso com o Azure Policy

Use um exemplo de Política do Azure específico para o recurso para aplicar continuamente o licenciamento conforme o uso e corrigir desvios de configuração. Cada exemplo contém uma definição de política, um script de implantação e um script de remediação.

Warning

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

A tabela a seguir vincula o pacote de políticas e o script de implantação de cada recurso:

Resource Pacote de políticas Script de implantação
SQL Server habilitado pelo Azure Arc Conformidade com tipos de licença SQL Server habilitados por Arc deployment.ps1
SQL Server em Máquinas Virtuais do Azure Conformidade com tipos de licença do SQL Server on Azure VMs deployment.ps1
Instância Gerenciada de SQL do Azure Conformidade com o tipo de licença Instância Gerenciada de SQL deployment.ps1
Banco de Dados SQL do Azure Conformidade do tipo de licença do Banco de Dados SQL do Azure deployment.ps1

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

Resource Valor alvo pay-as-you-go Valores fonte que podem ser sobrescritos Função principal obrigatória Limitação importante
SQL Server habilitado pelo Azure Arc PAYG Paid; A definição do portal também suporta LicenseOnly Azure Extension para Implantação do SQL Server A atribuição aplica um alvo a todos os hosts correspondentes e não é consciente da edição. Defina o escopo dos ambientes mistos separadamente.
SQL Server em Máquinas Virtuais do Azure PAYG AHUB, DR Colaborador de Máquina Virtual O destino deve atender às condições de licenciamento do Benefício Híbrido do Azure ou às condições de licenciamento para alta disponibilidade passiva ou recuperação de desastres (HA/DR).
Instância Gerenciada de SQL do Azure LicenseIncluded BasePrice, HybridFailoverRights Instância Gerenciada de SQL Contributor HybridFailoverRights define licenseType como BasePrice e hybridSecondaryUsage como Passive.
Banco de Dados SQL do Azure LicenseIncluded BasePrice Colaborador do banco de dados SQL A política exclui master e bancos de dados Basic. O Banco de Dados SQL do Azure oferece suporte a alterações no tipo de licença apenas para bancos de dados com vCore provisionado, portanto exclua ou isente da atribuição outros bancos de dados baseados em unidades de transação de banco de dados (DTU) e bancos de dados serverless.

Cada tarefa também precisa de Leitor e Contribuidor de Política de Recursos. Os scripts de implantação concedem os papéis necessários quando a identidade logada tem permissão para criar atribuições de papéis. Use -GrantMissingPermissions com o script de remediação para verificar e adicionar papéis ausentes.

Os scripts de implantação SQL VM, Instância Gerenciada de SQL e SQL Database solicitam confirmação quando o valor alvo requer uma atestação de licenciamento. -SkipLicenseConfirmation Use apenas em um pipeline automatizado onde o operador já confirmou a elegibilidade e assume a responsabilidade pela conformidade.

Para o SQL Server habilitado para Arc, uma política PAYG também configura o consentimento para faturamento recorrente. O consentimento permanece associado à extensão caso uma atribuição posterior altere o tipo de licença, deixando de ser PAYG.

Os pacotes de políticas utilizam um fluxo de implantação compartilhado:

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

  2. Faça login no locatário que contém o escopo de atribuição:

    Connect-AzAccount -TenantId "<tenant-id>"
    
  3. Da pasta de pacotes baixada, implante a definição e a atribuição. Use o valor alvo pay-as-you-go para seu tipo de recurso da tabela anterior. O exemplo a seguir atribui a política no escopo da assinatura:

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

    Se você omitir -SubscriptionId, o script usa o escopo do grupo de gerenciamento. Revise os padrões dos pacotes antes de executar a implantação.

  4. Confirme que a atribuição de política possui uma identidade gerenciada atribuída pelo sistema e os papéis exigidos no escopo da atribuição.

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

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

Valide a transição para pagamento conforme o uso

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 qualificado no modo somente leitura e não enviou nenhuma alteração. Confirme que o recurso deve usar o licenciamento conforme o uso antes de executar a transição.
RequestSubmitted O Azure aceitou um pedido assíncrono. Espere a operação de recurso terminar e então valide o estado do recurso.
Updated ou Succeeded O script detectou um resultado final bem-sucedido. Confirme o tipo de licença do recurso.
Failed O serviço rejeitou a atualização ou retornou um estado de terminal com falha. Reveja UpdateError, corrija o problema e reexecute a prévia.
TimedOut A extensão do Arc não atingiu um estado terminal antes do limite de votação. Verifique o estado da extensão. A atualização pode ser concluída depois que o script parar de esperar.

Para confirmar o tipo de licença atual e o estado de provisionamento do SQL Server habilitado 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, execute novamente o mesmo escopo com -ReportOnly:

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

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

Limitações de revisão e salvaguardas de cobrança

  • O SQL Server em VMs do Azure deve 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, então ele não sobrescreve a configuração de licença de uma réplica passiva de HA/DR.
  • O script não expõe a opção de consentimento para cobrança recorrente de seu manipulador Arc incorporado. Para recursos Arc gerenciados pelo CSP que exigem consentimento de faturamento recorrente, use a política de conformidade com tipos de licença do SQL Server habilitada pelo Arc, que configura o consentimento quando aplica.PAYG
  • Uma execução assíncrona padrão favorece a escala em vez da confirmação imediata. Use -WaitForCompletion quando precisar que o script observe os resultados do terminal antes de ele sair.
  • Por padrão, as atualizações do SQL Server no Azure VM usam uma requisição assíncrona do Azure Resource Manager. Se essa solicitação falhar, o script volta para az sql vm update, que espera a operação terminar.

Solucionar falhas de automação

Use o relatório gerado e o status das operações do Azure para identificar recursos que não foram atualizados.

  • Se o relatório estiver vazio, confirme o locatário, a assinatura e o grupo de recursos. Espera-se um relatório vazio quando todos os recursos dentro do escopo já utilizam licenciamento pay-as-you-go.
  • Se um recurso habilitado por Arc for pulado, restaure a conectividade do agente Azure Connected Machine, confirme que o estado de provisionamento da extensão Azure para SQL Server é Succeeded, e então execute novamente a prévia.
  • Se UpdateResult estiver RequestSubmitted, não trate a solicitação como concluída. Verifique o estado do recurso ou execute novamente a pré-visualização após a operação no Azure terminar.
  • Se uma operação de SQL do Azure ou SQL Server no Azure VM falhar, confirme que o CLI do Azure está instalado, logado no mesmo tenant e autorizado para a assinatura alvo.
  • Se o modo agendado falhar, confirme se a identidade gerenciada da conta de Automação tem as funções listadas no exemplo de código-fonte.
  • Se a remediação da política retornar PolicyAuthorizationFailed, confirme que a identidade da atribuição tem a função específica do produto, Leitor, e Colaborador da Política de Recursos no escopo da atribuição. Execute novamente o script de implantação ou execute novamente o script de correção com -GrantMissingPermissions depois que a identidade conectada puder criar atribuições de função.

Para a fonte completa, veja manage-payg-transition.ps1. Para limitações atuais e 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 Contribuidor é um superconjunto das permissões exigidas pelo script neste artigo e é a opção mais simples. Para acesso com privilégio mínimo, atribua os papéis necessários para os tipos de recursos no escopo:

Tipo de recurso Função ou permissões necessárias
SQL Server em Máquinas Virtuais do Azure Colaborador de Máquina Virtual
Instância Gerenciada de SQL do Azure Instância Gerenciada de SQL Contributor
Banco de Dados SQL do Azure Colaborador do banco de dados SQL
Banco de Dados SQL do Azure elastic pools Colaborador do SQL Server
pools de Instância Gerenciada do SQL do Azure Contribuidor, ou um papel personalizado com Microsoft.Sql/instancePools/read e Microsoft.Sql/instancePools/write
SQL Server habilitado pelo Azure Arc Administrador de recursos de Azure Connected Machine
Azure-SSIS IR Colaborador da fábrica de dados
Leitura e enumeração de assinaturas 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íticas no grupo de gestão selecionado e para criar atribuições de políticas, tarefas de remediação, identidades gerenciadas e atribuições de papéis no escopo da atribuição. Se não for possível criar atribuições de função, atribua as funções necessárias à identidade gerenciada da atribuição de política antes de iniciar a remediação e execute deployment.ps1 com -SkipManagedIdentityRoleAssignment.

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

Exemplo de política Função específica para produto
SQL Server habilitado pelo Azure Arc Azure Extension para Implantação do SQL Server
SQL Server em Máquinas Virtuais do Azure Colaborador de Máquina Virtual
Instância Gerenciada de SQL do Azure Instância Gerenciada de SQL Contributor
Banco de Dados SQL do Azure Colaborador do banco de dados SQL

Cada identidade de atribuição de política também requer Leitor e Contribuidor de Política de Recursos. O script de implantação pula a atribuição automática de funções apenas quando você especifica -SkipManagedIdentityRoleAssignment.

Antes de iniciar a remediação, start-remediation.ps1 verifica a identidade da atribuição de política em relação às três funções exigidas. Se um papel estiver faltando, o roteiro para. Atribua as funções manualmente ou execute novamente o script de remediação com -GrantMissingPermissions, usando uma identidade que possa criar atribuições de função no escopo de atribuição.