你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过用于 .NET 的 Batch Management 客户端库管理 Batch 帐户和配额

可以使用 Batch Management .NET 库来自动执行 Batch 帐户的创建、删除、密钥管理和配额发现操作,从而降低 Azure Batch 应用程序的维护开销。

  • 在任何区域中创建和删除 Batch 帐户。 例如,如果是一家独立软件供应商 (ISV),现在要为每个分配了不同计费 Batch 帐户的客户提供服务,则可以将帐户创建和删除功能添加到客户门户中。
  • 以编程方式为任何 Batch 帐户检索和重新生成帐户密钥。 这可以帮助遵守强制帐户密钥定期滚动更新或到期的安全策略。 当各种不同的 Azure 区域中有多个 Batch 帐户时,将此滚动更新过程自动化会提高解决方案的效率。
  • 检查帐户配额并采取试错猜测,确定哪些 Batch 帐户存在哪些限制。 在启动作业、创建池或添加计算节点之前检查帐户配额可以主动调整创建计算资源的位置或时机。 可在帐户中分配其他资源之前,确定哪些帐户需要增加配额。
  • 结合其他 Azure 服务的功能获得全功能管理体验,方法是在同一应用程序中使用 Batch Management .NET、Microsoft Entra IDAzure 资源管理器。 使用这些功能及其 API 可以提供顺畅的身份验证体验、创建和删除资源组以及上述功能,以获取端到端管理解决方案。

注意

尽管本文着重介绍以编程方式管理 Batch 帐户、密钥和配额,但你也可以使用 Azure 门户执行其中的许多活动。

创建和删除 Batch 帐户

Batch Management API 的主要功能之一就是在 Azure 区域中创建和删除 Batch 帐户。 为此,请使用 BatchAccountCollection.CreateOrUpdateDelete 或其异步对应项。

以下代码段将创建一个帐户,从 Batch 服务获取新建的帐户,然后将它删除。

 string subscriptionId = "Your SubscriptionID";
 string resourceGroupName = "Your ResourceGroup name";

 var credential = new DefaultAzureCredential();
 ArmClient _armClient = new ArmClient(credential);

 ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
 ResourceGroupResource resourceGroupResource = _armClient.GetResourceGroupResource(resourceGroupResourceId);

 var data = new BatchAccountCreateOrUpdateContent(AzureLocation.EastUS);

 // Create a new batch account
 resourceGroupResource.GetBatchAccounts().CreateOrUpdate(WaitUntil.Completed, "Your BatchAccount name", data);
 
 // Get an existing batch account
 BatchAccountResource batchAccount = resourceGroupResource.GetBatchAccount("Your BatchAccount name");

 // Delete the batch account
 batchAccount.Delete(WaitUntil.Completed);

注意

使用 Batch Management .NET 库的应用程序需有服务管理员或共同管理员访问权限,才能使用拥有要管理的 Batch 帐户的订阅。 有关详细信息,请参阅“Microsoft Entra ID”部分和 AccountManagement 代码示例。

检索和重新生成帐户密钥

使用 GetKeys 从订阅中的任何 Batch 帐户获取主要和次要帐户密钥。 可以使用 RegenerateKey 重新生成这些密钥。

string subscriptionId = "Your SubscriptionID";
string resourceGroupName = "Your ResourceGroup name";

var credential = new DefaultAzureCredential();
ArmClient _armClient = new ArmClient(credential);

ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
ResourceGroupResource resourceGroupResource = _armClient.GetResourceGroupResource(resourceGroupResourceId);

var data = new BatchAccountCreateOrUpdateContent(AzureLocation.EastUS);

// Get an existing batch account
BatchAccountResource batchAccount = resourceGroupResource.GetBatchAccount("Your BatchAccount name");

// Get and print the primary and secondary keys
BatchAccountKeys accountKeys = batchAccount.GetKeys();

Console.WriteLine("Primary key:   {0}", accountKeys.Primary);
Console.WriteLine("Secondary key: {0}", accountKeys.Secondary);

// Regenerate the primary key
BatchAccountRegenerateKeyContent regenerateKeyContent = new BatchAccountRegenerateKeyContent(BatchAccountKeyType.Primary);
batchAccount.RegenerateKey(regenerateKeyContent);

提示

可以为管理应用程序创建简化的连接工作流。 首先,获取想要使用 GetKeys 管理的 Batch 帐户的帐户密钥。 然后在初始化 Batch .NET 库的 BatchSharedKeyCredentials 类(初始化 BatchClient 时使用)时使用此密钥。

检查 Azure 订阅和 Batch 帐户配额

Azure 订阅和类似于 Batch 的各个 Azure 服务均有默认配额,用于限制其中特定实体的数目。 有关 Azure 订阅的默认配额,请参阅 Azure 订阅和服务限制、配额与约束。 有关 Batch 服务的默认配额,请参阅 Azure Batch 服务的配额和限制。 使用 Batch Management .NET 库可以在应用程序中检查这些配额。 这样,便可以在添加帐户或计算资源(如池和计算节点)之前做出分配决策。

检查 Azure 订阅和 Batch 帐户配额

在区域中创建 Batch 帐户之前,可以检查 Azure 订阅,看是否能将帐户添加到该区域中。

在以下代码片段中,我们先使用 GetBatchAccounts 获取订阅中所有 Batch 帐户的集合。 获取此集合后,可以确定目标区域有多少个帐户。 然后使用 GetBatchQuotas 获取 Batch 帐户配额,并确定可以在该区域中创建多少个帐户(如果有)。

string subscriptionId = "Your SubscriptionID";
ArmClient _armClient = new ArmClient(new DefaultAzureCredential());

ResourceIdentifier subscriptionResourceId = SubscriptionResource.CreateResourceIdentifier(subscriptionId);
SubscriptionResource subscriptionResource = _armClient.GetSubscriptionResource(subscriptionResourceId);

// Get a collection of all Batch accounts within the subscription
var batchAccounts = subscriptionResource.GetBatchAccounts();
Console.WriteLine("Total number of Batch accounts under subscription id {0}:  {1}", subscriptionId, batchAccounts.Count());

// Get a count of all accounts within the target region
string region = "eastus";
int accountsInRegion = batchAccounts.Count(o => o.Data.Location == region);

// Get the account quota for the specified region
BatchLocationQuota batchLocationQuota = subscriptionResource.GetBatchQuotas(AzureLocation.EastUS);
Console.WriteLine("Account quota for {0} region: {1}", region, batchLocationQuota.AccountQuota);

// Determine how many accounts can be created in the target region
Console.WriteLine("Accounts in {0}: {1}", region, accountsInRegion);
Console.WriteLine("You can create {0} accounts in the {1} region.", batchLocationQuota.AccountQuota - accountsInRegion, region);

在上面的代码片段中,creds 是 TokenCredentials 的实例。 若要查看一个创建此对象的示例,请参阅 GitHub 上的 AccountManagement 代码示例。

检查 Batch 帐户的计算资源配额

在增加 Batch 解决方案中的计算资源之前,可以检查以确保想要分配的资源不会超过该帐户的配额。 通过以下代码片段,可输出名为 mybatchaccount 的 Batch 帐户的配额信息。 但在自己的应用程序中,可以使用此类信息来确定帐户是否可以处理要创建的其他资源。

string subscriptionId = "Your SubscriptionID";
string resourceGroupName = "Your ResourceGroup name";

var credential = new DefaultAzureCredential();
ArmClient _armClient = new ArmClient(credential);

ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
ResourceGroupResource resourceGroupResource = _armClient.GetResourceGroupResource(resourceGroupResourceId);

// Get an existing batch account
BatchAccountResource batchAccount = resourceGroupResource.GetBatchAccount("Your BatchAccount name");

// Now print the compute resource quotas for the account
Console.WriteLine("Core quota: {0}", batchAccount.Data.DedicatedCoreQuota);
Console.WriteLine("Pool quota: {0}", batchAccount.Data.PoolQuota);
Console.WriteLine("Active job and job schedule quota: {0}", batchAccount.Data.ActiveJobAndJobScheduleQuota);

重要

尽管 Azure 订阅和服务有默认配额,但其中许多限制都可以通过在 Azure 门户请求增加配额来提高。

将 Microsoft Entra ID 与 Batch Management .NET 配合使用

Batch Management .NET 库是 Azure 资源提供程序客户端,可与 Azure 资源管理器一起使用,以编程方式管理帐户资源。 需要使用 Microsoft Entra ID 对通过任何 Azure 资源提供程序客户端(包括 Batch Management .NET 库)和 Azure 资源管理器发出的请求进行身份验证。 有关将 Microsoft Entra ID 与 Batch Management .NET 库配合使用的信息,请参阅使用 Microsoft Entra ID 对 Batch 解决方案进行身份验证

GitHub 上的示例项目

查看 GitHub 上的 AccountManagement 示例项目,了解 Batch Management .NET 的操作实践。 AccountManagement 示例应用程序演示了以下操作:

  1. 利用使用 Microsoft 身份验证库 (MSAL) 获取和缓存令牌来从 Microsoft Entra ID 获取安全令牌。 如果用户尚未登录,系统会提示其输入 Azure 凭据。
  2. 使用从 Microsoft Entra ID 获取的安全令牌创建 SubscriptionClient,以便在 Azure 中查询与帐户关联的订阅列表。 如果列表包含多个订阅,则用户可从中选择一个订阅。
  3. 获取与所选订阅关联的凭据。
  4. 使用凭据创建 ResourceManagementClient 对象。
  5. 使用 ResourceManagementClient 对象创建资源组。
  6. 使用 BatchManagementClient 对象执行多项 Batch 帐户操作:
    • 在新资源组中创建 Batch 帐户。
    • 从 Batch 服务获取新建的帐户。
    • 输出新帐户的帐户密钥。
    • 重新生成帐户的新主密钥。
    • 输出帐户的配额信息。
    • 输出订阅的配额信息。
    • 输出订阅中的所有帐户。
    • 删除新创建的帐户。
  7. 删除该资源组。

若要成功运行示例应用程序,必须首先在 Azure 门户中将其注册到 Microsoft Entra 租户,并向 Azure 资源管理器 API 授予权限。 按照使用 Azure AD 对 Batch 管理应用程序进行验证中提供的步骤操作。

后续步骤

  • 了解 Batch 服务工作流和主要资源(如池、节点、作业和任务)。
  • 了解使用批处理 .NET 客户端库Python 开发支持批处理的应用程序的基本概念。 这些快速入门介绍了使用 Batch 服务在多个计算节点上执行工作负载的示例应用程序,并说明了如何使用 Azure 存储暂存和检索工作负载文件。