Azure Data Factory、DevOps、機械学習を使ってデータ パイプラインを構築する

Azure DevOps Services

データ インジェスト、データ変換、モデル トレーニングを使用したデータ パイプラインの構築を開始します。

CSV (コンマ区切り値) ファイルからデータを取得し、データを Azure Blob Storage に保存する方法について説明します。 データを変換し、ステージング領域に保存します。 次に、変換されたデータを使って機械学習モデルをトレーニングします。 モデルを Python pickle ファイルとして BLOB ストレージに書き込みます。

前提条件

開始する前に、次のことが必要です。

Azure リソースをプロビジョニングする

  1. Azure portal にサインインします。

  2. メニューから、[Cloud Shell] ボタンを選びます。 プロンプトが表示されたら、[Bash] エクスペリエンスを選択します。

    Screenshot showing where to select Cloud Shell from the menu.

    Note

    Azure Cloud Shell で作成するすべてのファイルを保持するには Azure Storage リソースが必要です。 ユーザーが Cloud Shell を初めて開くとき、リソース グループ、ストレージ アカウント、Azure Files 共有の作成を求められます。 この設定は、以降のすべての Cloud Shell セッションで自動的に使用されます。

Azure リージョンを選択する

"リージョン" は、1 つの地理的な場所内にある 1 つ以上の Azure データセンターです。 米国東部、米国西部、北ヨーロッパなどがリージョンの例です。 App Service インスタンスなどのすべての Azure リソースには、リージョンが割り当てられています。

コマンドをより簡単に実行するには、まず、既定のリージョンを選択します。 既定のリージョンを指定すると、別のリージョンを指定しない限り、そのリージョンが以降のコマンドで使用されます。

  1. Cloud Shell で次の az account list-locations コマンドを実行して、お使いの Azure サブスクリプションで使用可能なリージョンの一覧を表示します。

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. 出力の Name 列から、最寄りのリージョンを選択します。 たとえば、asiapacific または westus2 を選択します。

  3. az config を実行して、自分の既定のリージョンを設定します。 次の例では、<REGION> を、選んだリージョンの名前に置き換えます。

    az config set defaults.location=<REGION>
    

    次の例では、westus2 が既定のリージョンとして設定されています。

    az config set defaults.location=westus2
    

Bash 変数の作成

  1. Cloud Shell で、ランダムな数値を生成します。 この数値を使って、次の手順で特定のサービスのグローバルに一意の名前を作成します。

    resourceSuffix=$RANDOM
    
  2. ストレージ アカウントとキー コンテナーのグローバルに一意の名前を作成します。 次のコマンドでは二重引用符を使用します。これは、インライン構文を使って変数を補間するよう Bash に指示します。

    storageName="datacicd${resourceSuffix}"
    keyVault="keyvault${resourceSuffix}"
    
  3. リソース グループの名前とリージョンを格納する Bash 変数をもう 1 つ作成します。 次の例では、<REGION> を、既定のリージョンに対して選んだリージョンに置き換えます。

    rgName='data-pipeline-cicd-rg'
    region='<REGION>'
    
  4. Azure Data Factory インスタンスと Azure Databricks インスタンスの変数名を作成します。

    datafactorydev='data-factory-cicd-dev'
    datafactorytest='data-factory-cicd-test'
    databricksname='databricks-cicd-ws'
    

Azure リソースを作成する

  1. 次の az group create コマンドを実行し、rgName を使ってリソース グループを作成します。

    az group create --name $rgName
    
  2. 次の az storage account create コマンドを実行し、新しいストレージ アカウントを作成します。

    az storage account create \
        --name $storageName \
        --resource-group $rgName \
        --sku Standard_RAGRS \
        --kind StorageV2
    
  3. 次の az storage container create コマンドを実行して、rawdataprepareddata の 2 つのコンテナーを作成します。

    az storage container create -n rawdata --account-name $storageName 
    az storage container create -n prepareddata --account-name $storageName 
    
  4. 次の az keyvault create コマンドを実行して、新しいキー コンテナーを作成します。

    az keyvault create \
        --name $keyVault \
        --resource-group $rgName
    
  5. ポータル UI または Azure CLI を使って新しいデータ ファクトリを作成します。

    • 名前: data-factory-cicd-dev
    • バージョン: V2
    • リソース グループ: data-pipeline-cicd-rg
    • 場所: 最も近い場所
    • [Git を有効にする] の選択を解除します。
    1. [Azure Data Factory 拡張] を追加します。

      az extension add --name datafactory
      
    2. 次の az datafactory create コマンドを実行して、新しいデータ ファクトリを作成します。

       az datafactory create \
           --name data-factory-cicd-dev \
           --resource-group $rgName
      
    3. サブスクリプション ID をコピーします。 後でデータ ファクトリで、この ID が使用されます。

  6. ポータル UI または Azure CLI を使って、2 番目のデータ ファクトリを作成します。 このデータ ファクトリはテストに使用します。

    • 名前: data-factory-cicd-test
    • バージョン: V2
    • リソース グループ: data-pipeline-cicd-rg
    • 場所: 最も近い場所
    • [Git を有効にする] の選択を解除します。
    1. 次の az datafactory create コマンドを実行して、テスト用の新しいデータ ファクトリを作成します。

       az datafactory create \
           --name data-factory-cicd-test \
           --resource-group $rgName
      
    2. サブスクリプション ID をコピーします。 後でデータ ファクトリで、この ID が使用されます。

  7. [新しい Azure Databricks サービスの追加]:

    • リソース グループ: data-pipeline-cicd-rg
    • ワークスペース名: databricks-cicd-ws
    • 場所: 最も近い場所
    1. Azure Databricks 拡張機能がまだインストールされていない場合は、追加します。

       az extension add --name databricks
      
    2. 次の az databricks workspace create コマンドを実行して、新しいワークスペースを作成します。

      az databricks workspace create \
          --resource-group $rgName \
          --name databricks-cicd-ws  \
          --location eastus2  \
          --sku trial
      
    3. サブスクリプション ID をコピーします。 後で Databricks サービスで、この ID が使用されます。

データをストレージ コンテナーにアップロードする

  1. Azure portal で、data-pipeline-cicd-rg リソース グループのストレージ アカウントを開きます。
  2. [BLOB サービス]>[コンテナー] に移動します。
  3. prepareddata コンテナーを開きます。
  4. sample.csv ファイルをアップロードします。

Key Vault の設定

Azure Key Vault を使って、Azure サービスのすべての接続情報を格納します。

Databricks 個人用アクセス トークンを作成する

  1. Azure portal で、Databricks に移動し、ワークスペースを開きます。
  2. Azure Databricks UI で、個人用アクセス トークンを作成してコピーします

ストレージ アカウントのアカウント キーと接続文字列をコピーする

  1. ストレージ アカウントに移動します。
  2. アクセス キーを開きます。
  3. 最初のキーと接続文字列をコピーします。

値を Key Vault に保存する

  1. 3 つのシークレットを作成します。

    • databricks-token: your-databricks-pat
    • StorageKey: your-storage-key
    • StorageConnectString: your-storage-connection
  2. 次の az keyvault secret set コマンドを実行して、キー コンテナーにシークレットを追加します。

    az keyvault secret set --vault-name "$keyVault" --name "databricks-token" --value "your-databricks-pat"
    az keyvault secret set --vault-name "$keyVault" --name "StorageKey" --value "your-storage-key"
    az keyvault secret set --vault-name "$keyVault" --name "StorageConnectString" --value "your-storage-connection"
    

データ パイプライン ソリューションをインポートする

  1. Azure DevOps 組織にサインインし、プロジェクトに移動します。
  2. Repos に移動し、フォークされたバージョンの GitHub リポジトリをインポートします。 詳しくは、「Git リポジトリをプロジェクトにインポートする」をご覧ください。

Azure Resource Manager サービス接続を追加する

  1. Azure Resource Manager サービス接続を作成します。
  2. [サービス プリンシパル (自動)] を選びます。
  3. data-pipeline-cicd-rg リソース グループを選びます。
  4. サービス接続に azure_rm_connection という名前を付けます。
  5. [すべてのパイプラインへのアクセス許可を与える] を選択します。 このオプションを選択するには、サービス接続の管理者ロールが必要です。

パイプライン変数を追加する

  1. datapipeline-vg という名前の新しい変数グループを作成します。

  2. Azure DevOps 拡張機能がまだインストールされていない場合は、追加します。

    az extension add --name azure-devops 
    
  3. Azure DevOps 組織にサインインします。

    az devops login --org https://dev.azure.com/<yourorganizationname>
    
    az pipelines variable-group create --name datapipeline-vg -p <yourazuredevopsprojectname> --variables \
                                        "LOCATION=$region" \
                                        "RESOURCE_GROUP=$rgName" \
                                        "DATA_FACTORY_NAME=$datafactorydev" \
                                        "DATA_FACTORY_DEV_NAME=$datafactorydev" \
                                        "DATA_FACTORY_TEST_NAME=$datafactorytest" \
                                        "ADF_PIPELINE_NAME=DataPipeline" \
                                        "DATABRICKS_NAME=$databricksname" \
                                        "AZURE_RM_CONNECTION=azure_rm_connection" \
                                        "DATABRICKS_URL=<URL copied from Databricks in Azure portal>" \
                                        "STORAGE_ACCOUNT_NAME=$storageName" \
                                        "STORAGE_CONTAINER_NAME=rawdata"
    
  4. keys-vg という名前の 2 番目の変数グループを作成します。 このグループは、Key Vault からデータ変数をプルします。

  5. [シークレットを Azure Key Vault から変数としてリンクする] を選びます。 詳しくは、「Azure キー コンテナーのシークレットにリンクする」をご覧ください。

  6. Azure サブスクリプションを認可します。

  7. 変数 (databricks-tokenStorageConnectStringStorageKey) として追加する使用可能なすべてのシークレットを選びます。

Azure Databricks と Azure Data Factory を構成する

次のセクションの手順に従って、Azure Databricks と Azure Data Factory を設定します。

Azure Databricks でテストスコープを作成する

  1. Azure portal で、[キー コンテナー]>[プロパティ] に移動します。
  2. [DNS 名][リソース ID] をコピーします。
  3. Azure Databricks ワークスペースで、testscope という名前のシークレット スコープを作成します。

Azure Databricks に新しいクラスターを追加する

  1. Azure Databricks ワークスペースで、[クラスター] に移動します。
  2. [クラスターの作成] を選択します。
  3. 新しいクラスターに名前を付けて保存します。
  4. 新しいクラスターの名前を選びます。
  5. URL 文字列で、/clusters//configuration の間でコンテンツをコピーします。 たとえば、文字列 clusters/0306-152107-daft561/configuration0306-152107-daft561 をコピーします。
  6. 後で使用するために、この文字列を保存します。

Azure Data Factory でコード リポジトリを設定する

  1. Azure Data Factory で、[作成と監視] に移動します。 詳しくは、データ ファクトリの作成に関する記事をご覧ください。
  2. [コード リポジトリの設定] を選び、リポジトリを接続します。
    • リポジトリの種類: Azure DevOps Git
    • Azure DevOps 組織: アクティブなアカウント
    • プロジェクト名: Azure DevOps データ パイプライン プロジェクト
    • Git リポジトリ名: 既存のものを使用します。
      • コラボレーション用のメイン ブランチを選びます。
      • /azure-data-pipeline/factorydata をルート フォルダーとして設定します。
    • リソースのインポート先のブランチ: [既存のものを使用][メイン] を選びます。
  1. Azure portal UI でキー コンテナーを開きます。
  2. [アクセス ポリシー] を選択します。
  3. [アクセス ポリシーの追加] を選択します。
  4. [テンプレートからの構成] で、[キーとシークレットの管理] を選びます。
  5. [プリンシパルの選択] で、開発データ ファクトリの名前を検索して追加します。
  6. [追加] を選び、アクセス ポリシーを追加します。
  7. テスト データ ファクトリのアクセス ポリシーを追加するには、次の手順を繰り返します。

Azure Data Factory でキー コンテナーのリンクされたサービスを更新する

  1. [管理]>[リンクされたサービス] に移動します。
  2. サブスクリプションに接続するように Azure キー コンテナーを更新します。

Azure Data Factory でストレージのリンク サービスを更新する

  1. [管理]>[リンクされたサービス] に移動します。
  2. サブスクリプションに接続するように Azure Blob Storage 値を更新します。

Azure Data Factory で Azure Databricks のリンク サービスを更新する

  1. [管理]>[リンクされたサービス] に移動します。
  2. サブスクリプションに接続するように Azure Databricks 値を更新します。
  3. [既存のクラスター ID] の場合、前に保存したクラスター値を入力します。

データ ファクトリをテストして発行する

  1. Azure Data Factory で、[編集] に移動します。
  2. DataPipelineを開きます。
  3. [変数] を選択します。
  4. storage_account_name で Azure portal のストレージ アカウントを参照していることを確認します。 必要に応じて既定値を更新します。 変更を保存します。
  5. [検証] を選んで DataPipeline を確認します。
  6. [発行] を選んで、リポジトリの adf_publish ブランチに data-factory アセットを発行します。

CI/CD パイプラインを実行する

継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインを実行するには、これらの手順に従います。

  1. [パイプライン] ページに移動します。 次に、新しいパイプラインを作成するためのアクションを選択します。
  2. ソース コードの場所として [Azure Repos Git] を選びます。
  3. リポジトリの一覧が表示されたら、目的のリポジトリを選択します。
  4. パイプラインを設定したら、[既存の Azure Pipelines YAML ファイル] を選びます。 YAML ファイル /azure-data-pipeline/data_pipeline_ci_cd.yml を選びます。
  5. パイプラインを実行します。 以前にパイプラインが実行されていない場合は、実行中にリソースにアクセスするためのアクセス許可を付与することが必要になる場合があります。

リソースをクリーンアップする

このアプリケーションを引き続き使用しない場合は、次の手順でデータ パイプラインを削除します。

  1. data-pipeline-cicd-rg リソース グループを削除します。
  2. Azure DevOps プロジェクトを削除します。

次のステップ