如何授予作业管理器任务权限以调整池的大小?

How to give a job manager task permissions to resize the pool?

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

现在,一旦我知道并行任务的数量,我想立即调整我正在 运行 的池的大小(我 运行 正在 运行 中 auto-pool).这是我尝试这样做的方法。

当我创建 JobManagerTask 我提供

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

在 运行 时间任务收到 AZ_BATCH_AUTHENTICATION_TOKEN in environment, uses it to create BatchServiceClient, uses the client to add worker tasks to the job and ultimately calls 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.

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

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

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