首页 > 解决方案 > 如何授予作业管理器任务权限以调整池的大小?

问题描述

我正在运行令人尴尬的并行工作负载,但事先不知道并行任务的数量。相反,我的作业管理器任务执行简单的计算以确定并行任务的数量,然后将任务添加到作业中。

现在,一旦我知道并行任务的数量,我想立即相应地调整我正在运行的池的大小(我正在自动池中运行作业)。这是我尝试这样做的方法。

当我创建JobManagerTask我提供

...
  authentication_token_settings=AuthenticationTokenSettings(
      access=[AccessScope.job]),
...

在运行时,任务AZ_BATCH_AUTHENTICATION_TOKEN在环境中接收,使用它来创建BatchServiceClient,使用客户端将工作任务添加到作业并最终调用client.pool.resize()增加target_dedicated_nodes。在这个阶段,任务从服务中得到一个错误:

.../site-packages/azure/batch/operations/_pool_operations.py", line 1310, in resize
    raise models.BatchErrorException(self._deserialize, response)
azure.batch.models._models_py3.BatchErrorException: Request encountered an exception.
Code: PermissionDenied
Message: {'additional_properties': {}, 'lang': 'en-US', 'value': 'Server failed to authorize the request.\nRequestId:4b34d8e5-7c28-4af2-9e1f-9cf88a486511\nTime:2020-11-26T17:32:55.7673310Z'}
AuthenticationErrorDetail: The supplied authentication token does not have permission to call the requested Url.

如何授予任务调整池大小的权限?

标签: azure-batch

解决方案


目前 AZ_BATCH_AUTHENTICATION_TOKEN 仅限于立即使用作业的权限。即使在自动池配置中,池最终也是一个单独的资源,因此无法使用令牌进行修改。

您可以采取两种主要方法。您可以将证书添加到您的帐户并将其添加到您的池中,从而允许您使用对您的帐户具有权限的 ServicePrincipal 进行身份验证,或者您可以将池设置为自动缩放,具体取决于不会立即调整大小的待处理任务的数量选项而不是根据需要以设定的时间间隔执行它们。


推荐阅读