ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

使用 install-payg-sql-server.ps1 将本地 SQL Server 以按需付费(PAYG)模式接入 Azure Arc 的完整指南

使用 install-payg-sql-server.ps1 将本地 SQL Server 以按需付费(PAYG)模式接入 Azure Arc 的完整指南 示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载本指南以 sql-server-samples 仓库中 install-payg-sql-server 安装说明 为主体结合其配套脚本 install-payg-sql-server.ps1 的源码实现讲解如何在一台物理机/虚拟机上自动完成 SQL Server 安装、ISO 介质挂载、静默配置、Azure Arc 接入以及 SQL 扩展以LicenseType PAYG注册的全过程。读完本文你将掌握脚本的全部命令行参数与默认值、Windows Server 2016 上的 TLS 兼容性修复方法并理解从介质装载到按量计费主机状态核查的每一步底层原理可在自己的环境中直接复现这套“本地 SQL Server 按需付费”的自动化部署方案。一、脚本定位与整体工作流程官方 README 对该脚本的定位非常明确它在你的机器上安装一个按需付费pay-as-you-go的 SQL Server 实例并使用下载好的 SQL Server 安装介质自动将其连接到 Azure。换言之这是一条把“传统本地 SQL Server”转变为“Azure Arc 托管、按小时计费”的端到端自动化路径——安装、注册、计费配置三步一气呵成无需在门户中手工逐步操作。结合 install-payg-sql-server.ps1 的源码结构主流程 try 块整个执行过程可以分为八个阶段准备 PowerShell 环境校验模块并自动加载/安装AzureAD、Az.Accounts、Az.Resources、Az.ConnectedMachine、Az.ResourceGraph五个模块模块清单并关闭破坏性变更警告与 WAM 登录清理残留进程若发现setup.exe已在运行则强制结束避免干扰后续安装进程清理登录并校验 Azure 上下文交互式Connect-AzAccount登录校验订阅存在后Set-AzContext切换上下文登录与校验阻止自动 Arc 注册给目标资源组打上ArcOnboarding Blocked标签避免其他自动注册流程与脚本显式注册冲突阻止自动上架挂载 ISO 并提取产品密钥扫描IsoFolder中的.iso文件并挂载为卷同时从同目录.txt文件中用正则提取产品密钥挂载与密钥提取静默安装 SQL Server调用挂载卷中的setup.exe以/q静默模式安装并传入服务账户、系统管理员等参数静默安装参数将机器注册到 Azure Arc调用Connect-AzConnectedMachine把主机注册为 Arc 资源Arc 注册安装 SQL 扩展并设为 PAYG通过New-AzConnectedMachineExtension部署WindowsAgent.SqlServer扩展设置LicenseType PAYG并启用自动升级最后用Search-AzGraph输出可计费主机清单扩展部署与计费核查。二、前置条件Prerequisites官方文档列出了四项必须满足的前置条件满足 Arc 入驻onboarding前置要求原 README 直接引用微软官方 prerequisites 文档。实操中通常需要有效的 Azure 订阅、目标区域可用、网络可访问 Azure 端点以及Microsoft.HybridCompute、Microsoft.AzureArcData等资源提供者已在订阅中注册。具体条目请按微软官方指引逐一核对。从微软技术支持工作区下载 SQL Server 镜像文件需要以Get SQL Installation Media获取 SQL 安装介质子类别提交支持请求并在请求中指明所需的 SQL Server 版本version和版本类型edition由技术支持提供工作区下载链接。这是本脚本唯一的介质来源。使用管理员账户登录机器脚本必须在提升权限elevated的 PowerShell 会话中运行且安装操作本身需要本机管理员权限。若在 Windows Server 2016 上安装需要按第三节所述先处理 TLS 版本配置因为该系统的默认 TLS 版本可能不满足 Azure 的安全要求。三、修复 Windows Server 2016 的 TLS 版本问题在 Windows Server 2016 上操作系统可能配置了不满足 Azure 安全要求的 TLS 版本。要求是在可用时启用强 TLS 版本TLS 1.2 和 1.3在 TLS 1.2/1.3 不可用时仍支持旧版本TLS 1.0 和 1.1同时必须禁用不安全的 SSL2 与 SSL3。第一步检查当前配置。在提升权限的 PowerShell 中运行[Net.ServicePointManager]::SecurityProtocol第二步判断是否需要修复。如果结果为SSL3, Tls说明系统仍在使用不安全的 SSL3需要执行以下两条注册表命令启用强加密协议Set-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319 -Name SchUseStrongCrypto -Value 1 -Type DWord Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319 -Name SchUseStrongCrypto -Value 1 -Type DWord第三步重启并验证。这两条命令同时写入 32 位Wow6432Node与 64 位两个注册表分支。运行完成后重启机器避免当前正在运行的应用引用旧值然后再次运行检查命令结果应为Tls, Tls11, Tls12, Tls13此时[Net.ServicePointManager]::SecurityProtocol已启用全部可用 TLS 版本且移除了 SSL3满足 Azure 连接的安全要求可以继续执行安装脚本。四、获取脚本仓库中该脚本与说明文档位于同一目录安装脚本install-payg-sql-server.ps1官方说明README.md将脚本内容保存为本地文件install-payg-sql-server.ps1保存到你要执行安装的当前目录即可。原 README 提供的下载命令为从微软官方仓库raw.githubusercontent.com拉取此处不再引用外部链接由于本仓库即为该脚本的镜像来源你也可以直接在本仓库对应路径下复制脚本文件两者内容一致。五、运行脚本参数详解脚本必须在提升权限elevated的 PowerShell 会话中运行。官方文档给出的参数表如下结合脚本 param 参数块 中的默认值与声明整理为下表参数值说明-AzureSubscriptionIdsubscription_id必填。承载 Arc 主机与 Arc SQL Server 资源的订阅 ID。该订阅将按按需付费方式为 SQL Server 软件计费。脚本会先校验该订阅是否存在不存在则报错退出订阅校验。-AzureResourceGroupresource_group_name必填。承载 Arc 主机与 Arc SQL Server 资源的资源组。脚本要求该资源组已存在不存在则报错退出资源组校验。-AzureRegionregion name必填。存储机器与 SQL Server 元数据的 Azure 区域例如westus。-SqlServerInstanceNamename of the instance可选。SQL Server 实例名。未指定时使用机器名脚本中仅在提供时才附加/INSTANCENAME参数见 L179-L181。-SqlServerAdminAccountsSQL Server admin accounts可选。SQL Server 系统管理员账户。默认值为BUILTIN\ADMINISTRATORS。-SqlServerSvcAccountSQL Server services account可选。SQL Server 服务账户。默认值为NT AUTHORITY\NETWORK SERVICE。-SqlServerSvcPasswordSQL Server service account password指定自定义服务账户时必填。仅在提供时附加/SQLSVCPASSWORD参数见 L186-L188。-AgtServerSvcAccountSQL Agent service account可选。SQL Server Agent 服务账户。默认值为NT AUTHORITY\NETWORK SERVICE。-AgtServerSvcPasswordSQL Agent service account password指定自定义 Agent 服务账户时必填。-IsoFolderFolder path必填。存放从技术支持工作区下载文件的文件夹路径。-ProxyHTTP proxy URL可选。网络配置了 HTTP 代理时需要。传入后Connect-AzConnectedMachine会使用代理完成 Arc 注册见 L204-L205。参数使用要点只有三个参数是强制的-AzureSubscriptionId、-AzureResourceGroup、-AzureRegion以及承载介质文件的-IsoFolder脚本对参数校验非常严格订阅不存在、资源组不存在都会立即报错并退出避免后续步骤在错误上下文中执行自定义服务账户SQL 服务账户或 Agent 服务账户时必须同时提供对应密码否则安装阶段会因缺少凭据而失败IsoFolder中通常同时包含.iso安装镜像和包含产品密钥的.txt文件脚本会一并扫描处理详见第七节。六、完整运行示例官方示例从 Downloads 文件夹安装 SQL Server 实例连接到订阅 IDsub_id、资源组resource_group区域为美国西部West US配置LicenseTypePAYG使用默认管理员账户与服务账户直连 Azure不经过代理.\install-payg-sql-server.ps1 -AzureSubscriptionId sub_id -AzureResourceGroup resource_group -AzureRegion westus -IsoFolder C:\Users\[YourUsername]\Downloads其他常见变体指定实例名与管理员账户.\install-payg-sql-server.ps1 -AzureSubscriptionId sub_id -AzureResourceGroup resource_group -AzureRegion eastus2 -IsoFolder D:\SQLMedia -SqlServerInstanceName SQLPAYG -SqlServerAdminAccounts CONTOSO\sqladmins通过 HTTP 代理部署自定义 SQL 服务账户及其密码.\install-payg-sql-server.ps1 -AzureSubscriptionId sub_id -AzureResourceGroup resource_group -AzureRegion westeurope -IsoFolder D:\SQLMedia -SqlServerSvcAccount CONTOSO\sqlsvc -SqlServerSvcPassword password -Proxy http://proxy.corp.contoso.com:8080运行后脚本会在每个阶段打印进度 Ensure PS version and load missing Azure modules 、 Log in to Azure 、 Mount the ISO file as a volume 等安装完成后最终输出一段可计费主机清单可用于核对 PAYG 配置是否生效。七、脚本执行流程的源码级拆解这一节以 install-payg-sql-server.ps1 源码为准逐阶段说明脚本内部究竟做了什么便于你在故障排查时理解每一步的输出与日志。7.1 模块自举加载脚本通过LoadModule函数L27-L78实现模块的“三级自举”会话已导入则直接使用 → 本机可用则Import-Module→ 在线库存在则Install-Module -Force -Scope CurrentUser后导入 → 三者皆无则打印错误并EXIT 1。需要加载的模块为AzureAD、Az.Accounts、Az.Resources、Az.ConnectedMachine、Az.ResourceGraph覆盖登录、资源组操作、Arc 机器注册、扩展部署与图查询五个能力域。7.2 登录与上下文锁定Update-AzConfig -EnableLoginByWam $false关闭 WAM 登录后调用Connect-AzAccount。随后用Get-AzSubscription校验-AzureSubscriptionId是否存在再Set-AzContext将后续所有操作锁定到该订阅防止多订阅环境下操作漂移。7.3 用资源组标签阻止自动 Arc 注册脚本先确认资源组存在然后为其设置ArcOnboarding Blocked标签。从源码结构看这是为了给后续的显式注册“占位”$tags {ArcOnboarding Blocked} Set-AzResourceGroup -Name $AzureResourceGroup -Tag $tags | Out-Null它可以避免其他自动化流程例如 Arc 代理的自动注册策略抢先注册机器从而保证最终由脚本控制的Connect-AzConnectedMachine是唯一注册通道。7.4 ISO 挂载与产品密钥提取这一阶段做了两件事L130-L166提取产品密钥遍历IsoFolder下所有*.txt文件逐行用正则[A-Z0-9]{5,}-[A-Z0-9]{5,}-[A-Z0-9]{5,}-[A-Z0-9]{5,}-[A-Z0-9]{4,}.*匹配形如XXXXX-XXXXX-XXXXX-XXXXX-XXXXX的密钥并去除尾部附加文本挂载 ISO遍历*.iso文件用Mount-DiskImage挂载为卷并取得盘符。对于密钥预置在镜像中的批量许可VL介质脚本内置了一个$noKeylist名单命中以下文件名时强制清空产品密钥安装时不再传/PID$noKeylist SQLFULL_ENU_ENTVL.iso, SQLFULL_ENU_STDVL.iso, SQLServer2022-x64-ENU-Ent.iso, SQLServer2022-x64-ENU-Std.iso7.5 静默安装 SQL Server脚本以Start-Process -Wait方式调用挂载卷下的setup.exeL174-L195基础参数为/q /ACTIONInstall /FEATURESSQL /SQLSVCACCOUNT... /SQLSYSADMINACCOUNTS... /AGTSVCACCOUNT... /IACCEPTSQLSERVERLICENSETERMS其中FEATURESSQL表示只安装数据库引擎/q为完全静默IACCEPTSQLSERVERLICENSETERMS自动接受许可条款。可选参数按需追加/INSTANCENAME自定义实例名、/PID产品密钥、/SQLSVCPASSWORDSQL 服务账户密码、/AGTSVCPASSWORDAgent 服务账户密码。安装完成后立即Dismount-DiskImage卸载镜像。7.6 机器注册到 Azure Arc取机器名后调用Connect-AzConnectedMachineL200-L208完成注册Connect-AzConnectedMachine -ResourceGroupName $AzureResourceGroup -Name $hostName -Location $AzureRegion配置了-Proxy时调用会附带代理参数。注意从源码结构看该调用中的代理参数写作-Proxi $Proxy与 PowerShell 惯用的-Proxy拼写不同若你的Az.ConnectedMachine模块版本不接受该参数名请以模块实际参数名为准这一点在下文“已知细节”中还会提到。7.7 安装 SQL 扩展并设定 PAYG 计费这是整个脚本的核心计费配置L210-L220。脚本构造的扩展设置如下$Settings { SqlManagement { IsEnabled $true }; LicenseType PAYG; enableExtendedSecurityUpdates $False; } New-AzConnectedMachineExtension -ResourceGroupName $AzureResourceGroup -MachineName $hostName -Name WindowsAgent.SqlServer -Publisher Microsoft.AzureData -ExtensionType WindowsAgent.SqlServer -Location $AzureRegion -Settings $Settings -EnableAutomaticUpgrade三个设置项的含义SqlManagement.IsEnabled $true启用 SQL 管理能力使 SQL Server 出现在 Azure 门户的 Arc 资源列表中LicenseType PAYG将许可类型声明为按需付费这是本脚本的最终目标——该主机上的 SQL Server 将由订阅按小时计费enableExtendedSecurityUpdates $false不启用扩展安全更新ESU。-EnableAutomaticUpgrade让扩展在发布新版本时自动升级避免因扩展版本过旧而无法支持后续的许可管理功能仓库中 modify-license-type 等配套脚本要求扩展不低于 1.1.2230.58。7.8 用 Resource Graph 核查可计费主机安装完成后脚本通过Search-AzGraph执行一段 KQL 查询L223-L301输出该订阅/资源组下所有“Connected 状态、已安装 SQL 扩展、存在 SQL Arc 实例Enterprise 或 Standard”的可计费主机清单。查询逻辑要点从Microsoft.HybridCompute/machines取状态为 Connected 的机器根据detectedProperties.manufacturer/model识别虚拟机平台VMware、QEMU、Amazon EC2、OpenStack、Hetzner、DigitalOcean、UpCloud、oVirt、Alibaba、KubeVirt、Parallels、XEN、Google Compute Engine、Nutanix AHV、Microsoft Hyper-V 等从而决定按逻辑核logicalCoreCount还是物理核coreCount计费extend billableCores iff(VMbyManufacturer or VMbyModel or GoogleVM or NutanixVM or MicrosoftVM, properties.detectedProperties.logicalCoreCount, properties.detectedProperties.coreCount)左连接WindowsAgent.SqlServer/LinuxAgent.SqlServer扩展内连接microsoft.azurearcdata/sqlserverinstances过滤掉HADR许可与未连接实例按机器汇总输出EditionEnterprise/Standard、License_Type来自扩展设置的LicenseType、Cores、Version、OS、Uses_UV等字段。这段查询与仓库中 Get-SQLAzureArcReclassReport.ps1 的思路一脉相承——后者把“SQL 实例资源、许可设置、扩展版本”导出为ArcSQLServerinstanceswithReclass.csv与SQLExtensionStatus.csv可用于更大范围的合规审计。7.9 错误处理与收尾整个主流程包在try/catch/finally中L80、L303-L308任何阶段抛出的错误都会被捕获并打印An error occurred: ...finally块无论成功失败都会打印 Installation completed 便于判断脚本是否走到了收尾。八、安装完成后的管理与配套样例安装脚本只负责“从零到 PAYG 注册”。落地之后许可证状态并非一成不变仓库在samples/manage/azure-arc-enabled-sql-server目录下提供了一整套配套运维与合规工具修改许可类型modify-arc-sql-license-type.ps1 可在订阅、资源组、机器或 CSV 列表粒度上批量切换Paid/PAYG/LicenseOnly支持-ReportOnly预演、-Force强制覆盖、-EnableESU开关扩展安全更新详细用法见 modify-license-type/README.md。例如从 PAYG 迁移回带软件保障的付费模式时可直接用该脚本切换。PAYG 过渡管理manage-payg-transition.ps1 与 set-azurerunbook.ps1 用于把“许可过渡”过程封装为 Azure 自动化 Runbook并附带 TESTPLAN.md 测试计划配套的 manage-payg-transition/README.md 说明了如何在自动化账户中托管该流程。合规策略强制arc-sql-payg-compliance 提供了 Azure Policy 工件policy.json/params.json/rules.json将LicenseType Paid的 Arc SQL 服务器标记为不合规并通过DeployIfNotExists修正为PAYGarc-sql-license-type-compliance 则支持把许可类型强制配置为任意目标值并按 Edition 给出Paid/LicenseOnly的合规判定规则。卸载与回滚需要反向操作时uninstall-azure-extension-for-sql-server.ps1 支持按机器、资源组、订阅、订阅列表乃至整个账户范围批量卸载 SQL 扩展要求至少Contributor角色用法见 uninstall-azure-extension-for-sql-server/README.md。九、已知细节与注意事项Windows PowerShell 5.1 的curl别名问题在 Windows PowerShell 5.1 中curl是Invoke-WebRequest的别名若你按类似命令下载文件建议改用curl.exe或在 PowerShell 7 中执行该提示同样出现在仓库 arc-sql-license-type-compliance/README.md 中。Agent 密码参数的分支细节从 install-payg-sql-server.ps1 源码结构看判断“是否附加/AGTSVCPASSWORD”的条件写作if ($AgtSvCPassword)而参数块中声明的名称是$AgtServerSvcPasswordL17-L19两者拼写不一致意味着该分支目前不会命中如果你确实需要为 Agent 服务账户设置密码可自行将条件统一为$AgtServerSvcPassword后使用。代理参数的拼写Arc 注册调用中代理参数写作-ProxiL205与常见拼写-Proxy不同请以你所安装的Az.ConnectedMachine模块实际参数名为准。介质与密钥IsoFolder中必须包含由微软技术支持提供的.iso文件非 VL 介质需要同时放置包含产品密钥的.txt文件脚本按XXXXX-XXXXX-XXXXX-XXXXX-XXXXX格式识别VL 介质SQLFULL_ENU_ENTVL.iso等则无需密钥。权限边界脚本需要本机管理员权限、Connect-AzAccount的交互登录以及对目标订阅/资源组具备创建 Arc 机器与扩展的权限Azure Connected Machine Resource Administrator 一类角色。资源组必须预先创建因为脚本对不存在的资源组会直接报错退出。结语install-payg-sql-server.ps1把“获取介质 → 静默安装 → Arc 注册 → PAYG 计费配置 → 可计费状态核查”这一长链路压缩成了单条命令配合仓库内modify-license-type、manage-payg-transition与 Azure Policy 合规工件即可形成“安装即按需计费、事后可批量改签、持续合规审计”的完整治理闭环。无论你是想快速验证 Arc 托管 SQL Server 的 PAYG 计费模型还是要在生产环境中批量落地都可以直接以本文的参数表与源码拆解为操作蓝本。赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐CVAT 数据集清单Dataset Manifest指南JSONL 格式规范、create.py 生成工具与服务器端消费机制CVAT 数据集清单Dataset Manifest指南JSONL 格式规范、create.py 生成工具与服务器端消费机制 本文为 CVATCompu示例工程数据库教程后端Arc-enabled SQL Server 许可证类型批量修改使用 modify-arc-sql-license-type.ps1 规模化管理 PAYG / Paid / LicenseOnlyArc enabled SQL Server 许可证类型批量修改使用 modify arc sql license type.ps1 规模化管理 PAYG /示例工程数据库教程后端SQL Server Samples 的 PAYG 转换测试计划详解manage-payg-transition.ps1 的 46 项验证、缺陷修复与权限设计SQL Server Samples 的 PAYG 转换测试计划详解manage payg transition.ps1 的 46 项验证、缺陷修复与权限设计示例工程数据库教程后端上一篇OneUptime故障演练工具如何用混沌工程测试监控系统有效性下一篇终极指南espeak-ng配置文件详解 - 从全局设置到语音特定参数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表