Azure批处理池:如何通过Python使用自定义VM映像?
我想用Python创建我的Pool。我可以在市场上使用映像(Ubuntu Server 16.04)时做到这一点,但我想使用自定义映像(也包括Ubuntu Server 16.04) - 我已经准备好了所需的库和安装程序。Azure批处理池:如何通过Python使用自定义VM映像?
这是我如何创建我的池:
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
)
我成像,我需要使用batch.models.ImageReference()
创建我的形象参考...但我不知道如何使用它。
是的,我查了documentation,它说以下内容:
到Azure的虚拟机市场的图像或自定义 Azure的虚拟机映像的引用。
它列出的参数为:
- 发布者(STR)
- 报价(STR)
- SKU(STR)
- 版本(STR)
- virtual_machine_image_id(STR)
但是,t他参数virtual_machine_image_id
不存在...换句话说,batch.models.ImageReference(virtual_machine_image_id)
是不允许的。
如何为我的Pool使用自定义图像?
UPDATE
所以我想通了如何使用自定义图像......事实证明,无论多少次,我卸载蔚蓝的Python库,并重新安装它们,在virtual_machine_image_id
从不可用。
然后我去了here下载了zip。打开它,检查了ImageReference
类和低看,virtual_machine_image_id
可用于ImageReference
类的__init__
功能。然后我下载了python wheel并使用pip来安装它。繁荣它的工作。
或者我想。
然后,我试图找出node_agent_sku_id
是什么......只有通过手动创建一个池并看到Batch Node Agent SKU ID
字段我设法找到它。
现在我与认证挣扎......
我得到的错误是:
服务器无法验证请求。确保 授权标头的值正确地形成,包括签名。
AuthenticationErrorDetail:指定的认证类型 当Compute类型的外部资源链接到 时,不允许使用SharedKey。
azure.batch.models.batch_error.BatchErrorException:{'lang': 'en-US','value':'服务器未能认证请求。使 肯定是正确形成授权报头的值,包括所述 签名 \ nRequestId:f8c1a3b3-65c4-4efd-9c4f-75c5c253f992 \ n时间: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)
我该怎么办?
更新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
)
进行身份验证。不幸的是,上面的代码被描述为here,并且没有提及什么是CLIENT_ID
et。 al是。
我然后设法找到另一块文档这似乎是同样的事情:https://azure-sdk-for-python.readthedocs.io/en/v2.0.0rc3/resourcemanagementauthentication.html
那页指出我到另一个网页:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal
我跟着该教程和管理,以最终验证我的应用程序...
注意
当创建应用程序,本教程将告诉你:
提供应用程序的名称和URL。选择Web应用程序/ API或Native作为您要创建的应用程序的类型。在 设置值后,选择创建。
不要选择Native
,你将不必得到应用密钥的选项...
您需要安装Python的azure-batch SDK V4.0.0或更高版本。通常与pip install --upgrade azure-batch
,你应该只是得到最新版本。如果这不起作用,您可以将--force-reinstall
选项添加到点来强制它(与--upgrade
)。
关于node_agent_sku_id
的适当值,您需要使用list_node_agent_skus
操作来查看操作系统和支持的Node Agent Skus之间的映射。
关于认证问题,您必须使用Azure Active Directory authentication来使用此功能。它不适用于共享密钥身份验证。不幸的是,围绕此功能的文档不多,目前正在更新。
你可以发布一个完整的工作代码版本吗? – RedPanda
这是非常有帮助的 - 你是如何计算出你需要在图片名称前加入/预订/预订的? – RedPanda
我终于找到了Azure在odata.metadata下的HTTP记录器中返回的详细错误文本,其中他们指定了virtual_machine_image_id的正确格式。这让我意识到,您需要复制Azure门户上图像的“资源ID”字段,该字段可以在查看VM映像详细信息时看到。 – RedPanda