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虚拟机映像的引用。
它列出的参数为:
但是,该参数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因为您将没有获得应用程序密钥的选项。
所需的最低 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 身份验证才能使用此功能。它不适用于共享密钥身份验证。
文档
可以在本指南中找到更多信息,包括启用自定义图像所需的所有先决条件。