azure-batch - 如何授予作业管理器任务权限以调整池的大小?
问题描述
我正在运行令人尴尬的并行工作负载,但事先不知道并行任务的数量。相反,我的作业管理器任务执行简单的计算以确定并行任务的数量,然后将任务添加到作业中。
现在,一旦我知道并行任务的数量,我想立即相应地调整我正在运行的池的大小(我正在自动池中运行作业)。这是我尝试这样做的方法。
当我创建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.
如何授予任务调整池大小的权限?
解决方案
目前 AZ_BATCH_AUTHENTICATION_TOKEN 仅限于立即使用作业的权限。即使在自动池配置中,池最终也是一个单独的资源,因此无法使用令牌进行修改。
您可以采取两种主要方法。您可以将证书添加到您的帐户并将其添加到您的池中,从而允许您使用对您的帐户具有权限的 ServicePrincipal 进行身份验证,或者您可以将池设置为自动缩放,具体取决于不会立即调整大小的待处理任务的数量选项而不是根据需要以设定的时间间隔执行它们。
推荐阅读
- java - Java lamba 参数类型未正确推断
- excel - 在 Excel 2007 中增加文本字符串中的最后一个数字
- python - 从 django-python 访问 Google 驱动器
- java - A* 路径查找在某些情况下会永远运行
- c - printf 显示“-858993460”或“╠╠╠╠╠╠╠╠”;这些是什么?
- javascript - 未捕获的错误:[$injector:modulerr] 将 Angular JS 与行星 9 一起使用时
- installation - 为什么我在安装过程中无法选择 Typo3 的数据库?
- google-chrome - 如何在 Chrome 无头中保存完整的 webapge
- ajax - Django 在服务器上的 ajax 之后重定向
- python - 检查一个点是否在 ConvexHull 中?