用途
Azure.ResourceManager.Sql(.NET)是 Azure SQL 的管理平面 SDK,用于通过 Azure Resource Manager 预配和管理 Azure SQL 资源。它负责创建服务器、数据库、弹性池,配置防火墙规则,管理故障转移组等管理操作。
需要注意管理平面与数据平面的区别:本 SDK(Azure.ResourceManager.Sql)用于创建服务器、数据库、弹性池,配置防火墙规则,管理故障转移组;数据平面 SDK(Microsoft.Data.SqlClient)用于执行查询、存储过程、管理连接。
安装
dotnet add package Azure.ResourceManager.Sql dotnet add package Azure.Identity
当前版本:稳定版 v1.3.0,预览版 v1.4.0-beta.3。
环境变量
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
服务主体身份验证(可选)
AZURE_TENANT_ID=<tenant-id> AZURE_CLIENT_ID=<client-id> AZURE_CLIENT_SECRET=<client-secret>
身份验证
使用 Azure.Identity、Azure.ResourceManager、Azure.ResourceManager.Sql 命名空间。始终使用 DefaultAzureCredential 创建凭据,再创建 ArmClient,并通过订阅 ID 获取订阅资源。
资源层级
ArmClient → SubscriptionResource → ResourceGroupResource → SqlServerResource,其下包含 SqlDatabaseResource、ElasticPoolResource(下含 ElasticPoolDatabaseResource)、SqlFirewallRuleResource、FailoverGroupResource、ServerBlobAuditingPolicyResource、EncryptionProtectorResource、VirtualNetworkRuleResource。
核心工作流
- 创建 SQL Server:通过资源组获取服务器集合,使用 SqlServerData 定义位置、管理员登录名与密码、版本、最小 TLS 版本、公共网络访问标志,调用 CreateOrUpdateAsync 创建(长时间运行操作)。
- 创建 SQL 数据库:使用 SqlDatabaseData 定义 SKU、最大字节数、排序规则、备份存储冗余,通过服务器的 GetSqlDatabases 集合创建。
- 创建弹性池:使用 ElasticPoolData 定义 SKU(层级、容量)与每数据库设置(最小/最大容量),通过 GetElasticPools 集合创建。
- 将数据库加入弹性池:在 SqlDatabaseData 中设置 ElasticPoolId 后创建或更新数据库。
- 配置防火墙规则:使用 SqlFirewallRuleData 设置起始与结束 IP 地址,可允许 Azure 服务(0.0.0.0 到 0.0.0.0)或特定 IP 范围。
- 列出资源:可遍历订阅中的服务器、服务器中的数据库、弹性池。
- 获取连接字符串:服务器 FQDN 可预测为 {server.Data.Name}.database.windows.net,按示例拼接连接字符串。
关键类型
ArmClient 是所有 ARM 操作的入口;SqlServerResource/SqlServerCollection 表示服务器及其 CRUD 集合;SqlDatabaseResource/SqlDatabaseCollection 表示数据库及其 CRUD 集合;ElasticPoolResource/ElasticPoolCollection 表示弹性池及其 CRUD 集合;SqlFirewallRuleResource/SqlFirewallRuleCollection 表示防火墙规则及其 CRUD 集合;SqlServerData、SqlDatabaseData、ElasticPoolData、SqlFirewallRuleData 分别为创建/更新负载;SqlSku 用于 SKU 配置(层级、容量)。
常用 SKU
数据库 SKU:Basic(5 DTU,最大 2 GB)、S0-S12(Standard,10-3000 DTU)、P1-P15(Premium,125-4000 DTU)、GP_Gen5_2(GeneralPurpose,基于 vCore,2 vCore)、BC_Gen5_2(BusinessCritical,基于 vCore,2 vCore)、HS_Gen5_2(Hyperscale,基于 vCore,2 vCore)。
弹性池 SKU:BasicPool(50-1600 eDTU)、StandardPool(50-3000 eDTU)、PremiumPool(125-4000 eDTU)、GP_Gen5_2(GeneralPurpose,基于 vCore)、BC_Gen5_2(BusinessCritical,基于 vCore)。
最佳实践
对必须在继续前完成的操作使用 WaitUntil.Completed;需要手动轮询或并行运行时使用 WaitUntil.Started;始终使用 DefaultAzureCredential,切勿在生产环境硬编码密码;处理 RequestFailedException 以应对 ARM API 错误;使用 CreateOrUpdateAsync 实现幂等操作;通过 Get* 方法导航层级(如 server.GetSqlDatabases());管理多个数据库时使用弹性池优化成本;在尝试连接前配置防火墙规则。
错误处理
捕获 RequestFailedException,可按状态码分别处理,例如 409 表示服务器已存在,400 表示无效请求,其他情况输出状态、错误码与消息。
参考文件
references/server-management.md:服务器 CRUD、管理员凭据、Azure AD 身份验证、网络。references/database-operations.md:数据库 CRUD、缩放、备份、还原、复制。references/elastic-pools.md:池管理、添加/移除数据库、缩放。
相关 SDK
Microsoft.Data.SqlClient:数据平面(执行查询、存储过程),安装命令 dotnet add package Microsoft.Data.SqlClient。Azure.ResourceManager.Sql:管理平面(本 SDK),安装命令 dotnet add package Azure.ResourceManager.Sql。Microsoft.EntityFrameworkCore.SqlServer:SQL Server 的 ORM,安装命令 dotnet add package Microsoft.EntityFrameworkCore.SqlServer。
限制
仅当任务明确匹配上述范围时使用本技能。不要将输出视为环境特定验证、测试或专家审查的替代。如果缺少必需输入、权限、安全边界或成功标准,应停止并请求澄清。