マネージド プライベート エンドポイントを作成して使用する
Microsoft Fabric ワークスペースに対する管理者アクセス許可を持つユーザーは、ワークスペース設定を使用して、Fabric ポータルからマネージド プライベート エンドポイントを作成、表示、および削除できます。
ユーザーは、ワークスペース設定の [ネットワーク セキュリティ] セクションから、マネージド プライベート エンドポイントの状態と承認プロセスを監視することもできます。
ユーザーは、Fabric Spark ワークロードのプライベート エンドポイント名を使用してデータ ソースにアクセスできます。
マネージド プライベート エンドポイントを作成する
Fabric ワークスペースで、ワークスペースの設定に移動し、[ネットワーク セキュリティ] タブを選択し、[マネージド プライベート エンドポイント] セクションで [作成] オプションを選択します。
[マネージド プライベート エンドポイントの作成] ダイアログが開きます。
プライベート エンドポイントの名前を指定し、Azure リソースのリソース識別子をコピーします。 リソース識別子は、Azure portal ページの [プロパティ] タブにあります。
Note
完全修飾ドメイン名 (FQDN) を使用したマネージド プライベート エンドポイントの作成はサポートされていません。
完了したら、 [作成] を選択します。
マネージド プライベート エンドポイントがプロビジョニングされると、アクティブ化の状態が [成功] に 変わります。
さらに、プライベート エンドポイント アクセスの要求がデータ ソースに送信されます。 データ ソース管理者は、Azure portal のリソース ページでデータ ソースに関する通知を受け取ります。 そこで、要求メッセージと共に保留中のアクセス要求が表示されます。
例として SQL Server を使用すると、ユーザーは Azure portal に移動し、"SQL Server" リソースを検索できます。
[リソース] ページで、ナビゲーション メニューから [ネットワーク] を選択し、[プライベート アクセス] タブを選択します。
データ ソース管理者は、アクティブなプライベート エンドポイント接続と新しい接続要求を表示できる必要があります。
管理者は、業務上の正当な理由を提供して、承認または拒否できます。
データ ソース管理者によって要求が承認または拒否されると、更新時に [Fabric ワークスペースの設定] ページで状態が更新されます。
状態が承認済みに変更されると、エンドポイントをノートブックまたは Spark ジョブ定義で使用して、Fabric ワークスペースからデータ ソースに格納されているデータにアクセスできます。
Fabric でマネージド プライベート エンドポイントを使用する
Microsoft Fabric ノートブックでは、データ探索と処理のためにマネージド プライベート エンドポイントを使用して、セキュリティで保護されたネットワークの背後にあるデータ ソースとのシームレスな対話をサポートします。 ノートブック内では、ユーザーはさまざまなファイル形式で保護されたデータ ソースからデータをすばやく読み取る (そしてデータをレイクハウスに書き戻す) ことができます。
このガイドでは、マネージド プライベート エンドポイントを介して SQL DB などのデータ ソースからデータにアクセスするための独自のノートブックの使用を開始するのに役立つコード サンプルを提供します。
前提条件
データ ソースにアクセスします。 この例では、Azure SQL Server と Azure SQL データベースを確認します。
Microsoft Fabric と Azure portal にサインインします。
Azure portal で Azure SQL Server のリソース ページに移動し、[プロパティ] メニューを選択します。 Microsoft Fabric から接続する SQL Server のリソース ID をコピーします。
「マネージド プライベート エンドポイントを作成する」に記載されている手順を使用して、Fabric Network のセキュリティの設定ページからマネージド プライベート エンドポイントを作成します。
SQL サーバーのデータ ソース管理者が新しいプライベート エンドポイント接続要求を承認すると、新しく作成されたマネージド プライベート エンドポイントを使用できるようになります。
ノートブックからデータ ソースに接続する
Microsoft Fabric ポータルにサインインします。
ホーム ページの左側にあるエクスペリエンス スイッチャーを使用して、[開発] エクスペリエンスに切り替えます。
目的のワークスペースに移動するか、必要に応じて新しいワークスペースを作成します。
ノートブックを作成するには、ワークスペースで [新しい項目] を選択し、[ノートブック] を選択します。
これで、ノートブックで SQL データベースの名前とその接続プロパティを指定することで、データベース内のテーブルを読み取り、Microsoft Fabric のレイクハウスに書き込むよう設定されているマネージド プライベート エンドポイント接続を介して接続できます。
次の PySpark コードは、SQL Databaseへの接続方法を示しています。
serverName = "<server_name>.database.windows.net"
database = "<database_name>"
dbPort = 1433
dbUserName = "<username>"
dbPassword = “<db password> or reference based on Keyvault>”
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Example") \
.config("spark.jars.packages", "com.microsoft.azure:azure-sqldb-spark:1.0.2") \
.config("spark.sql.catalogImplementation", "com.microsoft.azure.synapse.spark") \
.config("spark.sql.catalog.testDB", "com.microsoft.azure.synapse.spark") \
.config("spark.sql.catalog.testDB.spark.synapse.linkedServiceName", "AzureSqlDatabase") \ .config("spark.sql.catalog.testDB.spark.synapse.linkedServiceName.connectionString", f"jdbc:sqlserver://{serverName}:{dbPort};database={database};user={dbUserName};password={dbPassword}") \ .getOrCreate()
jdbcURL = "jdbc:sqlserver://{0}:{1};database={2}".format(serverName,dbPort,database)
connection = {"user":dbUserName,"password":dbPassword,"driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"}
df = spark.read.jdbc(url=jdbcURL, table = "dbo.Employee", properties=connection)
df.show()
display(df)
# Write the dataframe as a delta table in your lakehouse
df.write.mode("overwrite").format("delta").saveAsTable("Employee")
# You can also specify a custom path for the table location
# df.write.mode("overwrite").format("delta").option("path", "abfss://yourlakehouse.dfs.core.windows.net/Employee").saveAsTable("Employee")
接続が確立されたので、次の手順では、SQL Database でテーブルを読み取るデータ フレームを作成します。
サポートされるデータ ソース
Microsoft Fabric では、マネージド プライベート エンドポイントを使用して接続するための 26 を超えるデータ ソースがサポートされています。 ユーザーはリソース識別子を指定する必要があります。リソース識別子は、Azure portal のデータ ソースの [プロパティ] 設定ページにあります。 次の表に示すように、リソース ID の形式に従っていることを確認します。
サービス | リソース ID の形式 |
---|---|
Cognitive Services | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.CognitiveServices/accounts/{resource-name} |
Azure Databricks | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Databricks/workspaces/{workspace-name} |
Azure Database for MariaDB | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DBforMariaDB/servers/{server-name} |
Azure Database for MySQL | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DBforMySQL/servers/{server-name} |
Azure Database for PostgreSQL | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DBforPostgreSQL/flexibleServers/{server-name} |
Azure Cosmos DB for MongoDB | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DocumentDB/databaseAccounts/{account-name} |
NoSQL 用 Azure Cosmos DB | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DocumentDB/databaseAccounts/{account-name} |
Azure Monitor Private Link スコープ | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Insights/privateLinkScopes/{scope-name} |
Azure Key Vault | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{vault-name} |
Azure Data Explorer (Kusto) | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Kusto/clusters/{cluster-name} |
Azure Machine Learning | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.MachineLearningServices/workspaces/{workspace-name} |
Microsoft Purview | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Purview/accounts/{account-name} |
Azure Search | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Search/searchServices/{service-name} |
Azure SQL データベース | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Sql/servers/{server-name} |
Azure SQL Database (Azure SQL Managed Instance) | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Sql/managedInstances/{instance-name} |
Azure Blob Storage | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name} |
Azure Data Lake Storage Gen2 | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name} |
Azure File Storage | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name} |
Azure Queue Storage | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name} |
Azure Table Storage | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name} |
Azure Synapse Analytics | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Synapse/workspaces/{workspace-name} |
Azure Synapse Analytics (Artifacts) | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Synapse/workspaces/{workspace-name} |
Azure Functions | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{function-app-name} |
Azure Event Hubs | /subscriptions/{subscription-id}/resourcegroups/{resource-group-name}/providers/Microsoft.EventHub/namespaces/{namespace-name} |
Azure IoT Hub | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Devices/IotHubs/{iothub-name} |