我刚刚开始使用 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 包:
推荐的替代品正是我想要使用的 - 那么如何使用此 SDK 来扩展数据库呢?
.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
能够返回初始检查的结果,那就太好了 - 就像甚至可以将数据库扩展到所请求的层一样。
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);