0

Azure python sdk を使用して VM から作成したカスタム イメージを使用してプールを作成しようとしています。場所とリソース グループが一致します。

これが私のコードです:

import azure.batch as batch
from azure.batch import BatchServiceClient
from azure.batch.batch_auth import SharedKeyCredentials
from azure.batch import models



account = 'mybatch'
key = 'Adgfdj1hhsdfqATc/K2fgxdfg/asYgKRP2pUdfglBce7mgmSBdfgdhC7f3Zdfgrcgkdgh/dfglA=='
batch_url = 'https://mybatch.westeurope.batch.azure.com'

creds = SharedKeyCredentials(account, key)
batch_client = BatchServiceClient(creds, base_url = batch_url)

pool_id_base = 'mypool'
idx = 1

pool_id = pool_id_base + str( idx )

while batch_client.pool.exists( pool_id ):
  idx += 1
  pool_id = pool_id_base + str( idx )

print( 'pool_id ' + pool_id )

sku_to_use =  'batch.node.ubuntu 18.04'

# 
# image_ref_to_use = models.ImageReference(
#     offer = 'UbuntuServer', 
#     publisher = 'Canonical',
#     sku = '18.04-LTS', 
#     version = 'latest'
#   )



image_ref_to_use = models.ImageReference(
    virtual_machine_image_id = '/subscriptions/1834572sd-34sd409a-sdfb-sc345csdfesourceGroups/resource-group-1/providers/Microsoft.Compute/images/my-image-1'
  )


vm_size = 'Standard_D3_v2' 

vmc = models.VirtualMachineConfiguration(
  image_reference = image_ref_to_use,
  node_agent_sku_id = sku_to_use
)

new_pool = models.PoolAddParameter(
  id = pool_id, 
  vm_size = vm_size, 
  virtual_machine_configuration = vmc,
  target_dedicated_nodes = 1
)

batch_client.pool.add(new_pool)

ドキュメントによると、 virtual_machine_image_id のいずれかを使用して、他のマーケットプレイス イメージ パラメータを提供できるはずです。標準のマーケットプレイス イメージのプールを作成できますが、カスタム イメージの ID を使用しようとするとエラーが発生します。

Traceback (most recent call last):   File "create_pool.py", line 60, in <module>
    batch_client.pool.add(new_pool)   File "/root/miniconda/lib/python3.6/site-packages/azure/batch/operations/pool_operations.py", line 312, in add
    raise models.BatchErrorException(self._deserialize, response) azure.batch.models.batch_error.BatchErrorException: {'additional_properties': {}, 'lang': 'en-US', 'value': 'Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nRequestId:0dfdf9c1-edad-4b72-8e8f-f8dbcfd0abbdf\nTime:2018-12-06T10:51:21.9417222Z'}

この問題を解決するにはどうすればよいですか?


アップデート

ServicePrincipalCredentials を次のように使用しようとしました。

CLIENT_ID : Defaut Directory -> Add registration で新しいアプリケーションを作成し、そのアプリケーション ID を取得しました。

SECRET : 新しいアプリケーションのキーを作成し、その値を使用しました。

TENANT_ID :az account showクラウド シェル内。

RESOURCE : ' https://batch.core.windows.net/ ' を使用。

私のコードを次のように更新しました:

from azure.common.credentials import ServicePrincipalCredentials

creds = ServicePrincipalCredentials(
  client_id=CLIENT_ID,
  secret=SECRET,
  tenant=TENANT_ID,
  resource=RESOURCE
)

そして、別のエラーが発生します:

Keyring cache token has failed: No recommended backend was available. Install the keyrings.alt package if you want to use the non-recommended backends. See README.rst for details.
Traceback (most recent call last):
  File "create_pool.py", line 41, in <module>
    while batch_client.pool.exists( pool_id ):
  File "/root/miniconda/lib/python3.6/site-packages/azure/batch/operations/pool_operations.py", line 624, in exists
    raise models.BatchErrorException(self._deserialize, response)
azure.batch.models.batch_error.BatchErrorException: Operation returned an invalid status code 'Server failed to authorize the request.'
4

1 に答える 1

2

共有キー資格情報の代わりにサービス プリンシパル資格情報を使用してみてください

credentials = ServicePrincipalCredentials(
    client_id=CLIENT_ID,
    secret=SECRET,
    tenant=TENANT_ID,
    resource=RESOURCE
)

Shared Key Credentials にエラーがあるようです。

ドキュメント リンク: https://docs.microsoft.com/en-us/azure/batch/batch-aad-auth

問題のリンク: https://github.com/Azure/azure-sdk-for-python/issues/1668

: 誰でもアクセスできるので、アカウントの詳細を削除してください。アカウント名とキーを **** に置き換えます。

更新 サービス プリンシパル資格情報が機能しない場合は、ユーザー資格情報を使用してみて、それが機能するかどうかを確認してください。

from azure.common.credentials import UserPassCredentials
import azure.batch.batch_service_client as batch

credentials = UserPassCredentials(
    azure_user,
    azure_pass
)
batch_client = batch.BatchServiceClient(credentials, base_url = batch_url)
于 2018-12-06T15:18:29.007 に答える