データストアを使用して Azure のストレージ サービスに接続する

適用対象:Python SDK azureml v1

適用対象:Azure CLI ml 拡張機能 v1

この記事では、Azure Machine Learning データストアと Azure Machine Learning Python SDK を使用して Azure のデータ ストレージ サービスに接続する方法について説明します。

データストアは、ユーザーの認証資格情報、および元のデータ ソースの整合性を危険にさらすことなく、Azure のストレージ サービスに安全に接続します。 これらには、ワークスペースに関連付けられているキー コンテナー内のサブスクリプション ID やトークン承認のような接続情報が格納されるため、それらをスクリプトにハードコーディングすることなく、ストレージに安全にアクセスできます。 これらの Azure Storage ソリューションに接続するデータストアを作成できます。

Azure Machine Learning のデータ アクセス ワークフロー全体におけるデータストアの位置付けの詳細については、データへの安全なアクセスに関するページを参照してください。

ローコード エクスペリエンスについては、Azure Machine Learning スタジオを使ってデータストアを作成して登録する方法に関する記事を参照してください。

ヒント

この記事では、サービス プリンシパルや Shared Access Signature (SAS) トークンなど、資格情報ベースの認証資格情報を使用してストレージ サービスに接続することを前提としています。 資格情報がデータストアに登録されている場合は、ワークスペースの "閲覧者" ロールを持つすべてのユーザーがこれらの資格情報を取得できることに注意してください。 ワークスペースの "閲覧者" ロールの詳細については、こちらをご覧ください。

これが懸念される場合は、ID ベースのアクセスを使用してストレージ サービスに接続する方法に関するページを参照してください。

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning をお試しください。

  • サポートされている種類のストレージを持つ Azure ストレージ アカウント。

  • Azure Machine Learning SDK for Python

  • Azure Machine Learning ワークスペース。

    Azure Machine Learning ワークスペースを作成するか、Python SDK を介して既存のワークスペースを使用します。

    Workspace および Datastore クラスをインポートし、関数 from_config() を使用してファイル config.json からサブスクリプション情報を読み込みます。 これにより、既定で現在のディレクトリ内の JSON ファイルが検索されますが、from_config(path="your/file/path") を使用してパス パラメーターを指定してファイルを指すこともできます。

    import azureml.core
    from azureml.core import Workspace, Datastore
    
    ws = Workspace.from_config()
    

    ワークスペースを作成すると、ワークスペースに Azure BLOB コンテナーと Azure ファイル共有がデータストアとして自動的に登録されます。 これらの名前は、それぞれ workspaceblobstore および workspacefilestore となります。 workspaceblobstore は、ワークスペースの成果物と機械学習実験ログを格納するために使用されます。 また、これは既定のデータストアとして設定され、ワークスペースから削除することはできません。 workspacefilestore は、workspacefilestoreによって承認されたノートブックと R スクリプトを格納するために使用されます。

    注意

    Azure Machine Learning デザイナーでは、デザイナーのホームページでサンプルを開いたときに、azureml_globaldatasets という名前のデータストアが自動的に作成されます。 このデータストアには、サンプル データセットのみが含まれます。 機密データへのアクセスには、このデータストアを使用しないでください

サポートされているデータ ストレージ サービスの種類

現在、データストアは、次のマトリックスに示すストレージ サービスに対する接続情報の格納をサポートしています。

ヒント

サポートされていないストレージ ソリューション (以下の表に記載されていないソリューション) の場合、データの接続と操作で問題が発生する可能性があります。 サポートされている Azure ストレージ ソリューションにデータを移動することをお勧めします。 これを行うと、ML 実験中のデータ エグレス コストの節約など、追加のシナリオにも役立つ場合があります。

ストレージの種類 認証の種類 Azure Machine Learning Studio Azure Machine Learning Python SDK Azure Machine Learning CLI Azure Machine Learning REST API VS Code
Azure Blob Storage アカウント キー
SAS トークン
Azure ファイル共有 アカウント キー
SAS トークン
Azure Data Lake Storage Gen 1 サービス プリンシパル
Azure Data Lake Storage Gen 2 サービス プリンシパル
Azure SQL Database SQL 認証
サービス プリンシパル
Azure PostgreSQL SQL 認証
Azure Database for MySQL SQL 認証 ✓* ✓* ✓*
Databricks ファイル システム 認証なし ✓** ✓ ** ✓**
  • MySQL は、パイプラインの DataTransferStep でのみサポートされています。
  • Databricks は、パイプラインの DatabricksStep でのみサポートされています。

ストレージのガイダンス

Azure BLOB コンテナーのデータストアを作成することをお勧めします。 BLOB では Standard ストレージと Premium ストレージの両方を使用できます。 Premium ストレージはより高価ですが、スループットの速度が上がるため、特に大規模なデータセットに対するトレーニングでは、トレーニングの実行速度が向上する可能性があります。 ストレージ アカウントの費用については、Azure 料金計算ツールに関するページを参照してください。

Azure Data Lake Storage Gen2 は、Azure Blob Storage を基にして構築され、エンタープライズ ビッグ データ分析用に設計されています。 Data Lake Storage Gen2 の基礎部分は、BLOB ストレージに階層型名前空間を追加したものです。 階層型名前空間には、効率的なデータ アクセスのためにオブジェクトやファイルがディレクトリ階層に編成されています。

ストレージへのアクセスとアクセス許可

Azure ストレージ サービスに安全に接続できるように、Azure Machine Learning では、対応するデータ ストレージ コンテナーにアクセスするためのアクセス許可が必要です。 このアクセスは、データストアの登録に使用される認証資格情報に依存します。

注意

このガイダンスは、ID ベースのデータ アクセスを使用して作成されたデータストアにも適用されます。

仮想ネットワーク

Azure Machine Learning では、ファイアウォールの背後または仮想ネットワークの内部にあるストレージ アカウントと通信するには追加の構成手順が必要です。 ストレージ アカウントがファイアウォールの背後にある場合は、Azure portal 経由で、クライアントの IP アドレスを許可リストに追加できます。

Azure Machine Learning では、仮想ネットワークの外側にあるクライアントからの要求を受信できます。 サービスからデータを要求するエンティティの安全性を確保し、ワークスペースに表示されるデータを有効にするには、ワークスペースでプライベート エンドポイントを使用します。

Python SDK ユーザーの場合、コンピューティング ターゲットでトレーニング スクリプトを使用してデータにアクセスするには、コンピューティング ターゲットをストレージと同じ仮想ネットワークとサブネット内に配置する必要があります。 同じ仮想ネットワークでコンピューティング インスタンスまたはクラスターを使用できます。

Azure Machine Learning スタジオ ユーザーの場合、データセットのプレビュー、プロファイル、自動機械学習など、いくつかの機能を使用するには、データセットからデータを読み取ることができることが必要です。 これらの機能で仮想ネットワークの内側にあるストレージを操作するには、スタジオでワークスペースのマネージド ID を使用して、Azure Machine Learning が仮想ネットワークの外部からストレージ アカウントにアクセスできるようにします。

注意

データ ストレージが仮想ネットワークの背後にある Azure SQL Database である場合は、Azure Machine Learning からストレージ アカウントにアクセスできるように、Azure portal 経由で [パブリック アクセスの拒否] を必ず [いいえ] に設定してください。

アクセス検証

警告

ストレージ アカウントへのクロス テナント アクセスはサポートされていません。 シナリオでクロス テナント アクセスが必要な場合、Azure Machine Learning データ サポート チームにメール amldatasupport@microsoft.com で連絡し、カスタム コード解決を要請してください。

最初のデータストアの作成と登録のプロセスの一部として、Azure Machine Learning により、基になるストレージ サービスが存在すること、およびユーザーが指定したプリンシパル (ユーザー名、サービス プリンシパル、または SAS トークン) で指定したストレージにアクセスできることが自動的に検証されます。

データストアの作成後、この検証は、データストア オブジェクトが取得されるたびではなく、基になるストレージ コンテナーにアクセスする必要があるメソッドに対してのみ実行されます。 たとえば、データストアからファイルをダウンロードする場合は検証が行われますが、既定のデータストアを変更するだけの場合、検証は行われません。

基になるストレージ サービスへのアクセスを認証するには、作成するデータストアの種類に対応する register_azure_*() メソッドで、アカウント キー、Shared Access Signature (SAS) トークン、またはサービス プリンシパルを指定します。 ストレージの種類のマトリックスには、各データストアの種類に対応する、サポートされている認証の種類が一覧表示されています。

アカウント キー、SAS トークン、およびサービス プリンシパルの情報は、Azure portal で確認できます。

  • 認証にアカウント キーまたは SAS トークンを使用する予定の場合は、左側のウィンドウで [ストレージ アカウント] を選択し、登録するストレージ アカウントを選択します。

    • [概要] ページには、アカウント名、コンテナー、ファイル共有名などの情報が表示されます。
      • アカウント キーの場合、 [設定] ペインの [アクセス キー] に移動します。
      • SAS トークンの場合は、 [設定] ペインの [共有アクセス署名] に移動します。
  • 認証にサービス プリンシパルを使用する予定の場合は、 [アプリの登録] に移動して、使用するアプリを選択します。

    • 対応する [概要] ページに、テナント ID やクライアント ID などの必要な情報が記載されています。

重要

Azure Storage アカウントのアクセス キー (アカウント キーまたは SAS トークン) を変更する必要がある場合は、新しい資格情報をワークスペースおよびそれに接続されているデータストアと同期してください。 更新された資格情報を同期する方法を参照してください。

アクセス許可

Azure BLOB コンテナーと Azure Data Lake Gen 2 ストレージの場合は、認証資格情報にストレージ BLOB データ閲覧者アクセスがあることを確認します。 ストレージ BLOB データ閲覧者の詳細については、こちらを参照してください。 アカウントの SAS トークンは、既定ではアクセス許可なしに設定されます。

  • データ読み取りアクセスの場合、認証資格情報には、コンテナーとオブジェクトに対するリストと読み取りのアクセス許可が少なくとも必要となります。

  • データ書き込みアクセスの場合は、書き込みと追加のアクセス許可も必要です。

データストアの作成と登録

Azure Storage ソリューションをデータストアとして登録すると、特定のワークスペースにそのデータストアが自動的に作成および登録されます。 仮想ネットワークのシナリオに関するガイダンスや、必要な認証資格情報を検索する場所については、「ストレージへのアクセスとアクセス許可」のセクションを参照してください。

このセクションでは、次のストレージの種類に対して Python SDK を使用してデータストアを作成して登録する方法の例を示します。 これらの例で提供されるパラメーターは、データストアを作成および登録するための必須パラメーターです。

サポートされている他のストレージ サービスのデータストアを作成するには、該当する メソッドに関するリファレンス ドキュメントを参照してください。

コードの少ないエクスペリエンスの方がよい場合は、Azure Machine Learning Studio でのデータへの接続に関する記事を参照してください。

重要

データストアの登録を解除し、同じ名前を使用して再登録しようとして失敗した場合は、ワークスペースの Azure キー コンテナーで、論理的な削除が有効になっていない可能性があります。 既定では、ワークスペースによって作成されたキー コンテナー インスタンスでは論理的な削除が有効になっていますが、既存のキー コンテナーを使用した場合、または 2020 年 10 月より前にワークスペースを作成した場合は、論理的な削除が有効になっていないことがあります。 論理的な削除を有効にする方法の詳細については、既存のキー コンテナーの論理的な削除を有効にするに関するセクションを参照してください。

注意

データストア名は、小文字、数字、およびアンダースコアのみで構成する必要があります。

Azure BLOB コンテナー

Azure BLOB コンテナーをデータストアとして登録するには、register_azure_blob_container() を使用します。

次のコードでは、データストア blob_datastore_name を作成し、ワークスペース ws に登録しています。 このデータストアを使うと、指定したアカウント アクセス キーを使用して、my-account-name ストレージ アカウントの BLOB コンテナー my-container-name にアクセスできます。 仮想ネットワークのシナリオに関するガイダンスや、必要な認証資格情報を検索する場所については、「ストレージへのアクセスとアクセス許可」のセクションを参照してください。

blob_datastore_name='azblobsdk' # Name of the datastore to workspace
container_name=os.getenv("BLOB_CONTAINER", "<my-container-name>") # Name of Azure blob container
account_name=os.getenv("BLOB_ACCOUNTNAME", "<my-account-name>") # Storage account name
account_key=os.getenv("BLOB_ACCOUNT_KEY", "<my-account-key>") # Storage account access key

blob_datastore = Datastore.register_azure_blob_container(workspace=ws, 
                                                         datastore_name=blob_datastore_name, 
                                                         container_name=container_name, 
                                                         account_name=account_name,
                                                         account_key=account_key)

Azure ファイル共有

Azure ファイル共有をデータストアとして登録するには、register_azure_file_share() を使用します。

次のコードでは、データストア file_datastore_name を作成し、ワークスペース ws に登録しています。 このデータストアを使うと、指定したアカウント アクセス キーを使用して、my-account-name ストレージ アカウントのファイル共有 my-fileshare-name にアクセスできます。 仮想ネットワークのシナリオに関するガイダンスや、必要な認証資格情報を検索する場所については、「ストレージへのアクセスとアクセス許可」のセクションを参照してください。

file_datastore_name='azfilesharesdk' # Name of the datastore to workspace
file_share_name=os.getenv("FILE_SHARE_CONTAINER", "<my-fileshare-name>") # Name of Azure file share container
account_name=os.getenv("FILE_SHARE_ACCOUNTNAME", "<my-account-name>") # Storage account name
account_key=os.getenv("FILE_SHARE_ACCOUNT_KEY", "<my-account-key>") # Storage account access key

file_datastore = Datastore.register_azure_file_share(workspace=ws,
                                                     datastore_name=file_datastore_name, 
                                                     file_share_name=file_share_name, 
                                                     account_name=account_name,
                                                     account_key=account_key)

Azure Data Lake Storage Generation 2

Azure Data Lake Storage Generation 2 (ADLS Gen 2) データストアの場合、register_azure_data_lake_gen2 () を使用して、サービス プリンシパルのアクセス許可を持つ Azure Data Lake Gen 2 ストレージに接続されている資格情報データストアを登録します。

サービス プリンシパルを利用するには、アプリケーションを登録し、Azure ロールベースのアクセス制御 (Azure RBAC) またはアクセス制御リスト (ACL) を使用してデータ アクセスをサービス プリンシパルに付与する必要があります。 詳細については、「Azure Data Lake Storage Gen2 のアクセス制御」をご覧ください。

次のコードでは、データストア adlsgen2_datastore_name を作成し、ワークスペース ws に登録しています。 このデータストアは、指定されたサービス プリンシパルの資格情報を使用して、account_name ストレージ アカウントのファイル システム test にアクセスします。 仮想ネットワークのシナリオに関するガイダンスや、必要な認証資格情報を検索する場所については、「ストレージへのアクセスとアクセス許可」のセクションを参照してください。

adlsgen2_datastore_name = 'adlsgen2datastore'

subscription_id=os.getenv("ADL_SUBSCRIPTION", "<my_subscription_id>") # subscription id of ADLS account
resource_group=os.getenv("ADL_RESOURCE_GROUP", "<my_resource_group>") # resource group of ADLS account

account_name=os.getenv("ADLSGEN2_ACCOUNTNAME", "<my_account_name>") # ADLS Gen2 account name
tenant_id=os.getenv("ADLSGEN2_TENANT", "<my_tenant_id>") # tenant id of service principal
client_id=os.getenv("ADLSGEN2_CLIENTID", "<my_client_id>") # client id of service principal
client_secret=os.getenv("ADLSGEN2_CLIENT_SECRET", "<my_client_secret>") # the secret of service principal

adlsgen2_datastore = Datastore.register_azure_data_lake_gen2(workspace=ws,
                                                             datastore_name=adlsgen2_datastore_name,
                                                             account_name=account_name, # ADLS Gen2 account name
                                                             filesystem='test', # ADLS Gen2 filesystem
                                                             tenant_id=tenant_id, # tenant id of service principal
                                                             client_id=client_id, # client id of service principal
                                                             client_secret=client_secret) # the secret of service principal

他の Azure ツールを使用してデータストアを作成する

Python SDK とスタジオを使用してデータストアを作成することに加えて、Azure Resource Manager テンプレートや Azure Machine Learning VS Code 拡張機能を使用することもできます。

Azure Resource Manager

https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices には、データストアの作成に使用できる複数のテンプレートがあります。

これらのテンプレートの使用に関する詳細については、「Azure Resource Manager テンプレートを使用して Azure Machine Learning のワークスペースを作成します」を参照してください。

VS Code 拡張機能

Azure Machine Learning VS Code 拡張機能を使用してデータストアを作成して管理する場合、詳細については、VS Code リソース管理の攻略ガイドに関するページを参照してください。

データストアでデータを使用する

データストアを作成したら、データを操作するための Azure Machine Learning データセットを作成します。 データセットを使用すると、データを機械学習タスク (トレーニングなど) 用に遅延評価された使用可能なオブジェクトにパッケージ化できます。

データセットを使用すると、コンピューティング ターゲットでモデルのトレーニングを行うために、Azure Storage サービスから任意の形式のファイルをダウンロードまたはマウントできます。 データセットを使って ML モデルをトレーニングする方法の詳細をご覧ください

ワークスペースからデータストアを取得する

現在のワークスペースに登録されている特定のデータストアを取得するには、Datastore クラスの静的メソッド get() を使用します。

# Get a named datastore from the current workspace
datastore = Datastore.get(ws, datastore_name='your datastore name')

特定のワークスペースに登録されているデータストアの一覧を取得するには、ワークスペース オブジェクトに対して datastores プロパティを使用します。

# List all datastores registered in the current workspace
datastores = ws.datastores
for name, datastore in datastores.items():
    print(name, datastore.datastore_type)

ワークスペースの既定のデータストアを取得するには、次の行を使用します。

datastore = ws.get_default_datastore()

次のコードを使用して、既定のデータストアを変更することもできます。 この機能は、SDK でのみサポートされています。

 ws.set_default_datastore(new_default_datastore)

スコアリング中にデータにアクセスする

Azure Machine Learning には、スコアリングにモデルを使用する方法が複数用意されています。 これらの方法の一部では、データストアへのアクセスが提供されていません。 次の表を使用して、スコアリング中にデータストアへのアクセスが許可されるのはどの方法かを理解します。

Method データストア アクセス 説明
バッチ予測 大量のデータの予測を非同期的に行います。
Web サービス   モデルを Web サービスとしてデプロイします。

SDK でデータストアへのアクセスが提供されない場合は、関連する Azure SDK を使用してデータにアクセスするカスタム コードを作成できる場合があります。 たとえば、BLOB またはファイルに格納されたデータには、Azure Storage SDK for Python というクライアント ライブラリを使用してアクセスすることができます。

サポートされている Azure Storage ソリューションにデータを移動する

Azure Machine Learning では、Azure Blob Storage、Azure Files、Azure Data Lake Storage Gen1、Azure Data Lake Storage Gen2、Azure SQL Database、および Azure Database for PostgreSQL からのデータ アクセスがサポートされています。 サポートされていないストレージを使用する場合は、Azure Data Factory およびこれらの手順を使用して、サポートされている Azure Storage ソリューションにデータを移動することをお勧めします。 サポートされているストレージにデータを移動すると、機械学習実験中のデータ エグレス コストを節約する助けとなります。

Azure Data Factory では、80 を超える構築済みのコネクタによって、追加コストなしで効率的かつ回復性があるデータ転送が提供されます。 これには、Azure のデータ サービス、オンプレミスのデータ ソース、Amazon S3 および Redshift、Google BigQuery などのコネクタが含まれます。

次のステップ