大規模自動化轉換至隨用隨付 SQL 授權模式

適用於:Azure SQL DatabaseAzure SQL 受控執行個體Azure 虛擬機器上的 SQL ServerSQL Server enabled by Azure Arc

這篇文章說明如何:

  • 用一個 PowerShell 腳本審查並轉換多個 SQL 產品到按使用量付費授權。
  • 使用 Azure 原則 持續強制執行針對一種資源類型的隨用隨付授權模式。

本文中的自動化適用於由 Azure Arc 啟用的 SQL ServerAzure 虛擬機器上的 SQL ServerAzure SQL Database 以及 Azure SQL 受控執行個體。 此腳本也可以處理 Azure Data Factory 中的 Azure-SSIS Integration Runtime(Azure-SSIS IR)。

更改授權協議並不會改變你為 SQL 資源設定的授權類型。 本文中的工作流程可協助您在具有軟體保證的 SQL 授權、SQL 訂閱授權或服務提供者授權合約 (SPLA) 授權不再適用後,將資源轉換為隨用隨付計費。

先決條件

  • 具有租戶和包含 SQL 資源之訂閱存取權限的 Azure 帳戶。
  • 使用 PowerShell 5 或更新版本,搭配 Az PowerShell 模組
  • 當你使用 PowerShell 腳本更新 SQL 資源時,會使用 Azure CLI
  • 你所修改的每個訂用帳戶中的 參與者 角色。 關於最低權限的替代方案,請依 資源類型檢視權限
  • 在排程模式下,需要具備在目標訂用帳戶範圍建立角色指派的權限,或先將所需角色預先指派給 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 在排程模式中
持續對單一資源類型強制執行隨用隨付授權,並修正偏差 特定資源的 Azure 原則 範例
手動更改一個資源 產品專屬授權條款

檢視支援資源與授權價值

本文中的程序設定 -TargetLicenseTypePAYG。 腳本會將此值轉換為每個資源提供者所需的隨用付費值。 來源值顯示過渡可取代的常見授權設定。

Resource 隨用隨付目標值 常見來源值 由指令碼支援 Azure 原則 範例
透過 Azure Arc 啟用的 SQL Server PAYG PaidLicenseOnly Yes Arc 啟用的 SQL Server 授權類型合規
Azure 虛擬機器上的 SQL Server PAYG AHUB Yes Azure VM 上 SQL Server 的授權類型合規性
Azure SQL Database 與彈性集區 LicenseIncluded BasePrice Yes Azure SQL Database 授權類型合規性
Azure SQL 受控執行個體和執行個體集區 LicenseIncluded BasePriceHybridFailoverRights Yes SQL 受管理執行個體 授權類型合規
Azure-SSIS IR LicenseIncluded BasePrice Yes 本文未涵蓋

這些原則範例可以覆寫其他來源值,例如 Azure 虛擬機器上的 SQL Server 的 DR。 在部署政策指派前,請先檢視所選範例。

了解 PowerShell 腳本的運作方式

你可以使用 PowerShell 腳本修改資源群組內的所有資源、訂閱內的所有資源,以及整個租戶中跨一個或多個訂閱的所有資源。

此指令碼可獨立運作,並適用於所支援的 SQL 資源。 當 -TargetLicenseType 設定為預設 PAYG值時,該值會轉換成每種資源類型所需的隨用付費值,如 檢視支援資源與授權值所示。 預設情況下,產生的工作資料夾會在腳本完成後保留。 若要在執行一次後將其移除,請指定 -cleanDownloads $true

腳本會依資源類型列印摘要,並列出每個失敗或跳過資源的原因。 當腳本找到匹配的資源時,也會建立 ModifiedResources_<timestamp>.csv 包含 UpdateResultUpdateError 欄位的報告。

以下參數控制腳本的範圍與執行:

參數 接受值或預設值 Purpose
-Target ArcAzure,或 Both (預設) 選取已啟用 Azure Arc 的 SQL Server 資源、Azure SQL 資源和 Azure-SSIS IR,或同時選取這兩組。
-RunMode Single (預設)或 Scheduled 執行一次轉換作業,或設定 Azure 自動化 Runbook 每日執行。
-TargetLicenseType PAYG 為本文中的程序選擇隨用隨付(Pay-as-you-go)作為目標授權模式。
-targetSubscription 訂閱 ID;租戶中預設所有可存取的訂閱 將轉換限制為單一訂閱。
-targetResourceGroup 資源群組名稱;預設為所有資源群組 將轉換限制為僅限於單一資源群組。
-TenantId 租戶 ID;預設為目前 Az PowerShell 上下文 選擇 Microsoft Entra 租戶。
-ReportOnly Switch;預設為停用 列出符合資格的資源,但不加以變更。
-WaitForCompletion Switch;預設為停用 在支援時,等待已提交的變更達到最終狀態。
-UsePcoreLicense No (預設)或 Yes 控制由 Azure Arc 啟用的 SQL Server 物理核心授權。
-AutomationAccResourceGroupName 必須搭配 -RunMode Scheduled 選擇自動化帳號的資源群組。
-AutomationAccountName aaccAzureArcSQLLicenseType 預設 設定自動化帳號名稱。
-Location 必須搭配 -RunMode Scheduled 選擇自動化帳號和資源群組的 Azure 區域。
-cleanDownloads $false (預設)或 $true 腳本結束後會移除產生的工作資料夾。

預設執行行為依資源類型而定:

Resource 預設行為 使用 -WaitForCompletion
Azure SQL Database、Azure SQL 受控執行個體 提交非同步請求並回報 RequestSubmitted 等待並回報 Updated
透過 Azure Arc 啟用的 SQL Server 提交非同步擴充更新並回報 RequestSubmitted 輪詢擴充功能並回報 SucceededFailedTimedOut
Azure 虛擬機器上的 SQL Server 提交直接向 Azure Resource Manager 提出的要求,並回報 RequestSubmitted 執行 az sql VM 更新、等待並回報 Updated
Azure-SSIS IR 等待並回報 Updated 同樣的行為

預覽隨用付費轉型過程

manage-payg-transition.ps1 指令碼為已啟用 Azure Arc 的 Azure SQL 和 SQL Server 資源提供單一進入點。

使用 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. 為單一訂閱執行唯讀預覽。 即使你已經有 Azure 上下文,也要指定-TenantId,避免腳本使用錯誤的租戶:

    .\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,即可僅處理由 Azure Arc 啟用的 SQL Server 資源。

使用 PowerShell 執行一次隨用隨付移轉

僅在確認目標範圍並核准預覽報告中的所有資源後,才進行轉換為隨用隨付。

  1. 移除 -ReportOnly,並新增 -WaitForCompletion,以在資源提供者支援的情況下等待已確認的結果:

    .\manage-payg-transition.ps1 `
        -Target Both `
        -TenantId "<tenant-id>" `
        -targetSubscription "<subscription-id>" `
        -TargetLicenseType PAYG `
        -WaitForCompletion
    
  2. 請檢視產生的 CSV 報告。 調查每一個 FailedTimedOut 結果,並確認每項已提交變更的資源狀態。

PAYG 值會將目標授權模式設為「隨用隨付」。

若省略 -WaitForCompletion,大多數接受的變更皆為 UpdateResultRequestSubmitted。 這個結果代表 Azure 接受了這個請求,而不是授權類型已經完成變更。 Azure-SSIS IR 總是等待,因為它的更新指令不支援非同步執行。

使用 PowerShell 排定定期隨用付費轉換

排程模式會為每個選取的目標建立或更新一個 Azure 自動化 Runbook,將每個 Runbook 連結至每日排程,並立即啟動一次性作業。 提供自動化帳戶資源群組和 Azure 區域。 預設的自動化帳號名稱是 aaccAzureArcSQLLicenseType。 排程模式會使用自動化帳戶的受控識別。

  1. 在單一訂用帳戶中,為已啟用 Azure Arc 的 Azure SQL 和 SQL Server 資源排程轉換作業:

    .\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. 在自動化帳戶中,確認 Runbook 已發佈、已連結到每日排程,且能夠使用所選參數啟動作業。

如果 Azure 目標包含 SQL 受控執行個體集區,請將自動化帳戶的受控識別指派為 參與者,或指派為具有 Microsoft.Sql/instancePools/readMicrosoft.Sql/instancePools/write 的自訂角色。 排程設定並沒有指派一個內建角色來授予這些權限。

用 Azure 原則 強制執行隨用即付費授權

使用資源專屬的 Azure 原則 範例,持續強制執行隨用即用授權並修復配置漂移問題。 每個範例包含政策定義、部署腳本及修復腳本。

Warning

政策指派可以更改其範圍內所有匹配的資源。 先從範圍較窄的測試訂閱開始,只選擇你打算替換的現有授權類型。

下表連結了每個資源的政策套件與部署腳本:

Resource 政策套件 部署腳本
透過 Azure Arc 啟用的 SQL Server Arc 啟用的 SQL Server 授權類型合規 deployment.ps1
Azure 虛擬機器上的 SQL Server Azure VM 上 SQL Server 的授權類型合規性 deployment.ps1
Azure SQL 受控執行個體 SQL 受管理執行個體 授權類型合規 deployment.ps1
Azure SQL Database Azure SQL Database 授權類型合規性 deployment.ps1

使用所選資源類型的值和角色:

Resource 隨用隨付目標值 可覆寫的原始碼值 主要必要角色 重要限制
透過 Azure Arc 啟用的 SQL Server PAYG Paid;入口定義也支援 LicenseOnly Azure Extension for SQL Server Deployment 這個指派會將同一個目標套用至所有符合條件的主機,且不會區分版本。 混合型住宅社區應分別界定範圍。
Azure 虛擬機器上的 SQL Server PAYG AHUBDR 虛擬機器貢獻者 目標必須符合 Azure Hybrid Benefit 或被動高可用性或災難復原(HA/DR)授權條件。
Azure SQL 受控執行個體 LicenseIncluded BasePriceHybridFailoverRights SQL 受管理執行個體 貢獻者 HybridFailoverRights 集合 licenseTypeBasePrice ,且 hybridSecondaryUsagePassive
Azure SQL Database LicenseIncluded BasePrice SQL DB 參與者 此原則不適用於 master 和基本資料庫。 Azure SQL Database 僅支援已佈建 vCore 資料庫變更授權類型,因此請將其他以資料庫交易單位(DTU)為基礎的資料庫和無伺服器資料庫排除在指派之外,或予以豁免。

每個指派也需要 ReaderResource Policy Contributor。 部署腳本會在登入身份有權限建立角色指派時,才會授予所需的角色。 將 -GrantMissingPermissions 與修復指令碼搭配使用,以檢查並新增遺漏的角色。

當目標值需要授權證明時,SQL VM、SQL 受管理執行個體 和 SQL Database 部署腳本會提示確認。 -SkipLicenseConfirmation僅在自動化管道中使用,且操作員已確認符合資格並承擔合規責任。

對於已啟用 Arc 的 SQL Server,PAYG 原則也會設定週期性計費同意。 若後續轉讓將授權類型從 中移除 PAYG,該同意仍維持於延長。

這些政策套件使用共享的部署流程:

  1. 請依照 README 指示下載套件與policyscripts資料夾。

  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 Meaning 下一步行動
ReportOnly 腳本在唯讀模式下識別了符合資格的資源,且沒有提交變更。 在進行轉換前,請確認該資源是否應該使用隨用付費授權。
RequestSubmitted Azure 接受了非同步請求。 等待資源操作結束後,再驗證資源狀態。
UpdatedSucceeded 腳本偵測到成功的最終結果。 請確認資源上的授權類型。
Failed 服務拒絕更新或回傳失敗的終端狀態。 檢查 UpdateError、修正問題,然後重播預覽。
TimedOut Arc 擴展在投票限制前未達到終端狀態。 檢查延伸狀態。 更新可能會在腳本停止等待後完成。

要確認 Azure Arc 啟用的 SQL Server 目前授權類型與配置狀態,請執行以下 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

該指令碼會排除已採用按使用量付費授權的資源。 已完全收斂的範圍顯示沒有可更新的資源。 在你認為過渡完成之前,先調查任何仍然存在的資源。

檢視限制與帳單保障

  • Azure 虛擬機器上的 SQL Server 必須處於執行中狀態。 腳本會跳過已停止或解除配置的虛擬機,也不會啟動它們。
  • 此腳本會排除在 Azure 虛擬機器上使用 DR 授權類型的 SQL Server,因此不會覆寫被動 HA/DR 複本的授權設定。
  • 腳本並未揭露其嵌入 Arc 處理器的定期計費同意選項。 對於需要定期計費同意的由 CSP 管理的 Arc 資源,請使用 已啟用 Arc 的 SQL Server 授權類型合規性原則,此原則會在套用時設定同意PAYG
  • 預設的非同步執行會優先考量擴展性,而非即時確認。 當你需要在腳本結束前觀察終端機輸出結果時,請使用 -WaitForCompletion
  • 預設情況下,SQL Server on Azure VM 更新會使用非同步的 Azure Resource Manager 請求。 如果該請求失敗,腳本會退回到 az sql vm update,等待操作結束。

排解自動化失敗問題

利用產生的報告和 Azure 操作狀態來辨識未更新的資源。

  • 如果報告是空的,請確認租戶、訂閱和資源群組。 當涵蓋範圍內的所有資源都已採用隨用即付授權時,預期報告會是空白的。
  • 如果跳過了 Arc 啟用的資源,請恢復 Azure Connected Machine 代理的連線,確認 Azure SQL Server 擴充功能的配置狀態為 Succeeded,然後重新執行預覽。
  • 如果 UpdateResultRequestSubmitted,請不要把請求視為完成。 檢查資源狀態或在 Azure 操作結束後重新執行預覽。
  • 如果 Azure SQL 或 SQL Server 在 Azure VM 操作失敗,請確認 Azure CLI 已安裝、登入同一租戶,並授權目標訂閱。
  • 若排程模式失敗,請確認自動化帳號管理身份是否包含來源範例中列出的角色。
  • 若原則補救傳回 PolicyAuthorizationFailed,請確認指派的身分識別在指派範圍具有產品特定角色、讀者資源原則參與者。 重新執行部署指令碼,或在已登入的身分可以建立角色指派後,使用 -GrantMissingPermissions 重新執行修復指令碼。

完整資料來源請參見 manage-payg-transition.ps1。 有關目前的限制與測試結果,請參閱測試計畫。manage-payg-transition.ps1

依資源類型的權限

PowerShell 腳本的權限

貢獻者角色是本文腳本所需權限的超集,是最簡單的選項。 對於最小權限存取,請為範圍內的資源類型指派所需角色:

資源類型 角色或必要權限
Azure 虛擬機器上的 SQL Server 虛擬機器貢獻者
Azure SQL 受控執行個體 SQL 受管理執行個體 貢獻者
Azure SQL Database SQL DB 參與者
Azure SQL Database 彈性集區 SQL Server 參與者
Azure SQL 受控執行個體集區 貢獻者,或具有 Microsoft.Sql/instancePools/readMicrosoft.Sql/instancePools/write 的自訂角色
透過 Azure Arc 啟用的 SQL Server Azure 連線機器資源管理員
Azure-SSIS IR Data Factory 參與者
閱讀與列舉訂閱與資源 讀者,除非另一個已指派的角色授與所需的讀取權限

Azure 原則的權限

執行 deployment.ps1 的身份需要權限在所選管理群組建立政策定義,並在指派範圍內建立政策指派、修復任務、受管理身份與角色指派。 如果無法建立角色指派,請先將所需角色指派到政策指派的管理身份,然後再開始修復,並執行 deployment.ps1-SkipManagedIdentityRoleAssignment

根據預設,deployment.ps1 會為原則指派建立系統指派的受控識別,並在該指派範圍內授與三個角色。 產品專屬角色取決於所選政策樣本:

政策範例 產品專屬角色
透過 Azure Arc 啟用的 SQL Server Azure Extension for SQL Server Deployment
Azure 虛擬機器上的 SQL Server 虛擬機器貢獻者
Azure SQL 受控執行個體 SQL 受管理執行個體 貢獻者
Azure SQL Database SQL DB 參與者

每個原則指派身分也都需要 讀者資源原則參與者。 部署腳本只有在你指定 -SkipManagedIdentityRoleAssignment時才會跳過自動分配角色。

在開始修復前, start-remediation.ps1 檢查三個必要角色的政策指派身份。 如果缺少角色,劇本就會停止。 手動指派角色,或使用可在指派範圍建立角色指派的身分,以 -GrantMissingPermissions 重新執行修復指令碼。