チュートリアル: データ製品バッチを設定する
このチュートリアルでは、既にデプロイされているデータ製品サービスを設定する方法について説明します。 Azure Data Factory を使用してデータを統合および調整し、Microsoft Purview を使用してデータ資産の検出、管理、ガバナンスを行います。
具体的には、次の方法を学習します。
- 必要なリソースの作成とデプロイ
- ロールとアクセス許可の割り当て
- データ統合のためのリソースの接続
このチュートリアルは、<DMLZ-prefix>-dev-dp001
のサンプル データ製品リソース グループにデプロイされているサービスについて理解するのに役立ちます。 Azure サービスが相互にインターフェイスする方法と、どのようなセキュリティ対策が実施されているかを体験してください。
新しいコンポーネントをデプロイするとき、Purview によってサービス ガバナンスが接続されて、包括的で最新のデータ ランドスケープのマップが作成される方法について調査する機会が得られます。 その結果、自動化されたデータ検出、機密データ分類、エンド ツー エンドのデータ系列が得られます。
前提条件
データ製品バッチの設定を開始する前に、次の前提条件を満たしていることを確認してください。
Azure のサブスクリプション。 Azure サブスクリプションをお持ちでない場合は、Azure の無料アカウントを作成してください。
Azure サブスクリプションへのアクセス許可。 Purview と Azure Synapse Analytics をデプロイ用に設定するには、Azure サブスクリプションのユーザー アクセス管理者ロールまたは所有者ロールが必要です。 このチュートリアルでは、サービスとサービス プリンシパルに対してさらに多くのロールの割り当てを設定します。
デプロイされるリソース。 このチュートリアルを完了するには、これらのリソースが Azure サブスクリプションに既にデプロイされている必要があります。
- データ管理ランディング ゾーン。 詳細については、データ管理ランディング ゾーンの GitHub リポジトリを参照してください。
- データ ランディング ゾーン。 詳細については、データ ランディング ゾーンの GitHub リポジトリを参照してください。
- データ製品バッチ。 詳細については、データ製品バッチの GitHub リポジトリを参照してください。
Microsoft Purview アカウント。 アカウントはデータ管理ランディング ゾーンのデプロイの一部として作成されます。
セルフホステッド統合ランタイム。 ランタイムは、データ ランディング ゾーンのデプロイの一部として作成されます。
注意
このチュートリアルでは、プレースホルダーは、チュートリアルを開始する前にデプロイする前提条件となるリソースを示します。
<DMLZ-prefix>
は、"データ管理ランディング ゾーン" のデプロイを作成したときに入力したプレフィックスを示します。<DLZ-prefix>
は、"データ ランディング ゾーン" のデプロイを作成したときに入力したプレフィックスを示します。<DP-prefix>
は、"データ製品バッチ" のデプロイを作成したときに入力したプレフィックスを示します。
Azure SQL Database インスタンスを作成する
このチュートリアルを開始するには、2 つのサンプルの SQL Database インスタンスを作成します。 後のセクションでこれらのデータベースを使用して、CRM および ERP のデータ ソースをシミュレートします。
Azure portal のポータル グローバル コントロールで、Cloud Shell アイコンを選択して Azure Cloud Shell ターミナルを開きます。 ターミナルの種類として [Bash] を選択します。
Cloud Shell で次のスクリプトを実行します。 このスクリプトでは、
<DLZ-prefix>-dev-dp001
リソース グループと、リソース グループ内の<DP-prefix>-dev-sqlserver001
Azure SQL サーバーが検索されます。 次に、スクリプトによって<DP-prefix>-dev-sqlserver001
サーバー上に 2 つの SQL Database インスタンスが作成されます。 データベースには、AdventureWorks サンプル データが事前に設定されています。 データには、このチュートリアルで使用するテーブルが含まれています。subscription
パラメーター プレースホルダーの値は、必ず独自の Azure サブスクリプション ID に置き換えてください。# Azure SQL Database instances setup # Create the AdatumCRM and AdatumERP databases to simulate customer and sales data. # Use the ID for the Azure subscription you used to deployed the data product. az account set --subscription "<your-subscription-ID>" # Get the resource group for the data product. resourceGroupName=$(az group list -o tsv --query "[?contains(@.name, 'dp001')==\`true\`].name") # Get the existing Azure SQL Database server name. sqlServerName=$(az sql server list -g $resourceGroupName -o tsv --query "[?contains(@.name, 'sqlserver001')==\`true\`].name") # Create the first SQL Database instance, AdatumCRM, to create the customer's data source. az sql db create --resource-group $resourceGroupName --server $sqlServerName --name AdatumCRM --service-objective Basic --sample-name AdventureWorksLT # Create the second SQL Database instance, AdatumERP, to create the sales data source. az sql db create --resource-group $resourceGroupName --server $sqlServerName --name AdatumERP --service-objective Basic --sample-name AdventureWorksLT
スクリプトの実行が完了すると、<DP-prefix>-dev-sqlserver001
Azure SQL サーバー上に 2 つの新しい SQL Database インスタンス AdatumCRM
および AdatumERP
があります。 どちらのデータベースも Basic コンピューティング レベルにあります。 データベースは、データ製品バッチのデプロイに使用したのと同じ <DLZ-prefix>-dev-dp001
リソース グループに配置されます。
データ製品バッチをカタログ化するように Purview を設定する
次に、データ製品バッチをカタログ化するように Purview を設定する手順を完了します。 まず、サービス プリンシパルを作成します。 次に、必要なリソースを設定し、ロールとアクセス許可を割り当てます。
サービス プリンシパルの作成
Azure portal のポータル グローバル コントロールで、Cloud Shell アイコンを選択して Azure Cloud Shell ターミナルを開きます。 ターミナルの種類として [Bash] を選択します。
次のスクリプトを修正します。
subscriptionId
パラメーター プレースホルダーの値を、独自の Azure サブスクリプション ID に置き換えます。spname
パラメーター プレースホルダーの値を、サービス プリンシパルに使用する名前に置き換えます。 サービス プリンシパル名は、サブスクリプション内で一意である必要があります。
パラメーター値を更新した後、Cloud Shell でスクリプトを実行します。
# Replace the parameter values with the name you want to use for your service principal name and your Azure subscription ID. spname="<your-service-principal-name>" subscriptionId="<your-subscription-id>" # Set the scope to the subscription. scope="/subscriptions/$subscriptionId" # Create the service principal. az ad sp create-for-rbac \ --name $spname \ --role "Contributor" \ --scope $scope
次の例のような結果がないか JSON 出力を確認します。 出力内の値をメモまたはコピーして、後の手順で使用します。
{ "appId": "<your-app-id>", "displayName": "<service-principal-display-name>", "name": "<your-service-principal-name>", "password": "<your-service-principal-password>", "tenant": "<your-tenant>" }
サービス プリンシパルのアクセスとアクセス許可を設定する
前の手順で生成された JSON 出力から、次の戻り値を取得します。
- サービス プリンシパル ID (
appId
) - サービス プリンシパルのキー (
password
)
サービス プリンシパルには次のアクセス許可が必要です。
- ストレージ アカウントのストレージ BLOB データ閲覧者ロール。
- SQL Database インスタンスに対するデータ閲覧者のアクセス許可。
必要なロールとアクセス許可を使用してサービス プリンシパルを設定するには、次の手順を実行します。
Azure ストレージ アカウントのアクセス許可
Azure portal で、
<DLZ-prefix>devraw
Azure ストレージ アカウントに移動します。 リソース メニューで、[アクセス制御 (IAM)] を選択します。[追加]>[ロール割り当ての追加] の順に選択します。
[ロールの割り当ての追加] の [ロール] タブで、[ストレージ BLOB データ閲覧者] を検索して選択します。 次に、 [次へ] を選択します。
[メンバー] で、[メンバーの選択] を選択します。
[メンバーの選択] で、作成したサービス プリンシパルの名前を検索します。
検索結果でサービス プリンシパルを選択し、[選択] を選択します。
ロールの割り当てを完了するには、[レビューと割り当て] を 2 回選択します。
残りのストレージ アカウントについて、このセクションの手順を繰り返します。
<DLZ-prefix>devencur
<DLZ-prefix>devwork
SQL データベースのアクセス許可
SQL Database のアクセス許可を設定するには、クエリ エディターを使用して Azure SQL 仮想マシンに接続します。 すべてのリソースはプライベート エンドポイントの背後にあるため、最初に Azure Bastion ホスト仮想マシンを使用して Azure portal にサインインする必要があります。
Azure portal で、<DMLZ-prefix>-dev-bastion
リソース グループにデプロイされている仮想マシンに接続します。 Bastion ホスト サービスを使用して仮想マシンに接続する方法がわからない場合は、「VM への接続」を参照してください。
サービス プリンシパルをデータベースのユーザーとして追加するには、まず Microsoft Entra 管理者として自分自身を追加することが必要になる場合があります。手順 1 と 2 では、Microsoft Entra 管理者として自分自身を追加します。手順 3 から 5 では、サービス プリンシパルにデータベースへのアクセス許可を付与します。 Bastion ホスト仮想マシンからポータルにサインインしたら、Azure portal で Azure SQL 仮想マシンを検索します。
<DP-prefix>-dev-sqlserver001
Azure SQL 仮想マシンに移動します。 リソース メニューの [設定] で、[Microsoft Entra ID] を選びます。コマンド バーで、[管理者の設定] を選択します。自分のアカウントを検索して選択します。 [選択] を選択します。
リソース メニューで、[SQL データベース] を選択し、
AdatumCRM
データベースを選択します。[AdatumCRM] リソース メニューで、[クエリ エディター (プレビュー)] を選択します。 [Active Directory 認証] で、[続行] ボタンを選択してサインインします。
クエリ エディターで、次のステートメントを修正して、
<service principal name>
を作成したサービス プリンシパルの名前 (たとえばpurview-service-principal
) に置き換えます。 次に、ステートメントを実行します。CREATE USER [<service principal name>] FROM EXTERNAL PROVIDER GO EXEC sp_addrolemember 'db_datareader', [<service principal name>] GO
AdatumERP
データベースについて、手順 3 から 5 を繰り返します。
キー コンテナーを設定する
Purview では、Azure Key Vault のインスタンスからサービス プリンシパル キーを読み取ります。 キー コンテナーは、データ管理ランディング ゾーンのデプロイで作成されます。 キー コンテナーを設定するには、次の手順が必要です。
サービス プリンシパルのキーをシークレットとしてキー コンテナーに追加します。
キー コンテナー内の MSI シークレット閲覧者のアクセス許可を Purview に付与します。
キー コンテナー接続として Purview にキー コンテナーを追加します。
Purview で、キー コンテナー シークレットを指す資格情報を作成します。
キー コンテナーにシークレットを追加するアクセス許可を追加する
Azure portal で、Azure Key Vault サービスに移動します。
<DMLZ-prefix>-dev-vault001
キー コンテナーを検索します。リソース メニューで、[アクセス制御 (IAM)] を選択します。 コマンド バーで、[追加] を選択し、[ロールの割り当ての追加] を選択します。
[ロール] タブで、[キー コンテナー管理者] を検索して選択します。 [次へ] を選択します。
[メンバー] で、[メンバーの選択] を選択して、現在サインインしているアカウントを追加します。
[メンバーの選択] で、現在サインインしているアカウントを検索します。 アカウントを選択し、[選択] を選択します。
ロールの割り当てプロセスを完了するには、[レビューと割り当て] を 2 回選択します。
キー コンテナーにシークレットを追加する
Bastion ホスト仮想マシンから Azure portal にサインインするには、次の手順を実行します。
<DMLZ-prefix>-dev-vault001
キー コンテナーのリソース メニューで、[シークレット] を選択します。 コマンド バーで、[生成/インポート] を選択して新しいシークレットを作成します。[シークレットの作成] で、次の値を選択するか入力します。
設定 アクション Upload options [Manual] \(手動) を選択します。 名前 「service-principal-secret」と入力します。 Value 以前作成したサービス プリンシパルのパスワードを入力します。 Note
この手順では、サービス プリンシパルのパスワード キーを使用して、キー コンテナーに
service-principal-secret
という名前のシークレットを作成します。 Purview ではシークレットを使用して、データ ソースに接続してスキャンします。 正しくないパスワードを入力した場合、次のセクションを完了できません。[作成] を選択します
キー コンテナーで Purview アクセス許可を設定する
Purview インスタンスで、キー コンテナーに格納されているシークレットを読み取るために、Purview にキー コンテナー内の関連するアクセス許可を割り当てる必要があります。 アクセス許可を設定するには、Purview マネージド ID をキー コンテナーのシークレット閲覧者ロールに追加します。
<DMLZ-prefix>-dev-vault001
キー コンテナーのリソース メニューで、[アクセス制御 (IAM)] を選択します。コマンド バーで、[追加] を選択し、[ロールの割り当ての追加] を選択します。
[ロール] で、[キー コンテナー シークレット ユーザー] を検索して選択します。 [次へ] を選択します。
[メンバー] で、[メンバーの選択] を選択します。
<DMLZ-prefix>-dev-purview001
Purview インスタンスを検索します。 該当するアカウントを追加するインスタンスを選択します。 次に [選択] を選択します。ロールの割り当てプロセスを完了するには、[レビューと割り当て] を 2 回選択します。
Purview でキー コンテナー接続を設定する
Purview へのキー コンテナー接続を設定するには、Azure Bastion ホスト仮想マシンを使用してAzure portal にサインインする必要があります。
Azure portal で、
<DMLZ-prefix>-dev-purview001
の Purview アカウントに移動します。 [概要] の [Microsoft Purview ガバナンス ポータルを開く] で、[開く] を選択します。Purview Studio で、[管理]>[資格情報] を選択します。 [資格情報] のコマンド バーで、[Key Vault 接続の管理] を選択し、[新規] を選択します。
[New key vault connection](新しいキー コンテナー接続) で、次の情報を選択または入力します。
設定 アクション 名前 「<DMLZ-prefix>-dev-vault001」と入力します。 Azure サブスクリプション キー コンテナーをホストするサブスクリプションを選択します。 キー コンテナー名 <DMLZ-prefix>-dev-vault001 キー コンテナーを選択します。 [作成] を選択します
[アクセス権の付与の確認] で、[確認] を選択します。
Purview で資格情報を作成する
キー コンテナーを設定する最後の手順は、サービス プリンシパルのキー コンテナーで作成したシークレットを指す資格情報を Purview で作成することです。
Purview Studio で、[管理]>[資格情報] を選択します。 [資格情報] コマンド バーで、[新規] を選択します。
[新しい資格情報] で、次の情報を選択または入力します。
設定 アクション 名前 「purviewServicePrincipal」と入力します。 認証方法 [サービス プリンシパル] を選択します。 テナント ID 値は自動的に設定されます。 サービス プリンシパル ID サービス プリンシパルのアプリケーション ID またはクライアント ID を入力します。 Key Vault 接続 前のセクションで作成したキー コンテナー接続を選択します。 シークレット名 キー コンテナー内のシークレットの名前 (service-principal-secret) を入力します。 [作成] を選択します
データ ソースの登録
この時点で、Purview からサービス プリンシパルに接続できます。 これで、データ ソースを登録して設定できます。
Azure Data Lake Storage Gen2 アカウントを登録する
次の手順では、Azure Data Lake Storage Gen2 ストレージ アカウントを登録するプロセスの概要を示します。
Purview Studio で、データ マップ アイコンを選択し、[ソース] を選択して、[登録] を選択します。
[ソースの登録] で、[Azure Data Lake Storage Gen2] を選択し、[続行] を選択します。
[ソースの登録 (Azure Data Lake Storage Gen2)] 画面で、次の情報を選択または入力します。
設定 アクション 名前 「<DLZ-prefix>dldevraw」と入力します。 Azure サブスクリプション ストレージ アカウントをホストするサブスクリプションを選択します。 Storage account name (ストレージ アカウント名) 関連するストレージ アカウントを選択します。 エンドポイント この値は、選択されたストレージ アカウントに応じて自動的に設定されます。 コレクションを選択する ルート コレクションを選びます。 [登録] を選択してデータ ソースを作成します。
これらの手順を、次のストレージ アカウントに対して繰り返します。
<DMLZ-prefix>devencur
<DMLZ-prefix>devwork
SQL Database インスタンスをデータ ソースとして登録する
Purview Studio で、データ マップ アイコンを選択し、[ソース] を選択して、[登録] を選択します。
[ソースの登録] で、[Azure SQL Database] を選択し、[続行] を選択します。
[Register sources (Azure SQL Database)](ソースの登録 (Azure SQL Database)) 画面で、次の情報を選択または入力します。
設定 アクション 名前 SQLDatabase (「Azure SQL Database インスタンスを作成する」で作成されたデータベースの名前) を入力します。 サブスクリプション データベースをホストするサブスクリプションを選択します。 サーバー名 「<DP-prefix>-dev-sqlserver001」と入力します。 [登録] を選択します。
スキャンを設定する
次に、データ ソースのスキャンを設定します。
Data Lake Storage Gen2 データ ソースをスキャンする
Purview Studio で、データ マップに移動します。 データ ソースで、[新しいスキャン] アイコンを選択します。
[新しいスキャン] ペインで、次の情報を入力または選択します。
設定 アクション 名前 「Scan_<DLZ-prefix>devraw」と入力します。 統合ランタイム経由で接続 データ ランディング ゾーンと共にデプロイされたセルフホステッド統合ランタイムを選択します。 資格情報 Purview 用に設定したサービス プリンシパルを選択します。 [接続のテスト] を選択して、接続と、アクセス許可が設定されていることを確認します。 [続行] をクリックします。
[スキャンのスコープ設定] で、スキャンのスコープとしてストレージ アカウント全体を選択し、[続行] を選択します。
[スキャン ルール セットの選択] で、[AdlsGen2] を選択し、[続行] を選択します。
[スキャン トリガーの設定] で、[1 回] を選択し、[続行] を選択します。
[スキャンを確認する] で、スキャン設定を確認します。 [保存および実行] を選択してスキャンを開始します。
これらの手順を、次のストレージ アカウントに対して繰り返します。
<DMLZ-prefix>devencur
<DMLZ-prefix>devwork
SQL Database データ ソースのスキャン
Azure SQL Database データ ソースで、[新しいスキャン] を選択します。
[新しいスキャン] ペインで、次の情報を入力または選択します。
設定 アクション 名前 「Scan_Database001」と入力します。 統合ランタイム経由で接続 [Purview-SHIR] を選択します。 データベース名 データベース名を選択します。 資格情報 Purview で作成したキー コンテナー資格情報を選択します。 系列の抽出 (プレビュー) [オフ] を選択します。 [接続のテスト] を選択して、接続と、アクセス許可が設定されていることを確認します。 [続行] をクリックします。
スキャンのスコープを選択します。 データベース全体をスキャンするには、既定値を使用します。
[スキャン ルール セットの選択] で、[AzureSqlDatabase] を選択し、[続行] を選択します。
[スキャン トリガーの設定] で、[1 回] を選択し、[続行] を選択します。
[スキャンを確認する] で、スキャン設定を確認します。 [保存および実行] を選択してスキャンを開始します。
以上の手順を AdatumERP
データベースについても行います。
これで Purview は、登録済みのデータ ソースのデータ ガバナンス用に設定されました。
SQL Database データを Data Lake Storage Gen2 にコピーする
次の手順では、Data Factory のデータのコピー ツールを使用して、SQL Database インスタンスAdatumCRM
および AdatumERP
のテーブルを、<DLZ-prefix>devraw
の Data Lake Storage Gen2 アカウントの CSV ファイルにコピーするパイプラインを作成します。
環境はパブリック アクセスにロックされているため、まずプライベート エンドポイントを設定する必要があります。 プライベート エンドポイントを使用するには、ローカル ブラウザーで Azure portal にサインインし、Bastion ホスト仮想マシンに接続して、必要な Azure サービスにアクセスします。
プライベート エンドポイントを作成する
必要なリソースのプライベート エンドポイントを設定するには、次の手順を実行します。
<DMLZ-prefix>-dev-bastion
のリソース グループで、<DMLZ-prefix>-dev-vm001
を 選択します。コマンド バーで、[接続] を選択し、[Bastion] を選択します。
仮想マシンのユーザー名とパスワードを入力し、[接続] を選択します。
仮想マシンの Web ブラウザーで、Azure portal に移動します。
<DLZ-prefix>-dev-shared-integration
のリソース グループに移動し、<DLZ-prefix>-dev-integration-datafactory001
のデータ ファクトリを開きます。[概要] の [Open Azure Data Factory Studio](Azure Data Factory Studio を開く) で、[開く] を選択します。
Data Factory Studio メニューで、[管理] アイコンを選択します (アイコンは、レンチのマークが付いた正方形のツール ボックスのように表示されています)。 リソース メニューで、[マネージド プライベート エンドポイント] を選択して、Data Factory をセキュリティで保護された他の Azure サービスに接続するために必要なプライベート エンドポイントを作成します。
プライベート エンドポイントのアクセス要求の承認については、後のセクションで説明します。 プライベート エンドポイントのアクセス要求を承認すると、承認の状態は、 次の
<DLZ-prefix>devencur
のストレージ アカウントの例のように [承認済み] になります。プライベート エンドポイント接続を承認する前に、[新規] を選択します。 「Azure SQL」と入力して、
<DP-prefix>-dev-sqlserver001
の Azure SQL 仮想マシンの新しいマネージド プライベート エンドポイントを作成するために使用する Azure SQL Database コネクタを見つけます。 仮想マシンには、前に作成したAdatumCRM
データベースとAdatumERP
データベースが含まれています。[New managed private endpoint (Azure SQL Database)] (\新しいマネージド プライベート エンドポイント (Azure SQL データベース)\) の [名前] に、「data-product-dev-sqlserver001」と入力します。 リソースの作成に使用した Azure サブスクリプションを入力します。 [サーバー名] で、
<DP-prefix>-dev-sqlserver001
を選択し、次のセクションでこのデータ ファクトリから接続できるようにします。
プライベート エンドポイントのアクセス要求を承認する
Data Factory に必要なサービスのプライベート エンドポイントへのアクセス権を付与するには、次の 2 つのオプションがあります。
オプション 1: アクセスを要求する各サービスについて、Azure portal で、サービスのネットワークまたはプライベート エンドポイント接続オプションに移動し、プライベート エンドポイントへのアクセス要求を承認します。
オプション 2: Azure Cloud Shell で Bash モードで次のスクリプトを実行し、必要なプライベート エンドポイントへのすべてのアクセス要求を一度に承認します。
# Storage managed private endpoint approval # devencur resourceGroupName=$(az group list -o tsv --query "[?contains(@.name, '-dev-storage')==\`true\`].name") storageAcctName=$(az storage account list -g $resourceGroupName -o tsv --query "[?contains(@.name, 'devencur')==\`true\`].name") endPointConnectionName=$(az network private-endpoint-connection list -g $resourceGroupName -n $storageAcctName --type Microsoft.Storage/storageAccounts -o tsv --query "[?contains(@.properties.privateLinkServiceConnectionState.status, 'Pending')==\`true\`].name") az network private-endpoint-connection approve -g $resourceGroupName -n $endPointConnectionName --resource-name $storageAcctName --type Microsoft.Storage/storageAccounts --description "Approved" # devraw resourceGroupName=$(az group list -o tsv --query "[?contains(@.name, '-dev-storage')==\`true\`].name") storageAcctName=$(az storage account list -g $resourceGroupName -o tsv --query "[?contains(@.name, 'devraw')==\`true\`].name") endPointConnectionName=$(az network private-endpoint-connection list -g $resourceGroupName -n $storageAcctName --type Microsoft.Storage/storageAccounts -o tsv --query "[?contains(@.properties.privateLinkServiceConnectionState.status, 'Pending')==\`true\`].name") az network private-endpoint-connection approve -g $resourceGroupName -n $endPointConnectionName --resource-name $storageAcctName --type Microsoft.Storage/storageAccounts --description "Approved" # SQL Database managed private endpoint approval resourceGroupName=$(az group list -o tsv --query "[?contains(@.name, '-dev-dp001')==\`true\`].name") sqlServerName=$(az sql server list -g $resourceGroupName -o tsv --query "[?contains(@.name, 'sqlserver001')==\`true\`].name") endPointConnectionName=$(az network private-endpoint-connection list -g $resourceGroupName -n $sqlServerName --type Microsoft.Sql/servers -o tsv --query "[?contains(@.properties.privateLinkServiceConnectionState.status, 'Pending')==\`true\`].name") az network private-endpoint-connection approve -g $resourceGroupName -n $endPointConnectionName --resource-name $sqlServerName --type Microsoft.Sql/servers --description "Approved" # Key Vault private endpoint approval resourceGroupName=$(az group list -o tsv --query "[?contains(@.name, '-dev-metadata')==\`true\`].name") keyVaultName=$(az keyvault list -g $resourceGroupName -o tsv --query "[?contains(@.name, 'dev-vault001')==\`true\`].name") endPointConnectionID=$(az network private-endpoint-connection list -g $resourceGroupName -n $keyVaultName --type Microsoft.Keyvault/vaults -o tsv --query "[?contains(@.properties.privateLinkServiceConnectionState.status, 'Pending')==\`true\`].id") az network private-endpoint-connection approve -g $resourceGroupName --id $endPointConnectionID --resource-name $keyVaultName --type Microsoft.Keyvault/vaults --description "Approved" # Purview private endpoint approval resourceGroupName=$(az group list -o tsv --query "[?contains(@.name, 'dev-governance')==\`true\`].name") purviewAcctName=$(az purview account list -g $resourceGroupName -o tsv --query "[?contains(@.name, '-dev-purview001')==\`true\`].name") for epn in $(az network private-endpoint-connection list -g $resourceGroupName -n $purviewAcctName --type Microsoft.Purview/accounts -o tsv --query "[?contains(@.properties.privateLinkServiceConnectionState.status, 'Pending')==\`true\`].name") do az network private-endpoint-connection approve -g $resourceGroupName -n $epn --resource-name $purviewAcctName --type Microsoft.Purview/accounts --description "Approved" done
次の例は、<DLZ-prefix>devraw
のストレージ アカウントがプライベート エンドポイントのアクセス要求を管理する方法を示しています。 ストレージ アカウントのリソース メニューで、[ネットワーク] を選択します。 コマンド バーで、[プライベート エンドポイント接続] を選択します。
一部の Azure リソースでは、リソース メニューで [プライベート エンドポイント接続] を選択します。 Azure SQL サーバーの例を次のスクリーンショットに示します。
プライベート エンドポイント アクセス要求を承認するには、[プライベート エンドポイント接続] で、保留中のアクセス要求を選択し、[承認] を選択します。
必要な各サービスでアクセス要求を承認した後、Data Factory Studio の [マネージド プライベート エンドポイント] で要求が [承認済み] として表示されるまでに数分かかる場合があります。 コマンド バーで [更新] を選択した場合でも、承認状態が数分間古くなっている可能性があります。
必要なサービスのすべてのアクセス要求の承認が完了したら、[マネージド プライベート エンドポイント] で、すべてのサービスの承認状態の値が [承認済み] になります。
ロールの割り当て
プライベート エンドポイントのアクセス要求の承認が完了したら、Data Factory から次のリソースにアクセスするための適切なロールのアクセス許可を追加します。
<DP-prefix>-dev-sqlserver001
の Azure SQL サーバーの SQL Database インスタンスAdatumCRM
およびAdatumERP
- ストレージ アカウント
<DLZ-prefix>devraw
、<DLZ-prefix>devencur
、および<DLZ-prefix>devwork
- Purview アカウント
<DMLZ-prefix>-dev-purview001
Azure SQL:仮想マシン
ロールの割り当てを追加するには、Azure SQL 仮想マシンから作業を開始します。
<DMLZ-prefix>-dev-dp001
のリソース グループで、<DP-prefix>-dev-sqlserver001
に移動します。リソース メニューで、[アクセス制御 (IAM)] を選択します。 コマンド バーで、[追加]>[ロールの割り当ての追加] を選択します。
[ロール] タブで、[共同作成者] を選択し、[次へ] を選択します。
[メンバー] の [アクセス権の割り当て先] で [マネージド ID] を選択します。 [メンバー] で、[メンバーの選択] を選択します。
[マネージド ID の選択] で、Azure サブスクリプションを選択します。 [マネージド ID] について、[Data Factory (V2)] を選択して、使用可能なデータ ファクトリを表示します。 データ ファクトリの一覧で、Azure Data Factory <DLZ-prefix>-dev-integration-datafactory001 を選択します。 [選択] を選択します。
[レビューと割り当て] を 2 回選択してプロセスを完了します。
ストレージ アカウント
次に、必要なロールを <DLZ-prefix>devraw
、<DLZ-prefix>devencur
、<DLZ-prefix>devwork
のストレージ アカウントに割り当てます。
ロールを割り当てるには、Azure SQL サーバー ロールの割り当ての作成に使用したのと同じ手順を実行します。 ただし、ロールについては、[共同作成者] ではなく [ストレージ BLOB データ共同作成者] を選択します。
3 つのストレージ アカウントすべてにロールを割り当てた後、Data Factory からストレージ アカウントに接続してアクセスできます。
Microsoft Purview
ロールの割り当てを追加する最後の手順は、Microsoft Purview の Purview データ キュレーター ロールを <DLZ-prefix>-dev-integration-datafactory001
データ ファクトリのマネージド ID アカウントに追加することです。 Data Factory で複数のデータ ソースから Purview アカウントにデータ カタログ資産情報を送信できるようにするには、次の手順を実行します。
リソース グループ
<DMLZ-prefix>-dev-governance
で、<DMLZ-prefix>-dev-purview001
の Purview アカウントに移動します。Purview Studio で、[データ マップ] アイコンを選択し、[コレクション] を選択します。
コレクションの [ロールの割り当て] タブを選択します。 [データ キュレーター] で、
<DLZ-prefix>-dev-integration-datafactory001
のマネージド ID を追加します。
Data Factory を Purview に接続する
アクセス許可が設定され、Purview でデータ ファクトリが表示されるようになりました。 次の手順では、<DMLZ-prefix>-dev-purview001
を <DLZ-prefix>-dev-integration-datafactory001
に接続します。
Purview Studio で、[管理] アイコンを選択し、[Data Factory] を選択します。 [新規] を選択して Data Factory 接続を作成します。
[New Data Factory connections] (新しい Data Factory 接続) ウィンドウで、Azure サブスクリプションを入力し、
<DLZ-prefix>-dev-integration-datafactory001
のデータ ファクトリを選択します。 [OK] を選択します。<DLZ-prefix>-dev-integration-datafactory001
Data Factory Studio インスタンスの [管理]>[Azure Purview] で、[Azure Purview アカウント] を更新します。Data Lineage - Pipeline
統合に緑色の [接続済み] アイコンが表示されます。
ETL パイプラインを作成する
<DLZ-prefix>-dev-integration-datafactory001
に必要なアクセス許可が付与されたので、Data Factory でコピー アクティビティを作成して、SQL Database インスタンスから <DLZ-prefix>devraw
の RAW ストレージ アカウントにデータを移動します。
AdatumCRM でデータのコピー ツールを使用する
このプロセスでは、AdatumCRM
の SQL Database インスタンスから顧客データを抽出し、Data Lake Storage Gen2 ストレージにコピーします。
Data Factory Studio で、[作成者] アイコンを選択し、[ファクトリ リソース] を選択します。 プラス記号 (+) を選択し、[データのコピー ツール] を選択します。
データのコピー ツール ウィザードの各手順を完了します。
パイプラインを 24 時間ごとに実行するトリガーを作成するには、[スケジュール] を選択します。
このデータ ファクトリを
<DP-prefix>-dev-sqlserver001
のサーバー上のAdatumCRM
の SQL Database インスタンス (ソース) に接続するためのリンクされたサービスを作成するには、[新しい接続] を選択します。Note
SQL Database インスタンスまたはストレージ アカウント内のデータへの接続またはアクセスでエラーが発生した場合は、Azure サブスクリプションのアクセス許可を確認してください。 データ ファクトリに必要な資格情報と、問題のあるリソースへのアクセス許可があることを確認します。
次の 3 つのテーブルを選択します。
SalesLT.Address
SalesLT.Customer
SalesLT.CustomerAddress
<DLZ-prefix>devraw
の Azure Data Lake Storage Gen2 ストレージ (宛先) にアクセスするための新しいリンクされたサービスを作成します。<DLZ-prefix>devraw
のストレージ内のフォルダーを参照し、コピー先として [データ] を選択します。ファイル名のサフィックスを .csv に変更し、他の既定のオプションを使用します。
次のペインに移動し、[ファイルにヘッダーを追加] を選択します。
ウィザードが完了すると、[Deployment complete](デプロイ完了) ペインは次の例のようになります。
新しいパイプラインが [パイプライン] に一覧表示されます。
パイプラインを実行する
このプロセスでは、Data\CRM フォルダーに 3 つの .csv ファイルが作成されます。AdatumCRM
データベース内の選択したテーブルごとに 1 つずつ作成されます。
パイプライン
CopyPipeline_CRM_to_Raw
の名前を変更します。データセット
CRM_Raw_Storage
およびCRM_DB
の名前を変更します。[ファクトリ リソース] コマンド バーで、[すべて発行] を選択します。
CopyPipeline_CRM_to_Raw
パイプラインを選択し、パイプライン コマンド バーで [トリガー] を選択して、SQL Database から Data Lake Storage Gen2 に 3 つのテーブルをコピーします。
AdatumERP でデータのコピー ツールを使用する
次に、AdatumERP
データベースからデータを抽出します。 データは ERP システムからの売上データを表します。
引き続き Data Factory Studio で、データのコピー ツールを使用して新しいパイプラインを作成します。 今回は、CRM データで行ったのと同じ方法で、売上データを
AdatumERP
から<DLZ-prefix>devraw
のストレージ アカウント データ フォルダーに送信します。 同じ手順を実行しますが、ソースとしてAdatumERP
データベースを使用します。1 時間ごとにトリガーするスケジュールを作成します。
AdatumERP
の SQL Database インスタンスへのリンクされたサービスを作成します。次の 7 つのテーブルを選択します。
SalesLT.Product
SalesLT.ProductCategory
SalesLT.ProductDescription
SalesLT.ProductModel
SalesLT.ProductModelProductDescription
SalesLT.SalesOrderDetail
SalesLT.SalesOrderHeader
<DLZ-prefix>devraw
ストレージ アカウントに対する既存のリンクされたサービスを使用し、ファイル拡張子を .csv に設定します。[ファイルにヘッダーを追加] を選択します。
ウィザードをもう一度完了し、パイプライン
CopyPipeline_ERP_to_DevRaw
の名前を変更します。 コマンド バーで、[すべて発行] を選択します。 最後に、この新しく作成されたパイプラインでトリガーを実行し、選択した 7 つのテーブルを SQL Database から Data Lake Storage Gen2 にコピーします。
これらの手順を完了すると、10 個の CSV ファイルが <DLZ-prefix>devraw
の Data Lake Storage Gen2 ストレージに格納されます。 次のセクションでは、<DLZ-prefix>devencur
の Data Lake Storage Gen2 ストレージ内のファイルをキュレーションします。
Data Lake Storage Gen2 でのデータのキュレーション
未加工の <DLZ-prefix>devraw
の Data Lake Storage Gen2 ストレージに 10 個の CSV ファイルを作成することが完了したら、これらのファイルは、キュレーションされた <DLZ-prefix>devencur
の Data Lake Storage Gen2 ストレージにコピーするときに、必要に応じて変換します。
引き続き Azure Data Factory を使用してこれらの新しいパイプラインを作成し、データ移動を調整します。
CRM を顧客データにキュレーションする
<DLZ-prefix>devraw
の Data\CRM フォルダー内の CSV ファイルを取得するデータ フローを作成します。 ファイルを変換し、変換されたファイルを .parquet ファイル形式で <DLZ-prefix>devencur
の Data\Customer フォルダーにコピーします。
Azure Data Factoryで、データ ファクトリに移動し、[調整] (Orchestrate) を選択します。
[全般] で、パイプライン
Pipeline_transform_CRM
に名前を付けます。[アクティビティ] ウィンドウで、 [移動と変換] を展開します。 データ フロー アクティビティをドラッグし、パイプライン キャンバスにドロップします。
[Adding Data Flow](データ フローの追加) で、[Create new data flow](新しいデータ フローの作成) を選択し、データ フロー
CRM_to_Customer
に名前を付けます。 [完了] を選択します。注意
パイプライン キャンバスのコマンド バーで、[データ フローのデバッグ] を有効にします。 デバッグ モードでは、ライブの Apache Spark クラスターに対して変換ロジックを対話形式でテストできます。 データ フロー クラスターのウォームアップには 5 分から 7 分かかります。 データ フローの開発を開始する前に、デバッグを有効にすることをお勧めします。
CRM_to_Customer
データ フローのオプションの選択が完了すると、Pipeline_transform_CRM
パイプラインは次の例のようになります。データ フローは次の例のようになります。
次に、
CRMAddress
ソースのデータ フローで次の設定を変更します。Data Lake Storage Gen2 から新しいデータセットを作成します。 DelimitedText 形式を使用します。 データセットに
DevRaw_CRM_Address
という名前を付けます。リンクされたサービスを
<DLZ-prefix>devraw
に接続します。Data\CRM\SalesLTAddress.csv
ファイルをソースとして選択します。
ペアになっている
CustAddress
シンクのデータ フローで次の設定を変更します。DevEncur_Cust_Address
という名前の新しいデータセットを作成します。シンクとして
<DLZ-prefix>devencur
で Data\Customer フォルダーを選択します。[Settings\Output to single file](単一ファイルへの設定/出力) で、ファイルを [Address.parquet] に変換します。
データ フロー構成の残りの部分では、コンポーネントごとに次の表の情報を使用します。 CRMAddress
と CustAddress
は、最初の 2 行であることに注意してください。 これらは他のオブジェクトの例として使用します。
次の表のいずれにも含まれていない項目は、RemovePasswords
のスキーマ修飾子です。 上のスクリーンショットは、この項目が CRMCustomer
と CustCustomer
の間で変化することを示しています。 このスキーマ修飾子を追加するには、[設定の選択] に移動し、[PasswordHash] と [PasswordSalt] を削除します。
CRMCustomer
は、.crv ファイルから 15 列のスキーマを返します。 CustCustomer
は、スキーマ修飾子が 2 つのパスワード列を削除した後、13 列のみを書き込みます。
完全なテーブル
名前 | オブジェクトの種類 | データセットの名前 | データ ストア | 形式の種類 | リンクされたサービス | ファイルまたはフォルダー |
---|---|---|---|---|---|---|
CRMAddress |
source | DevRaw_CRM_Address |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\CRM\SalesLTAddress.csv |
CustAddress |
sink | DevEncur_Cust_Address |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Customer\Address.parquet |
CRMCustomer |
source | DevRaw_CRM_Customer |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\CRM\SalesLTCustomer.csv |
CustCustomer |
sink | DevEncur_Cust_Customer |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Customer\Customer.parquet |
CRMCustomerAddress |
source | DevRaw_CRM_CustomerAddress |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\CRM\SalesLTCustomerAddress.csv |
CustCustomerAddress |
sink | DevEncur_Cust_CustomerAddress |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Customer\CustomerAddress.parquet |
ERP から販売へのテーブル
次に、同様の手順を繰り返して Pipeline_transform_ERP
パイプラインを作成し、<DLZ-prefix>devraw
の Data\ERP フォルダー内の .csv ファイルを変換する ERP_to_Sales
データ フローを作成し、変換されたファイルを <DLZ-prefix>devencur
の Data\Sales フォルダーにコピーします。
次の表では、ERP_to_Sales
データ フローで作成するオブジェクトと、各オブジェクトに対して変更する必要がある設定を示します。 各 .csv ファイルは .parquet シンクにマップされます。
名前 | オブジェクトの種類 | データセットの名前 | データ ストア | 形式の種類 | リンクされたサービス | ファイルまたはフォルダー |
---|---|---|---|---|---|---|
ERPProduct |
source | DevRaw_ERP_Product |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\ERP\SalesLTProduct.csv |
SalesProduct |
sink | DevEncur_Sales_Product |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Sales\Product.parquet |
ERPProductCategory |
source | DevRaw_ERP_ProductCategory |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\ERP\SalesLTProductCategory.csv |
SalesProductCategory |
sink | DevEncur_Sales_ProductCategory |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Sales\ProductCategory.parquet |
ERPProductDescription |
source | DevRaw_ERP_ProductDescription |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\ERP\SalesLTProductDescription.csv |
SalesProductDescription |
sink | DevEncur_Sales_ProductDescription |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Sales\ProductDescription.parquet |
ERPProductModel |
source | DevRaw_ERP_ProductModel |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\ERP\SalesLTProductModel.csv |
SalesProductModel |
sink | DevEncur_Sales_ProductModel |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Sales\ProductModel.parquet |
ERPProductModelProductDescription |
source | DevRaw_ERP_ProductModelProductDescription |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\ERP\SalesLTProductModelProductDescription.csv |
SalesProductModelProductDescription |
sink | DevEncur_Sales_ProductModelProductDescription |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Sales\ProductModelProductDescription.parquet |
ERPProductSalesOrderDetail |
source | DevRaw_ERP_ProductSalesOrderDetail |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\ERP\SalesLTProductSalesOrderDetail.csv |
SalesProductSalesOrderDetail |
sink | DevEncur_Sales_ProductSalesOrderDetail |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Sales\ProductSalesOrderDetail.parquet |
ERPProductSalesOrderHeader |
source | DevRaw_ERP_ProductSalesOrderHeader |
Azure Data Lake Storage Gen2 | DelimitedText | devraw |
Data\ERP\SalesLTProductSalesOrderHeader.csv |
SalesProductSalesOrderHeader |
sink | DevEncur_Sales_ProductSalesOrderHeader |
Azure Data Lake Storage Gen2 | Parquet | devencur |
Data\Sales\ProductSalesOrderHeader.parquet |