我想用Python创建我的游泳池。我可以在市场上使用图像(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
)
我想要使用batch.models.ImageReference()
来创建我的图像参考,但我不知道如何使用它。
是的,我查看了documentation,其中说明了以下内容:
对Azure虚拟机市场映像或自定义的引用 Azure虚拟机映像。
它将参数列为:
但是,参数virtual_machine_image_id
不存在...换句话说,batch.models.ImageReference(virtual_machine_image_id)
是不允许的。
如何为我的游泳池使用自定义图像?
更新
所以我想出了如何使用自定义图像...事实证明,无论我卸载azure python库多少次并重新安装它们,virtual_machine_image_id
都永远不可用。
然后我去here下载了拉链。打开它,查看了ImageReference
类,并且virtual_machine_image_id
类的__init__
函数中提供了ImageReference
。然后我下载了python wheel并使用pip来安装它。它起作用了。
或者我想。
然后我不得不打架,虽然试图找出node_agent_sku_id
是什么......只能通过手动创建一个游泳池并看到Batch Node Agent SKU ID
字段,我设法找到它。
现在我正在努力进行身份验证...
我得到的错误是:
服务器无法验证请求。确保价值 正确形成授权标头,包括签名。
AuthenticationErrorDetail:指定的身份验证类型 当Compute类型的外部资源是时,不允许使用SharedKey 链接。
azure.batch.models.batch_error.BatchErrorException:{' lang': ' en-US','值':'服务器无法验证请求。使 确保正确形成Authorization标头的值,包括 该 。签名\ 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
等。 al are。
然后我设法找到另一篇看似同样的文档: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,用于您要创建的应用程序类型。后 设置值,选择Create。
请勿选择Native
,因为您无法获取应用密钥...
答案 0 :(得分:2)
所需的最低Azure批处理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
操作来查看操作系统与支持的节点代理skus之间的映射。
需要Azure Active Directory身份验证
关于身份验证问题,您必须使用Azure Active Directory authentication才能使用此功能。它不适用于共享密钥验证。
<强>文档强>
可以在this guide中找到更多信息,包括启用自定义图片所需的所有先决条件。
答案 1 :(得分:0)
我正在使用azure-batch == 9.0.0,事实证明docs并未按照软件包本身进行更新。使用id
代替virtual_machine_image_id
可以解决我的问题。