Azure批处理池:如何通过Python使用自定义VM映像?

poo*_*kie 6 python azure azure-batch

我想使用Python创建我的Pool。当使用市场上的映像(Ubuntu Server 16.04)时,我可以执行此操作,但是我想使用自定义映像(但也要使用Ubuntu Server 16.04)-我已经准备了所需的库和设置。

这就是我创建池的方式:

new_pool = batch.models.PoolAddParameter(
      id=pool_id,
      virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
          image_reference=image_ref_to_use, # ??
          node_agent_sku_id=sku_to_use),
      vm_size=_POOL_VM_SIZE,
      target_dedicated_nodes=_POOL_NODE_COUNT,
      start_task=start_task,
      max_tasks_per_node=_CORES_PER_NODE
)
Run Code Online (Sandbox Code Playgroud)

我在成像时需要使用它batch.models.ImageReference()来创建我的图像参考...但是我不知道如何使用它。

是的,我检查了文档,其中显示以下内容:

对Azure虚拟机市场映像或自定义Azure虚拟机映像的引用。

它列出的参数为:

  • 发布者(str)
  • 提供(str)
  • sku(str)
  • 版本(str)
  • virtual_machine_image_id(str)

但是,该参数virtual_machine_image_id不存在...换句话说,这batch.models.ImageReference(virtual_machine_image_id)是不允许的。

如何为我的游泳池使用自定义图像?

更新

因此,我弄清楚了如何使用自定义映像...事实证明,无论我卸载Azure python库并重新安装多少次,该库virtual_machine_image_id都无法使用。

然后我去这里下载了zip文件。打开它,检查ImageReference类并查看,该类virtual_machine_image_id__init__功能可用ImageReference。然后,我下载了python wheel并使用pip进行安装。繁荣它的工作。

还是我想。

然后,我不得不尽力而为,试图找出答案是什么node_agent_sku_id……仅通过手动创建一个Pool并查看该Batch Node Agent SKU ID字段即可找到它。

现在我正在努力进行身份验证...

我得到的错误是:

服务器无法验证请求。确保包括签名在内的Authorization标头的值正确形成。

AuthenticationErrorDetail:当链接类型为Compute的外部资源时,不允许使用指定的身份验证SharedKey类型。

azure.batch.models.batch_error.BatchErrorException:{'lang':'en-US','value':'服务器无法验证请求。请确保正确构成授权标头的值,包括签名。\ nRequestId:f8c1a3b3-65c4-4efd-9c4f-75c5c253f992 \ nTime:2017-10-15T20:36:06.7898187Z'}

从错误中得知,我不允许使用SharedKeyCredentials

credentials = batchauth.SharedKeyCredentials(_BATCH_ACCOUNT_NAME,
                                             _BATCH_ACCOUNT_KEY)

batch_client = batch.BatchServiceClient(
    credentials,
    base_url=_BATCH_ACCOUNT_URL)
Run Code Online (Sandbox Code Playgroud)

我必须做什么?

更新2

好。使用者fpark已通知我,我需要使用:

from azure.batch import BatchServiceClient
from azure.common.credentials import ServicePrincipalCredentials

credentials = ServicePrincipalCredentials(
    client_id=CLIENT_ID,
    secret=SECRET,
    tenant=TENANT_ID,
    resource="https://batch.core.windows.net/"
)
    batch_client = BatchServiceClient(
    credentials,
    base_url=BATCH_ACCOUNT_URL
)
Run Code Online (Sandbox Code Playgroud)

进行身份验证。不幸的是,上面的代码在这里进行了描述并且没有引用什么内容CLIENT_ID。都是。

然后,我设法找到了似乎相同的另一篇文档:https : //azure-sdk-for-python.readthedocs.io/en/v2.0.0rc3/resourcemanagementauthentication.html

该页面将我指向另一个网页:https : //docs.microsoft.com/zh-cn/azure/azure-resource-manager/resource-group-create-service-principal-portal

我遵循了该教程,并设法最终对我的应用程序进行了身份验证...

注意

创建应用程序时,本教程将告诉您:

提供应用程序的名称和URL。选择Web应用程序/ API或本机作为要创建的应用程序类型。设置值后,选择创建。

不要选择,Native因为您将没有获得应用程序密钥的选项。

fpa*_*ark 2

所需的最低 Azure Batch SDK

需要 azure-batch Python SDK v4.0.0 或更高版本通常情况下,pip install --upgrade azure-batch您应该只获取最新版本。如果这不起作用,您可以--force-reinstall向 pip 添加选项以强制执行(使用--upgrade)。

节点代理 Sku Id

关于 的正确值node_agent_sku_id,您需要使用list_node_agent_skus操作来查看操作系统和支持的 Node Agent sku 之间的映射。

需要 Azure Active Directory 身份验证

关于身份验证问题,您必须使用Azure Active Directory 身份验证才能使用此功能。它不适用于共享密钥身份验证。

文档

可以在本指南中找到更多信息,包括启用自定义图像所需的所有先决条件。