관리형 프라이빗 엔드포인트 만들기 및 사용
Microsoft Fabric 작업 영역에 대한 관리자 권한이 있는 사용자는 Fabric 포털에서 작업 영역 설정을 통해 관리형 프라이빗 엔드포인트를 만들고, 조회하며, 삭제할 수 있습니다.
사용자는 작업 영역 설정의 네트워크 보안 섹션에서 관리형 프라이빗 엔드포인트의 상태 및 승인 프로세스를 모니터링할 수도 있습니다.
사용자는 Fabric Spark 워크로드에서 프라이빗 엔드포인트 이름을 사용하여 데이터 원본에 액세스할 수 있습니다.
필수 조건
Microsoft.Network 리소스 공급자를 Azure 구독에 등록해야 합니다.
관리형 프라이빗 엔드포인트 만들기
패브릭 작업 영역에서 작업 영역 설정으로 이동하고 네트워크 보안 탭을 선택한 다음, 관리형 프라이빗 엔드포인트 섹션에서 만들기 옵션을 선택합니다.
관리형 프라이빗 엔드포인트 만들기 대화 상자가 열립니다.
프라이빗 엔드포인트의 이름을 지정하고 Azure 리소스의 리소스 식별자에 복사합니다. 리소스 식별자는 Azure Portal 페이지의 속성 탭에서 찾을 수 있습니다.
참고 항목
FQDN(정규화된 도메인 이름)을 사용하여 관리형 프라이빗 엔드포인트를 만드는 방법은 지원되지 않습니다.
완료되면 만들기를 선택합니다.
관리형 프라이빗 엔드포인트가 프로비전되면 활성화 상태가 성공으로 변경됩니다.
또한 프라이빗 엔드포인트 액세스에 대한 요청은 데이터 원본으로 전송됩니다. 데이터 원본 관리자는 Azure Portal 리소스 페이지에서 데이터 원본에 대한 알림을 받습니다. 여기에는 요청 메시지와 함께 보류 중인 액세스 요청이 표시됩니다.
SQL Server를 예로 들어, 사용자가 Azure Portal로 이동하여 "SQL Server" 리소스를 검색할 수 있습니다.
리소스 페이지의 탐색 메뉴에서 네트워킹을 선택한 다음, 프라이빗 액세스 탭을 선택합니다.
데이터 원본 관리자는 활성 프라이빗 엔드포인트 연결 및 새 연결 요청을 볼 수 있어야 합니다.
관리자는 비즈니스 근거를 제공하여 승인 또는 거부할 수 있습니다.
데이터 원본 관리자가 요청을 승인하거나 거부하면 새로 고칠 때 Fabric 작업 영역 설정 페이지에서 상태가 업데이트됩니다.
상태가 승인됨으로 변경되면 엔드포인트를 Notebook 또는 Spark 작업 정의에서 사용하여 Fabric 작업 영역에서 데이터 원본에 저장된 데이터에 액세스할 수 있습니다.
Fabric에서 관리형 프라이빗 엔드포인트 사용
Microsoft Fabric Notebook은 데이터 탐색 및 처리를 위해 관리형 프라이빗 엔드포인트를 사용하여 보안 네트워크 뒤의 데이터 원본과 원활하게 상호 작용할 수 있도록 지원합니다. Notebook 내에서 사용자는 보호된 데이터 원본에서 데이터를 빠르게 읽고 다양한 파일 형식으로 레이크하우스에 데이터를 다시 쓸 수 있습니다.
이 가이드에서는 관리형 프라이빗 엔드포인트를 통해 SQL DB와 같은 데이터 원본의 데이터에 액세스하기 위해 자체 Notebook에서 시작하는 데 도움이 되는 코드 샘플을 제공합니다.
필수 조건
데이터 원본에 액세스합니다. 이 예제에서는 Azure SQL Server 및 Azure SQL 데이터베이스를 살펴봅니다.
Microsoft Fabric 및 Azure Portal에 로그인합니다.
Azure Portal에서 Azure SQL Server의 리소스 페이지로 이동하고 속성 메뉴를 선택합니다. Microsoft Fabric에서 연결하려는 SQL Server의 리소스 ID를 복사합니다.
관리형 프라이빗 엔드포인트 만들기에 나열된 단계를 사용하여 Fabric Network 보안 설정 페이지에서 관리형 프라이빗 엔드포인트를 만듭니다.
SQL Server의 데이터 원본 관리자가 새 프라이빗 엔드포인트 연결 요청을 승인하면 새로 만든 관리형 프라이빗 엔드포인트를 사용할 수 있습니다.
Notebook에서 데이터 원본에 연결
Microsoft Fabric 포털에 로그인합니다.
홈페이지 왼쪽에 있는 환경 전환기를 사용하여 개발 환경을 전환합니다.
원하는 작업 영역으로 이동하거나 필요한 경우 새 작업 영역을 만듭니다.
전자 필기장을 만들려면 작업 영역에서 새 항목을 선택하고 Notebook을 선택합니다.
이제 Notebook에서 SQL Database의 이름과 연결 속성을 지정하여 데이터베이스의 테이블을 읽고 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} |
Azure Cosmos DB for NoSQL | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.DocumentDB/databaseAccounts/{account-name} |
Azure Monitor Private Link Scopes | /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 Database | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Sql/servers/{server-name} |
Azure SQL 데이터베이스(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(아티팩트) | /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Synapse/workspaces/{workspace-name} |
Azure 기능 | /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} |