はじめに
備忘録です
リリースノートを見ていたらこんな記述が
https://docs.microsoft.com/en-us/azure/machine-learning/azure-machine-learning-release-notes
Added --grant-workspace-msi-access as an additional parameter for the Datastore CLI for registering Azure Blob Container which will allow you to register Blob Container that is behind a VNet.
Azure Blob Containerを登録するためのDatastore CLIの追加パラメータとして--grant-workspace-msi-accessを追加し、VNetの後ろにあるBlob Containerを登録できるようにしました。
→やってみよう
というわけで既定のストレージはFirewall入っていても通常通りの手順で使えるのですが、管理外のストレージがFirewallで守られている場合、アクセスする手段がないか検証してみました
前提
AzureMLでは管理下のストレージが一つ既定で作成されます。
ほかのストレージアカウント上のデータはDataStoreという形で登録します。
結果
登録はできるが、Computeからは現在利用する術がなさそう(2020/5時点)
おそらく既定のstorageにupするのが推奨なんでしょうね
やったこと
データストア登録
APIリファレンスを読みあさって、なんとかMSIをつかうっぽいプロパティ「grant_workspace_access」が見つかりました
しかし非推奨・・・
https://docs.microsoft.com/ja-jp/python/api/azureml-core/azureml.core.datastore(class)?view=azure-ml-py#register-azure-blob-container-workspace--datastore-name--container-name--account-name--sas-token-none--account-key-none--protocol-none--endpoint-none--overwrite-false--create-if-not-exists-false--skip-validation-false--blob-cache-timeout-none--grant-workspace-access-false--subscription-id-none--resource-group-none-
ほかにも必要そうな設定をいれてみました
https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-create-register-datasets#create-a-tabulardataset
ストレージが仮想ネットワークまたはファイアウォールの背後にある場合は、SDK を使用したデータセットの作成のみがサポートされます。 データセットを作成するには、from_delimited_files() メソッドにパラメーター validate=False および infer_column_types=False を必ず含めてください。 これにより、最初の検証チェックがバイパスされ、セキュリティで保護されたこれらのファイルからデータセットを作成できるようになります。
コード
一応通ります。wsとか、csvは事前に定義してください
import azureml.core
from azureml.core import Workspace, Datastore
blob_datastore = Datastore.register_azure_blob_container(
workspace=ws,
datastore_name="データストア名",
account_name="ストレージアカウント名", # Storage account name
container_name="コンテナ名", # Name of Azure blob container
grant_workspace_access=True,
subscription_id = ws.subscription_id,
resource_group = ws.resource_group,
skip_validation=True)
# パスからdatasetオブジェクト作成を試みる
datastore_paths = [(blob_datastore, 'data/temp/train_data.csv')]
train_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths,validate=False,infer_column_types=False)
train_ds = train_ds.register(workspace=ws,
name='train_ds',
description='train_ds')
ml Studioからも確認できます。
プロファイル見ようとするとエラーになりますが。。。
実験してみる
AutoMLを回してみるとdriverlogが不穏な感じでした。
なぜかDeviceLoginが走る
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code xxxx to authenticate.
Device Loginやってみると以下のようなエラー(Blobデータ共同作成者をaml,私のアカウント双方につけてもだめでした)
"error": {
"code": "System",
"message": "Failed to authorize with Azure Blob Container. Please make sure the compute or login identity has \"Storage Blob Data Reader or Storage Blob Data Owner\" role in the storage IAM.|session_id=xxxxx"
}
終わり
進展あったらメモしようかなと思います