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

適用対象:Python SDK azureml v1

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

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

データストアは、Azure 上のストレージ サービスに安全に接続し、認証資格情報や元のデータ ストアの整合性に対するリスクを回避できます。 データストアは、接続情報 (サブスクリプション ID やトークンの認可など) を、ワークスペースに関連付けられた Key Vault に格納します。 データストアを使うと、接続情報をスクリプト内にハードコーディングする必要がなくなるので、ストレージに安全にアクセスできます。 これらの Azure Storage ソリューションに接続するデータストアを作成できます。

データストアが Azure Machine Learning のデータ アクセス ワークフロー全体にいかに適合しているかについては、データへの安全なアクセスに関する記事を参照してください。

UI を使ってデータ ストレージ リソースに接続する方法については、スタジオ UI を使ったデータ ストレージへの接続に関する記事を参照してください。

ヒント

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

ID ベースのデータ アクセスについて詳しくは、ストレージ サービスへの ID ベースのデータ アクセス (v1) に関する記事を参照してください。

前提条件

  • 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 には、コンピューティング インスタンスを介して認可されたノートブックと R スクリプトが格納されます。

    Note

    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 ストレージに基づいて構築されています。 エンタープライズのビッグ データ分析用に設計されています。 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 が仮想ネットワークの外部からストレージ アカウントにアクセスできるようにします。

Note

仮想ネットワークの背後の 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 ストレージ ソリューションをデータストアとして登録すると、特定のワークスペースにそのデータストアが自動的に作成および登録されます。 仮想ネットワークのシナリオに関するガイダンスや、必要な認証資格情報を確認できる場所については、このドキュメントの「ストレージへのアクセスとアクセス許可」を参照してください。

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

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

UI を使ってデータ ストレージ リソースに接続する方法については、「Azure Machine Learning スタジオを使用してデータに接続する」を参照してください。

重要

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

Note

データストア名には、小文字、数字、アンダースコアのみが含まれている必要があります。

Azure BLOB コンテナー

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

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

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() メソッドを使います。

次のサンプル コードでは、ws ワークスペースに file_datastore_name データストアを作成して登録しています。 このデータストアでは、指定したアカウント アクセス キーで、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) を使用してサービス プリンシパルにデータ アクセス権を付与する必要があります。 詳しくは、ADLS Gen 2 のアクセス制御の設定に関する記事を参照してください。

次のコードでは、ws ワークスペースに adlsgen2_datastore_name データストアを作成して登録しています。 このデータストアは、指定したサービス プリンシパルの資格情報を使用して、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 を使用してデータにアクセスするカスタム コードを作成できる場合があります。 たとえば、Azure Storage SDK for Python クライアント ライブラリを使って、BLOB またはファイルに格納されたデータにアクセスできます。

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

Azure Machine Learning では、次のデータへのアクセスがサポートされています

  • Azure Blob Storage
  • Azure Files
  • Azure Data Lake Storage Gen1
  • Azure Data Lake Storage Gen2
  • Azure SQL データベース
  • Azure Database for PostgreSQL

サポートされていないストレージを使う場合は、Azure Data Factory とこれらの手順を使って、サポートされている Azure ストレージ ソリューションにデータを移動することをお勧めします。 サポートされているストレージにデータを移動すると、機械学習実験中のデータ エグレス コストを節約する助けとなります。

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

次のステップ