Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:Azure SQL Database
Azure SQL Managed Instance
SQL Server en Azure Virtual Machines
SQL Server habilitado para Azure Arc
En este artículo se describe cómo:
- Revisa y transfiere varios productos SQL a licencias de pago por uso con un único script PowerShell.
- Aplica continuamente las licencias de pago por uso para un tipo de recurso con Azure Policy.
La automatización de este artículo se aplica a SQL Server habilitado por Azure Arc, SQL Server en Azure Virtual Machines, Azure SQL Database y Azure SQL Managed Instance. El guion también puede procesar un Azure-SSIS Integration Runtime en Azure Data Factory (Azure-SSIS IR).
Cambiar un acuerdo de licencia no cambia el tipo de licencia configurado para tus recursos SQL. Los flujos de trabajo de este artículo le ayudan a hacer la transición de los recursos a la facturación de pago por uso cuando las licencias de SQL con Software Assurance, las licencias de suscripción de SQL o el Contrato de licencia para proveedores de servicios (SPLA) dejen de ser aplicables.
Prerequisites
- Una cuenta de Azure con acceso al tenant y suscripciones que contienen los recursos SQL.
- PowerShell 5 o una versión posterior con el módulo Az de PowerShell.
- La CLI de Azure cuando usas el script de PowerShell para actualizar recursos SQL.
- El rol de Colaborador en cada suscripción que modifiques. Para alternativas de privilegio menor, revisa los permisos por tipo de recurso.
- Para el modo programado, permiso para crear asignaciones de roles en el ámbito de la suscripción de destino, o bien los roles necesarios preasignados a la identidad administrada de la cuenta de automatización.
- La facultad para cambiar la configuración de facturación y aceptar los términos de licencia de los recursos de destino.
Para evitar instalar las herramientas localmente, ejecuta el script en Azure Cloud Shell. Cloud Shell incluye Azure PowerShell y la CLI de Azure y autentica la sesión. Especifica -TenantId cuándo tu cuenta puede acceder a más de un inquilino.
Elige un método de automatización
Puede elegir entre:
- PowerShell para transiciones entre recursos a licencias de pago por uso.
- Azure Policy para la aplicación continua del pago por uso para un tipo de recurso.
La siguiente tabla proporciona detalles sobre cada método de automatización:
| Escenario | Método recomendado |
|---|---|
| Revisa o aplica cambios de pago por uso en varios tipos de recursos de SQL | manage-payg-transition.ps1 |
| Transiciona todos los recursos soportados en una suscripción o inquilino a licencias de pago por uso | manage-payg-transition.ps1 |
| Ejecuta una transición de pago por uso de forma periódica |
manage-payg-transition.ps1 en modo programado |
| Imponer continuamente las licencias de pago por uso para un tipo de recurso y corregir la desviación | Un ejemplo de Azure Policy específico de un recurso |
| Cambiar un recurso manualmente | El artículo sobre licencias específicas de productos |
Revisa los recursos apoyados y los valores de licencia
Los procedimientos de este artículo configuran -TargetLicenseType en PAYG. El script traduce este valor al valor de pago por uso que requiere cada proveedor de recursos. Los valores fuente muestran configuraciones comunes de licencia que la transición puede reemplazar.
| Resource | Valor objetivo de pago por uso | Valores de origen comunes | Compatible con el script | Ejemplo de Azure Policy |
|---|---|---|---|---|
| SQL Server habilitado por Azure Arc | PAYG |
Paid, LicenseOnly |
Sí | Cumplimiento del tipo de licencia de SQL Server compatible con Arc |
| SQL Server en máquinas virtuales de Azure | PAYG |
AHUB |
Sí | Cumplimiento del tipo de licencia de SQL Server en VM de Azure |
| Azure SQL Database y pools elásticos | LicenseIncluded |
BasePrice |
Sí | Cumplimiento del tipo de licencia de Azure SQL Database |
| Azure SQL Managed Instance y grupos de instancias | LicenseIncluded |
BasePrice, HybridFailoverRights |
Sí | Cumplimiento de los tipos de licencia SQL Managed Instance |
| Azure-SSIS IR | LicenseIncluded |
BasePrice |
Sí | No cubierto en este artículo |
Las muestras de políticas pueden sobrescribir valores fuente adicionales, como DR para SQL Server en máquinas virtuales de Azure. Revisa la muestra seleccionada antes de desplegar una asignación de política.
Entiende cómo funciona el script de PowerShell
Puedes usar el script de PowerShell para modificar todos los recursos dentro de un grupo de recursos, todos los recursos dentro de una suscripción y todos los recursos de una o más suscripciones dentro de un tenant completo.
El script es autónomo y funciona entre los recursos SQL soportados. Cuando -TargetLicenseType se establece en el valor predeterminado PAYG, convierte ese valor en el valor de pago por uso requerido por cada tipo de recurso, como se muestra en Revisar los recursos admitidos y los valores de licencia.
Por defecto, la carpeta de trabajo generada permanece después de que el script termina. Para eliminarlo tras una partida, especifica -cleanDownloads $true.
El script imprime un resumen por tipo de recurso y lista la causa de cada recurso fallido o omitido. Cuando el script encuentra recursos que coinciden, también crea un informe ModifiedResources_<timestamp>.csv con columnas UpdateResult y UpdateError.
Los siguientes parámetros controlan el alcance y la ejecución del script:
| Parameter | Valor aceptado o impago | propósito |
|---|---|---|
-Target |
Arc, Azure, o Both (por defecto) |
Selecciona SQL Server habilitado por recursos Azure Arc, recursos Azure SQL y Azure-SSIS IR, o ambos grupos. |
-RunMode |
Single (valor predeterminado) o Scheduled |
Ejecuta la transición una vez o configura los runbooks diarios de Azure Automation. |
-TargetLicenseType |
PAYG |
Seleccione el modelo de licencia de pago por uso como modelo de licencia de destino para los procedimientos descritos en este artículo. |
-targetSubscription |
ID de suscripción; todas las suscripciones accesibles en el tenant por defecto | Limita la transición a una sola suscripción. |
-targetResourceGroup |
Nombre del grupo de recursos; todos los grupos de recursos por defecto | Limita la transición a un solo grupo de recursos. |
-TenantId |
ID de inquilino; contexto actual de PowerShell de Arizona por defecto | Selecciona el tenant de Microsoft Entra. |
-ReportOnly |
Switch; desactivado por defecto | Informa sobre los recursos aptos sin cambiarlos. |
-WaitForCompletion |
Switch; desactivado por defecto | Espera que los cambios enviados lleguen a un estado terminal cuando lo soporten. |
-UsePcoreLicense |
No (valor predeterminado) o Yes |
Controla la licencia de núcleo físico para SQL Server habilitada por Azure Arc. |
-AutomationAccResourceGroupName |
Obligatorio con -RunMode Scheduled |
Selecciona el grupo de recursos para la cuenta de Automatización. |
-AutomationAccountName |
aaccAzureArcSQLLicenseType de forma predeterminada |
Establece el nombre de la cuenta de Automatización. |
-Location |
Obligatorio con -RunMode Scheduled |
Selecciona la región de Azure para la cuenta de Automatización y el grupo de recursos. |
-cleanDownloads |
$false (valor predeterminado) o $true |
Elimina la carpeta de trabajo generada después de que termina el script. |
El comportamiento de ejecución por defecto depende del tipo de recurso:
| Resource | Comportamiento predeterminado | Con -WaitForCompletion |
|---|---|---|
| Azure SQL Database, Instancia administrada de Azure SQL | Envía una solicitud asíncrona y notifica RequestSubmitted |
Esperas e informes Updated |
| SQL Server habilitado por Azure Arc | Envía una actualización de extensión asíncrona e informa RequestSubmitted |
Consulta la extensión y devuelve Succeeded, Failed o TimedOut |
| SQL Server en máquinas virtuales de Azure | Envía una solicitud directa en Azure Resource Manager e informaRequestSubmitted |
Ejecuta az sql vm update, espera e informa Updated |
| Azure-SSIS IR | Esperas e informes Updated |
Mismo comportamiento |
Vista previa de la transición al pago por uso
El manage-payg-transition.ps1 script proporciona un punto de entrada para Azure SQL y SQL Server habilitado por los recursos de Azure Arc.
Con el script de PowerShell, puedes especificar una única suscripción para escanear. Si no especificas una suscripción, el script escanea todas las suscripciones a las que tu rol puede acceder.
Descargue el 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"Inicia sesión en el inquilino que contiene los recursos:
Connect-AzAccount -TenantId "<tenant-id>"Haz una vista previa de solo lectura con una sola suscripción. Especifica
-TenantIdincluso cuando ya tengas un contexto de Azure para que el script no use el inquilino incorrecto:.\manage-payg-transition.ps1 ` -Target Both ` -TenantId "<tenant-id>" ` -targetSubscription "<subscription-id>" ` -TargetLicenseType PAYG ` -ReportOnlySi el script encuentra recursos coincidentes, abre el informe
ModifiedResources_<timestamp>.csvmás reciente. Confirma que todos los recursos listados deben cambiar:$report = Get-ChildItem -Filter "ModifiedResources_*.csv" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 Import-Csv $report.FullName | Format-Table
Los recursos que ya usan licencias de pago por uso no aparecen en el informe. Si el script no encuentra recursos coincidentes, no crea un archivo CSV. Para reducir el alcance, especifique -targetResourceGroup. Configura -Target en Azure para procesar los recursos de Azure SQL y Azure-SSIS IR. Configúralo en Arc para procesar solo los recursos de SQL Server habilitados para Azure Arc.
Realizar una transición única al pago por uso con PowerShell
Realiza la transición de pago por uso solo después de confirmar el alcance objetivo y aprobar todos los recursos en el informe de previsualización.
Elimina
-ReportOnly, y añade-WaitForCompletionpara esperar resultados confirmados donde el proveedor de recursos los apoye:.\manage-payg-transition.ps1 ` -Target Both ` -TenantId "<tenant-id>" ` -targetSubscription "<subscription-id>" ` -TargetLicenseType PAYG ` -WaitForCompletionRevisa el informe CSV generado. Investiga cada resultado
FailedoTimedOuty confirma el estado del recurso para cada cambio enviado.
El valor PAYG establece el pago por uso como el modelo de licencia de destino.
Si omites -WaitForCompletion, la mayoría de los cambios aceptados tienen un UpdateResult de RequestSubmitted. Este resultado significa que Azure aceptó la solicitud, no que el tipo de licencia terminó de cambiar. Azure-SSIS IR siempre espera porque su comando update no soporta ejecución asincrónica.
Programa transiciones recurrentes de pago por consumo con PowerShell
El modo programado crea o actualiza un libro de operaciones de Azure Automation para cada destino seleccionado, vincula cada libro de operaciones a un horario diario y comienza un trabajo puntual de inmediato. Proporciona un grupo de recursos de cuentas de automatización y una región de Azure. El nombre predeterminado de la cuenta de Automation es aaccAzureArcSQLLicenseType. El modo programado utiliza la identidad gestionada de la cuenta de Automation.
Programa la transición para Azure SQL y SQL Server habilitados por los recursos de Azure Arc en una sola suscripción:
.\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>"En la cuenta de automatización, confirma que los runbooks estén publicados, vinculados a una programación diaria y que sean capaces de iniciar un trabajo con los parámetros seleccionados.
Si el destino de Azure incluye grupos de SQL Managed Instance, asigna a la identidad administrada de la cuenta de Automation el rol Contributor o un rol personalizado con Microsoft.Sql/instancePools/read y Microsoft.Sql/instancePools/write. La configuración programada no asigna un rol incorporado que conceda estos permisos.
Aplicar licencias de pago por uso con Azure Policy
Usa un ejemplo de Azure Policy específico para el recurso para aplicar de forma continua la licencia de pago por uso y corregir la desviación de la configuración. Cada muestra contiene una definición de política, un script de despliegue y un script de remediación.
Advertencia
Una asignación de política puede modificar cada recurso coincidente en su alcance. Empieza con una suscripción de prueba limitada y selecciona solo los tipos de licencia actuales que piensas reemplazar.
La siguiente tabla enlaza el paquete de políticas y el script de despliegue de cada recurso:
| Resource | Paquete de políticas | Script de implementación |
|---|---|---|
| SQL Server habilitado por Azure Arc | Cumplimiento de tipos de licencia de SQL Server habilitado por Arc | deployment.ps1 |
| SQL Server en máquinas virtuales de Azure | Cumplimiento del tipo de licencia de SQL Server en máquinas virtuales de Azure | deployment.ps1 |
| Instancia Gestionada de Azure SQL | Cumplimiento de los tipos de licencia SQL Managed Instance | deployment.ps1 |
| Azure SQL Database | Cumplimiento del tipo de licencia de Azure SQL Database | deployment.ps1 |
Utiliza los valores y roles para el tipo de recurso seleccionado:
| Resource | Valor objetivo de pago por uso | Valores fuente que pueden ser sobrescritos | Rol principal obligatorio | Limitación importante |
|---|---|---|---|---|
| SQL Server habilitado por Azure Arc | PAYG |
Paid; La definición del portal también soporta LicenseOnly |
Azure Extension for SQL Server Deployment | La asignación aplica un mismo destino a todos los hosts que coinciden y no distingue entre ediciones. Abarca los patrimonios mixtos por separado. |
| SQL Server en máquinas virtuales de Azure | PAYG |
AHUB, DR |
Colaborador de la máquina virtual | El objetivo debe cumplir con las condiciones de licencia de Ventaja híbrida de Azure o de alta disponibilidad pasiva o recuperación ante desastres (HA/DR). |
| Instancia Gestionada de Azure SQL | LicenseIncluded |
BasePrice, HybridFailoverRights |
Colaborador de SQL Managed Instance |
HybridFailoverRights establece licenseType a BasePrice y hybridSecondaryUsage a Passive. |
| Azure SQL Database | LicenseIncluded |
BasePrice |
Colaborador de Base de datos de SQL | La política excluye master y bases de datos básicas. Azure SQL Database solo permite cambios en el tipo de licencia para las bases de datos con núcleo virtual (vCore) aprovisionadas, por lo que excluye o exime de la asignación a las demás bases de datos basadas en unidades de transacción de base de datos (DTU) y a las bases de datos sin servidor. |
Cada tarea también necesita un Lector y un Colaborador de Políticas de Recursos. Los scripts de despliegue otorgan los roles necesarios cuando la identidad que ha iniciado sesión tiene permiso para crear asignaciones de roles. Utilice -GrantMissingPermissions con el script de remediación para comprobar y añadir los roles que falten.
Los scripts de despliegue de SQL VM, SQL Managed Instance y SQL Database solicitan confirmación cuando el valor objetivo requiere una verificación de licencia. Úsalo -SkipLicenseConfirmation solo en una tubería automatizada donde el operador ya haya confirmado la elegibilidad y acepte la responsabilidad del cumplimiento.
Para SQL Server habilitado para Azure Arc, una directiva PAYG también configura el consentimiento para la facturación recurrente. El consentimiento permanece en la extensión si una asignación posterior cambia el tipo de licencia para que deje de ser PAYG.
Los paquetes de políticas utilizan un flujo de despliegue compartido:
Descarga las carpetas
policyyscriptsdel paquete siguiendo las instrucciones de su README.Inicia sesión en el tenant que contiene el alcance de la asignación:
Connect-AzAccount -TenantId "<tenant-id>"Desde la carpeta de paquetes descargados, despliega la definición y la asignación. Usa el valor objetivo de pago por uso correspondiente a tu tipo de recurso de la tabla precedente. El siguiente ejemplo asigna la política en el alcance de suscripción:
.\scripts\deployment.ps1 ` -SubscriptionId "<subscription-id>" ` -TargetLicenseType "<pay-as-you-go-value>"Si omites
-SubscriptionId, el script usa el alcance del grupo de gestión. Revisa los valores predeterminados del paquete antes de ejecutar el despliegue.Confirma que la asignación de políticas tiene una identidad gestionada asignada por el sistema y los roles requeridos en el ámbito de la asignación.
Iniciar la corrección de los recursos existentes que no cumplen:
.\scripts\start-remediation.ps1 ` -SubscriptionId "<subscription-id>" ` -TargetLicenseType "<pay-as-you-go-value>" ` -GrantMissingPermissionsEn Azure Policy, revisa los resultados de cumplimiento y la tarea de remediación de la asignación. A continuación, confirma el tipo de licencia en los recursos remediados.
Validar la transición de pago por uso
El informe CSV incluye un UpdateResult y otro UpdateError para cada recurso seleccionado. Interpreta los resultados comunes de la siguiente manera:
| Result | Meaning | Siguiente acción |
|---|---|---|
ReportOnly |
El script identificó un recurso apto en modo de solo lectura y no envió ningún cambio. | Asegúrate de que el recurso use licencias de pago por uso antes de iniciar la transición. |
RequestSubmitted |
Azure aceptó una solicitud asincrónica. | Espera a que termine la operación de recurso y luego valida el estado del recurso. |
Updated o Succeeded |
El script detectó un resultado final satisfactorio. | Confirma el tipo de licencia en el recurso. |
Failed |
El servicio rechazó la actualización o devolvió un estado de terminal fallido. | Repasa UpdateError, corrige el problema y vuelve a ejecutar la vista previa. |
TimedOut |
La extensión de Arc no alcanzó un estado terminal antes del límite de votación. | Comprueba el estado de la extensión. La actualización podría completarse después de que el script deje de esperar. |
Para confirmar el tipo de licencia actual y el estado de aprovisionamiento para SQL Server habilitado por Azure Arc, ejecuta la siguiente consulta de 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
"@
Una vez finalizadas las operaciones enviadas, vuelve a ejecutar el mismo ámbito con -ReportOnly:
.\manage-payg-transition.ps1 `
-Target Both `
-TenantId "<tenant-id>" `
-targetSubscription "<subscription-id>" `
-TargetLicenseType PAYG `
-ReportOnly
El script excluye recursos que ya usan licencias de pago por uso. Un ámbito completamente convergido indica que no hay recursos que actualizar. Investiga cualquier recurso que aún aparezca antes de considerar la transición completada.
Limitaciones de revisión y salvaguardas de facturación
- SQL Server en Azure VMs debe estar funcionando. El script se salta las VMs detenidas o desasignadas y no las inicia.
- El script excluye SQL Server en las máquinas virtuales de Azure que usan el
DRtipo de licencia, así que no sobrescribe la configuración de licencia de una réplica pasiva de HA/DR. - El script no expone la opción de consentimiento de facturación recurrente de su gestor de Arc integrado. Para recursos Arc gestionados por CSP que requieren consentimiento de facturación recurrente, utilice la política de cumplimiento de tipos de licencia de SQL Server habilitada por Arc, que configura el consentimiento cuando se aplica
PAYG. - Una ejecución asíncrona por defecto prioriza la escalabilidad frente a la confirmación inmediata. Úsalo
-WaitForCompletioncuando necesites que el script observe los resultados del terminal antes de que salga. - Por defecto, las actualizaciones de SQL Server en Azure VM utilizan una solicitud asíncrona de Azure Resource Manager. Si esa petición falla, el script vuelve a
az sql vm update, que espera a que termine la operación.
Solucionar problemas de automatización
Utiliza el informe generado y el estado de la operación de Azure para identificar los recursos que no se actualizaron.
- Si el informe está vacío, confirma el inquilino, la suscripción y el grupo de recursos. Se espera un informe vacío cuando todos los recursos incluidos en el ámbito ya utilicen licencias de pago por uso.
- Si se omite un recurso habilitado para Arc, restaura la conectividad del agente Azure Connected Machine, confirma que el estado de aprovisionamiento para la extensión de Azure para SQL Server es
Succeeded, y luego vuelve a ejecutar la vista previa. - Si
UpdateResultesRequestSubmitted, no trates la solicitud como completa. Comprueba el estado del recurso o vuelve a ejecutar la vista previa una vez que termine la operación de Azure. - Si se produce un error en una operación de Azure SQL o de SQL Server en una máquina virtual de Azure, confirma que CLI de Azure está instalado, que has iniciado sesión en el mismo inquilino y que tienes autorización para la suscripción de destino.
- Si el modo programado falla, confirma que la identidad gestionada de la cuenta de Automatización tiene los roles listados en el ejemplo de origen.
- Si la corrección de directivas devuelve
PolicyAuthorizationFailed, confirme que la identidad de la asignación tiene los roles específicos del producto, Lector, y Colaborador de directivas de recursos en el ámbito de la asignación. Vuelva a ejecutar el script de implementación o vuelva a ejecutar el script de corrección con-GrantMissingPermissionsuna vez que la identidad que ha iniciado sesión pueda crear asignaciones de rol.
Para la fuente completa, véase manage-payg-transition.ps1. Para ver las limitaciones actuales y los resultados de las pruebas, consulte el manage-payg-transition.ps1 plan de pruebas.
Permisos por tipo de recurso
Permisos para el script PowerShell
El rol de Contribuidor es un superconjunto de los permisos requeridos por el script de este artículo y es la opción más sencilla. Para el acceso con privilegios mínimos, asigna los roles necesarios para los tipos de recursos incluidos en el ámbito:
| Tipo de recurso | Rol o permisos requeridos |
|---|---|
| SQL Server en máquinas virtuales de Azure | Colaborador de la máquina virtual |
| Instancia Gestionada de Azure SQL | Colaborador de SQL Managed Instance |
| Azure SQL Database | Colaborador de Base de datos de SQL |
| Grupos elásticos de Azure SQL Database | Colaborador de SQL Server |
| Grupos de Azure SQL Managed Instance |
Colaborador, o un rol personalizado con Microsoft.Sql/instancePools/read y Microsoft.Sql/instancePools/write |
| SQL Server habilitado por Azure Arc | Administrador de recursos de Azure Connected Machine |
| Azure-SSIS IR | Colaborador de Factoría de datos |
| Lectura y enumeración de suscripciones y recursos | Reader, a menos que otro rol asignado conceda los permisos de lectura requeridos |
Permisos para Azure Policy
La identidad con la que se ejecuta deployment.ps1 necesita permisos para crear definiciones de directiva en el grupo de administración seleccionado y para crear asignaciones de directiva, tareas de corrección, identidades administradas y asignaciones de rol en el ámbito de la asignación. Si no puede crear asignaciones de roles, asigne los roles necesarios a la identidad administrada de la asignación de directiva antes de iniciar la remediación y ejecute deployment.ps1 con -SkipManagedIdentityRoleAssignment.
Por defecto, deployment.ps1 crea una identidad gestionada asignada por el sistema para la asignación de políticas y otorga tres roles en el ámbito de la asignación. El papel específico del producto depende de la muestra de política seleccionada:
| Ejemplo de política | Rol específico de producto |
|---|---|
| SQL Server habilitado por Azure Arc | Azure Extension for SQL Server Deployment |
| SQL Server en máquinas virtuales de Azure | Colaborador de la máquina virtual |
| Instancia Gestionada de Azure SQL | Colaborador de SQL Managed Instance |
| Azure SQL Database | Colaborador de Base de datos de SQL |
Cada identidad de asignación de políticas también requiere Lector y Colaborador de directivas de recursos. El script de despliegue solo omite la asignación automática de roles cuando especificas -SkipManagedIdentityRoleAssignment.
Antes de comenzar la remediación, start-remediation.ps1 comprueba la identidad de asignación de políticas para los tres roles requeridos. Si falta un papel, el guion se detiene. Asigna los roles manualmente o vuelve a ejecutar el script de corrección con -GrantMissingPermissions desde una identidad que pueda crear asignaciones de roles en el ámbito de la asignación.