Azure .NET SDK:通过 SDK 扩展 Azure SQL 数据库

问题描述 投票:0回答:2

我刚刚开始使用 Microsoft 的 .NET SDK for Azure 来管理一些资源,例如 SQL 数据库。我尝试使用 Azure.ResourceManager.Sql 包来实现此目的。我不知道如何扩展和缩减常规 SQL 数据库或使用 SDK 触发该过程 - 有谁知道吗?

我希望这是 SqlDatabaseResource 类上的一个方法,我还可以在 .data.sku 属性中访问当前的缩放级别。

据我了解,SDK涵盖了Azure API的功能,所以我想我可以通过API调用来做到这一点,但由于有一个SDK,我更愿意使用它。

此 Microsoft Learn 页面上写着

使用 Azure SQL 数据库管理库来创建、管理和 扩展 Azure SQL 数据库服务器实例。

参考已弃用的 Microsoft.Azure.Management.Sql.Fluent 包:

deprecated package

推荐的替代品正是我想要使用的 - 那么如何使用此 SDK 来扩展数据库呢?

.net azure azure-sql-database azure-sdk-.net azure-sdk
2个回答
2
投票
好吧,我终于弄清楚它是如何工作的了。 MS 支持建议设置

.RequestedServiceObjectiveName

SqlDatabasePatch
 属性并在 
Update
 上调用 
SqlDatabaseResource
 方法。不幸的是,这不起作用,因为该属性是只读的。

但是,我尝试了如下所述,它对我有用。缺乏任何文档,并且 MS 支持不是特别有帮助,我无法判断这是否是“官方”或推荐的方法,或者它是否会在 SDK 的未来版本中继续工作,所以我仍然愿意寻求更好的建议或确认。

因此,您要做的就是遍历 Azure 的层次结构来访问数据库:

    初始化一个
  • ArmClient
    
    
  • 获取你的
  • SubscriptionResource
    
    
  • 在该订阅中获取您的
  • ResourceGroupResource
    
    
  • 获取该资源组中的
  • SqlServerResource
    
    
  • 创建
  • SqlDatabasePatch
     的新实例,并将其 
    Sku
     属性设置为 
    SqlSku
     的新实例,并相应设置 
    Capacity
    Family
    Tier
     属性
  • sqlDatabaseResource
     的数据库 ID 分配给 
    SqlDatabasePatch.SourceDatabaseId
    
    
  • Update
     上运行 
    UpdateAsync
    sqlDatabaseResource
    ,提供 
    SqlDatabasePatch
     作为参数。
  • 您可以决定是否只想触发数据库扩展(
  • Azure.WaitUntil.Started
    )或等待它完成(
    Azure.WaitUntil.Completed
这是代码:

ArmClient client = new ArmClient(new DefaultAzureCredential()); SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync(); ResourceGroupCollection resourceGroups = subscription.GetResourceGroups(); ResourceGroupResource resourceGroup = await resourceGroups.GetAsync("My_resourceGroup"); SqlServerResource sqlServerResource = await resourceGroup.GetSqlServerAsync("MySqlServerName"); SqlDatabaseResource sqlDatabaseResource = await sqlServerResource.GetSqlDatabaseAsync("MyDatabaseName"); SqlDatabasePatch patch = new SqlDatabasePatch(); SqlSku sku = new SqlSku("GP_Gen5"); sku.Capacity = 2; sku.Family = "Gen5"; sku.Tier = "GeneralPurpose"; patch.Sku = sku; patch.SourceDatabaseId = sqlDatabaseResource.Id; var result = await sqlDatabaseResource.UpdateAsync(Azure.WaitUntil.Started, patch);
如何从 ElasticPool 添加/删除数据库:

工作方式与上面相同,只需设置补丁的

ElasticPoolId

 属性而不是 
Sku
:

patch.ElasticPoolId = new ResourceIdentifier("/subscriptions/<subscriptionID>/resourceGroups/<resourcegropuname>/providers/Microsoft.Sql/servers/<servername>/elasticPools/<elasticpoolname>"); patch.SourceDatabaseId = sqlDatabaseResource.Id; var result = await sqlDatabaseResource.UpdateAsync(Azure.WaitUntil.Started, patch);
不幸的是,

result

变量不包含任何成功信息。虽然我知道 
WaitUntil.Started
 不会返回最终结果,但如果 
UpdateAsync
 能够返回初始检查的结果,那就太好了 - 就像甚至可以将数据库扩展到所请求的层一样。


0
投票
这是对@Aileron79 的优秀答案的更简洁的理解:

ArmClient client = new(new DefaultAzureCredential()); ResourceIdentifier resourceId = SqlDatabaseResource.CreateResourceIdentifier("SubscriptionId", "ResourceGroupName", "SqlServerName", "DatabaseName"); SqlDatabaseResource sqlDatabaseResource = (await client.GetSqlDatabaseResource(resourceId).GetAsync(cancellationToken)).Value; SqlDatabasePatch patch = new() { Sku = new SqlSku("S1"), SourceDatabaseId = sqlDatabaseResource.Id }; ArmOperation<SqlDatabaseResource> result = await sqlDatabaseResource.UpdateAsync(waitUntilCompleted ? Azure.WaitUntil.Completed : Azure.WaitUntil.Started, patch, cancellationToken);
    
© www.soinside.com 2019 - 2024. All rights reserved.