Share via


將 Azure Synapse Analytics 工作區從一個區域移至另一個區域

本文是逐步指南,說明如何將 Azure Synapse Analytics 工作區從一個 Azure 區域移至另一個區域。

注意

本文中的步驟實際上不會移動工作區。 這些步驟說明如何使用來自來源區域的 Azure Synapse Analytics 專用 SQL 集區備份和成品,在新區域中建立新的工作區。

必要條件

  • 將來源區域 Azure Synapse 工作區與 Azure DevOps 或 GitHub 整合。 如需詳細資訊,請參閱 Synapse Studio 中的原始檔控制。
  • 在執行 腳本的伺服器上安裝 Azure PowerShell Azure CLI 模組。
  • 確定所有相依服務,例如,Azure 機器學習、Azure 儲存體和 Azure Private Link 中樞,都會在目的地區域中重新建立,或如果服務支援區域移動,則移至目的地區域。
  • 將Azure 儲存體移至不同的區域。 如需詳細資訊,請參閱 將Azure 儲存體帳戶移至另一個區域
  • 確定來源區域和目的地區域工作區中的專用 SQL 集區名稱和 Apache Spark 集區名稱相同。

區域移動的案例

  • 新的合規性需求 :組織需要將資料和服務放在與新合規性需求的相同區域中。
  • 新 Azure 區域 的可用性:有新的 Azure 區域可供使用,且有專案或商務需求,將工作區和其他 Azure 資源移至新可用的 Azure 區域。
  • 選取 錯誤的區域:建立 Azure 資源時選取了錯誤的區域。

將 Azure Synapse 工作區移至另一個區域的步驟

將 Azure Synapse 工作區從一個區域移至另一個區域是多步驟程式。 以下是高階步驟:

  1. 在目的地區域中建立新的 Azure Synapse 工作區,以及具有來源區域工作區中相同組態的 Spark 集區。
  2. 使用還原點或異地備份,將專用 SQL 集區還原至目的地區域。
  3. 在新的邏輯 SQL Server 上重新建立所有必要的登入。
  4. 建立無伺服器 SQL 集區和 Spark 集區資料庫和物件。
  5. 如果您使用 Azure DevOps 發行管線來部署成品,請將 Azure DevOps 服務主體新增至 Azure Synapse 角色型存取控制 (RBAC) Synapse Artifact Publisher 角色。
  6. 將程式碼成品 (SQL 腳本、Notebooks)、連結服務、管線、資料集、Spark 作業定義觸發程式和認證從 Azure DevOps 發行管線部署到目的地區域 Azure Synapse 工作區。
  7. 將 Microsoft Entra 使用者或群組新增至 Azure Synapse RBAC 角色。 如果您使用受控識別進行驗證,請將儲存體 Blob 參與者存取權授與Azure 儲存體和 Azure 金鑰保存庫上的系統指派受控識別 (SA-MI)。
  8. 將儲存體 Blob 讀取者或儲存體 Blob 參與者角色授與預設連結儲存體或具有使用無伺服器 SQL 集區查詢資料的儲存體帳戶上所需的 Microsoft Entra 使用者。
  9. 重新建立自我裝載整合執行時間 (SHIR)。
  10. 在目標 Azure Synapse 工作區中手動上傳所有必要的程式庫和 jar。
  11. 如果工作區部署在受控虛擬網路中,請建立所有受控私人端點。
  12. 在目的地區域上測試新的工作區,並更新指向來源區域工作區的任何 DNS 專案。
  13. 如果在來源工作區上建立私人端點連線,請在目的地區域工作區上建立一個端點連線。
  14. 您可以在徹底測試工作區之後,刪除來源區域中的工作區,並將所有連線路由傳送至目的地區域工作區。

準備

步驟 1:在目的地區域中建立 Azure Synapse 工作區

在本節中,您將使用 Azure PowerShell、Azure CLI 和Azure 入口網站來建立 Azure Synapse 工作區。 您將建立資源群組以及 Azure Data Lake 儲存體 Gen2 帳戶,作為 PowerShell 腳本和 CLI 腳本的一部分,作為工作區的預設儲存體。 如果您想要將部署程式自動化,請從 DevOps 發行管線叫用這些 PowerShell 或 CLI 腳本。

Azure 入口網站

若要從Azure 入口網站建立工作區,請遵循快速入門:建立 Synapse 工作區 中的 步驟。

Azure PowerShell

下列腳本會使用 New-AzResourceGroup 和 New-AzSynapseWorkspace Cmdlet 來建立資源群組和 Azure Synapse 工作區。

建立資源群組

$storageAccountName= "<YourDefaultStorageAccountName>"
$resourceGroupName="<YourResourceGroupName>"
$regionName="<YourTargetRegionName>"
$containerName="<YourFileSystemName>" # This is the file system name
$workspaceName="<YourTargetRegionWorkspaceName>"

$sourcRegionWSName="<Your source region workspace name>"
$sourceRegionRGName="<YourSourceRegionResourceGroupName>"
$sqlUserName="<SQLUserName>"
$sqlPassword="<SQLStrongPassword>"

$sqlPoolName ="<YourTargetSQLPoolName>" #Both Source and target workspace SQL pool name will be same
$sparkPoolName ="<YourTargetWorkspaceSparkPoolName>"
$sparkVersion="2.4"

New-AzResourceGroup -Name $resourceGroupName -Location $regionName

建立 Data Lake Storage Gen2 帳戶

#If the Storage account is already created, then you can skip this step.
New-AzStorageAccount -ResourceGroupName $resourceGroupName `
  -Name $storageAccountName `
  -Location  $regionName `
  -SkuName Standard_LRS `
  -Kind StorageV2 `
  -EnableHierarchicalNamespace $true 

建立 Azure Synapse 工作區

$password = ConvertTo-SecureString $sqlPassword -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ($sqlUserName, $password)

New-AzSynapseWorkspace -ResourceGroupName $resourceGroupName `
                        -Name $workspaceName -Location $regionName `
                        -DefaultDataLakeStorageAccountName $storageAccountName `
                        -DefaultDataLakeStorageFilesystem $containerName `
                        -SqlAdministratorLoginCredential $creds 

如果您想要使用受控虛擬網絡建立工作區,請將額外的參數 「ManagedVirtualNetwork」 新增至腳本。 若要深入瞭解可用的選項,請參閱 受控虛擬網絡組態

#Creating a managed virtual network configuration
$config = New-AzSynapseManagedVirtualNetworkConfig -PreventDataExfiltration -AllowedAadTenantIdsForLinking ContosoTenantId 

#Creating an Azure Synapse workspace
New-AzSynapseWorkspace -ResourceGroupName $resourceGroupName `
                        -Name $workspaceName -Location $regionName `
                        -DefaultDataLakeStorageAccountName $storageAccountName `
                        -DefaultDataLakeStorageFilesystem $containerName `
                        -SqlAdministratorLoginCredential $creds `
                              -ManagedVirtualNetwork $config

Azure CLI

此 Azure CLI 腳本會建立資源群組、Data Lake 儲存體 Gen2 帳戶和檔案系統。 然後它會建立 Azure Synapse 工作區。

建立資源群組

az group create --name $resourceGroupName --location $regionName

建立 Data Lake Storage Gen2 帳戶

下列腳本會建立儲存體帳戶和容器。

# Checking if name is not used only then creates it.
$StorageAccountNameAvailable=(az storage account check-name --name $storageAccountName --subscription $subscriptionId | ConvertFrom-Json).nameAvailable

if($StorageAccountNameAvailable)
{
Write-Host "Storage account Name is available to be used...creating storage account"

#Creating a Data Lake Storage Gen2 account
$storgeAccountProvisionStatus=az storage account create `
  --name $storageAccountName `
  --resource-group $resourceGroupName `
  --location $regionName `
  --sku Standard_GRS `
  --kind StorageV2 `
  --enable-hierarchical-namespace $true

($storgeAccountProvisionStatus| ConvertFrom-Json).provisioningState
}
else
{
    Write-Host "Storage account Name is NOT available to be used...use another name --    exiting the script..."
    EXIT
}

#Creating a container in a Data Lake Storage Gen2 account

$key=(az storage account keys list -g $resourceGroupName -n $storageAccountName|ConvertFrom-Json)[0].value

$fileShareStatus=(az storage share create --account-name $storageAccountName --name $containerName --account-key $key)

if(($fileShareStatus|ConvertFrom-Json).created -eq "True")
{
      Write-Host f"Successfully created the fileshare - '$containerName'"
}

建立 Azure Synapse 工作區

az synapse workspace create `
  --name $workspaceName `
  --resource-group $resourceGroupName `
  --storage-account $storageAccountName `
  --file-system $containerName `
  --sql-admin-login-user $sqlUserName `
  --sql-admin-login-password $sqlPassword `
  --location $regionName

若要啟用受控虛擬網路,請在上述腳本中包含 參數 --enable-managed-virtual-network 。 如需更多選項,請參閱 工作區受控虛擬網路

az synapse workspace create `
  --name $workspaceName `
  --resource-group $resourceGroupName `
  --storage-account $storageAccountName `
  --file-system $FileShareName `
  --sql-admin-login-user $sqlUserName `
  --sql-admin-login-password $sqlPassword `
  --location $regionName `
  --enable-managed-virtual-network true `
  --allowed-tenant-ids "Contoso"

步驟 2:建立 Azure Synapse 工作區防火牆規則

建立工作區之後,新增工作區的防火牆規則。 將 IP 限制為特定範圍。 您可以從Azure 入口網站或使用 PowerShell 或 CLI 來新增防火牆。

Azure 入口網站

選取防火牆選項,並新增 IP 位址範圍,如下列螢幕擷取畫面所示。

Azure PowerShell

執行下列 PowerShell 命令,藉由指定開始和結束 IP 位址來新增防火牆規則。 根據您的需求更新 IP 位址範圍。

$WorkspaceWeb = (Get-AzSynapseWorkspace -Name $workspaceName -ResourceGroupName $resourceGroup).ConnectivityEndpoints.Web
$WorkspaceDev = (Get-AzSynapseWorkspace -Name $workspaceName -ResourceGroupName $resourceGroup).ConnectivityEndpoints.Dev

# Adding firewall rules
$FirewallParams = @{
  WorkspaceName = $workspaceName
  Name = 'Allow Client IP'
  ResourceGroupName = $resourceGroup
  StartIpAddress = "0.0.0.0"
  EndIpAddress = "255.255.255.255"
}
New-AzSynapseFirewallRule @FirewallParams

執行下列腳本來更新工作區的受控識別 SQL 控制項設定:

Set-AzSynapseManagedIdentitySqlControlSetting -WorkspaceName $workspaceName -Enabled $true 

Azure CLI

az synapse workspace firewall-rule create --name allowAll --workspace-name $workspaceName  `
--resource-group $resourceGroupName --start-ip-address 0.0.0.0 --end-ip-address 255.255.255.255

執行下列腳本來更新工作區的受控識別 SQL 控制項設定:

az synapse workspace managed-identity grant-sql-access `
--workspace-name $workspaceName --resource-group $resourceGroupName

步驟 3:建立 Apache Spark 集區

使用來源區域工作區中使用的相同組態建立 Spark 集區。

Azure 入口網站

若要從Azure 入口網站建立 Spark 集區,請參閱 快速入門:使用 Azure 入口網站 建立新的無伺服器 Apache Spark 集區。

您也可以遵循快速入門:使用 Synapse Studio 建立無伺服器 Apache Spark 集區中的 步驟,從 Synapse Studio 建立 Spark 集區。

Azure PowerShell

下列腳本會建立具有兩個背景工作角色和一個驅動程式節點的 Spark 集區,以及具有 4 個核心和 32 GB RAM 的小型叢集大小。 更新值以符合您的來源區域工作區 Spark 集區。

#Creating a Spark pool with 3 nodes (2 worker + 1 driver) and a small cluster size with 4 cores and 32 GB RAM. 
New-AzSynapseSparkPool `
    -WorkspaceName  $workspaceName `
    -Name $sparkPoolName `
    -NodeCount 3 `
    -SparkVersion $sparkVersion `
    -NodeSize Small

Azure CLI

az synapse spark pool create --name $sparkPoolName --workspace-name $workspaceName --resource-group $resourceGroupName `
--spark-version $sparkVersion --node-count 3 --node-size small

移動

步驟 4:還原專用 SQL 集區

從異地備援備份還原

若要使用 Azure 入口網站 和 PowerShell 從異地備份還原專用 SQL 集區,請參閱 在 Azure Synapse Analytics 中異地還原專用 SQL 集區。

使用來源區域工作區專用 SQL 集區的還原點進行還原

使用來源區域工作區專用 SQL 集區的還原點,將專用 SQL 集區還原至目的地區域工作區。 您可以使用 Azure 入口網站、Synapse Studio 或 PowerShell 從還原點還原。 如果無法存取來源區域,您無法使用此選項來還原。

Synapse Studio

您可以從 Synapse Studio 使用 還原點,從訂用帳戶中的任何工作區還原專用 SQL 集區 。 當您建立專用 SQL 集區時,請在 [其他設定 ] 下 選取 [還原點 ],然後選取工作區,如下列螢幕擷取畫面所示。 如果您建立了使用者定義的還原點,請使用它來還原 SQL 集區。 否則,您可以選取最新的自動還原點。

Restoring SQL pool

Azure PowerShell

執行下列 PowerShell 腳本來還原工作區。 此腳本會使用來源工作區專用 SQL 集區的最新還原點,在目標工作區上還原 SQL 集區。 執行腳本之前,請先將效能等級從 DW100c 更新為所需的值。

重要

專用 SQL 集區名稱應該在兩個工作區上相同。

取得還原點:

$restorePoint=Get-AzSynapseSqlPoolRestorePoint -WorkspaceName $sourceRegionWSName -Name $sqlPoolName|Sort-Object  -Property RestorePointCreationDate -Descending `
                                                                                         | SELECT RestorePointCreationDate -ExpandProperty  RestorePointCreationDate -First 1

將 Azure Synapse SQL 集區資源識別碼轉換為 SQL 資料庫識別碼,因為目前命令只接受 SQL 資料庫識別碼。 例如:/subscriptions/<SubscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.Sql/servers/<WorkspaceName>/databases/<DatabaseName>

$pool = Get-AzSynapseSqlPool -ResourceGroupName $sourceRegionRGName -WorkspaceName $sourcRegionWSName -Name $sqlPoolName
$databaseId = $pool.Id `
    -replace "Microsoft.Synapse", "Microsoft.Sql" `
    -replace "workspaces", "servers" `
    -replace "sqlPools", "databases" 
 

$restoredPool = Restore-AzSynapseSqlPool -FromRestorePoint `
                                         -RestorePoint $restorePoint `
                                         -TargetSqlPoolName $sqlPoolName `
                                         -ResourceGroupName $resourceGroupName `
                                         -WorkspaceName $workspaceName `
                                         -ResourceId $databaseId `
                                         -PerformanceLevel DW100c -AsJob

下列會追蹤還原作業的狀態:

Get-Job | Where-Object Command -In ("Restore-AzSynapseSqlPool") | `
Select-Object Id,Command,JobStateInfo,PSBeginTime,PSEndTime,PSJobTypeName,Error |Format-Table

還原專用 SQL 集區之後,請在 Azure Synapse 中建立所有 SQL 登入。 若要建立所有登入,請遵循建立登入 中的 步驟。

步驟 5:建立無伺服器 SQL 集區、Spark 集區資料庫和物件

您無法備份和還原無伺服器 SQL 集區資料庫和 Spark 集區。 作為可能的因應措施,您可以:

  1. 建立筆記本和 SQL 腳本,其程式碼可重新建立所有必要的 Spark 集區、無伺服器 SQL 集區資料庫、資料表、角色,以及具有所有角色指派的使用者。 將這些成品簽入 Azure DevOps 或 GitHub。
  2. 如果儲存體帳戶名稱已變更,請確定程式碼成品指向正確的儲存體帳戶名稱。
  3. 建立管線,以在特定序列中叫用這些程式碼成品。 在目的地區域工作區上執行這些管線時,將會在目的地區域工作區上建立 Spark SQL 資料庫、無伺服器 SQL 集區資料庫、外部資料源、檢視、角色和使用者和許可權。
  4. 當您整合來源區域工作區與 Azure DevOps 時,這些程式碼成品將會是存放庫的一部分。 稍後,您可以使用步驟 6 中所述的 DevOps 發行管線,將這些程式碼成品部署到目的地區域工作區。
  5. 在目的地區域工作區上,手動觸發這些管線。

步驟 6:使用 CI/CD 部署成品和管線

若要瞭解如何整合 Azure Synapse 工作區與 Azure DevOps 或 GitHub,以及如何將成品部署至目的地區域工作區,請遵循 Azure Synapse 工作區 的持續整合和持續傳遞 (CI/CD) 中的 步驟。

在工作區與 Azure DevOps 整合之後,您將找到名稱為 workspace_publish的分支。 此分支包含工作區範本,其中包含筆記本、SQL 腳本、資料集、連結服務、管線、觸發程式和 Spark 作業定義等成品的定義。

Azure DevOps 存放庫的這個螢幕擷取畫面顯示成品和其他元件的工作區範本檔案。

Screenshot that shows workspace-publish.

您可以使用工作區範本,使用 Azure DevOps 發行管線將成品和管線部署至工作區,如下列螢幕擷取畫面所示。

Screenshot that shows synapse-release-pipeline.

如果工作區未與 GitHub 或 Azure DevOps 整合,您必須在目的地區域工作區上手動重新建立或撰寫自訂 PowerShell 或 Azure CLI 腳本,以部署所有成品、管線、連結服務、認證、觸發程式和 Spark 定義。

注意

此程式需要您持續更新管線和程式碼成品,以包含對 Spark 和無伺服器 SQL 集區、物件和角色所做的任何變更,以及來源區域工作區中的角色。

步驟 7:建立共用整合執行時間

若要建立 SHIR,請遵循建立及設定自我裝載整合執行時間 中的 步驟。

步驟 8:將 Azure 角色指派給受控識別

在預設連結的 Data Lake 儲存體 Gen2 帳戶上,指派 Storage Blob Contributor 新工作區的受控識別存取權。 此外,在 SA-MI 用於驗證的其他儲存體帳戶上指派存取權。 為所有必要的儲存體帳戶指派 Storage Blob ContributorStorage Blob Reader 存取 Microsoft Entra 使用者和群組。

Azure 入口網站

請遵循將許可權授與工作區受控識別 中的 步驟,將儲存體 Blob 資料參與者角色指派給工作區的受控識別。

Azure PowerShell

將儲存體 Blob 資料參與者角色指派給工作區的受控識別。

將儲存體 Blob 資料參與者新增至儲存體帳戶上的工作區受控識別。 New-AzRoleAssignment訊息的執行錯誤 Exception of type 'Microsoft.Rest.Azure.CloudException' was thrown. ,但它會在儲存體帳戶上建立必要的許可權。

$workSpaceIdentityObjectID= (Get-AzSynapseWorkspace -ResourceGroupName $resourceGroupName -Name $workspaceName).Identity.PrincipalId 
$scope = "/subscriptions/$($subscriptionId)/resourceGroups/$($resourceGroupName)/providers/Microsoft.Storage/storageAccounts/$($storageAccountName)"

$roleAssignedforManagedIdentity=New-AzRoleAssignment -ObjectId $workSpaceIdentityObjectID `
    -RoleDefinitionName "Storage Blob Data Contributor" `
    -Scope $scope -ErrorAction SilentlyContinue

Azure CLI

取得工作區受控識別的角色名稱、資源識別碼和主體識別碼,然後將儲存體 Blob 資料參與者 Azure 角色新增至 SA-MI。

# Getting Role name
$roleName =az role definition list --query "[?contains(roleName, 'Storage Blob Data Contributor')].{roleName:roleName}" --output tsv

#Getting resource id for storage account
$scope= (az storage account show --name $storageAccountName|ConvertFrom-Json).id

#Getting principal ID for workspace managed identity
$workSpaceIdentityObjectID=(az synapse workspace show --name $workspaceName --resource-group $resourceGroupName|ConvertFrom-Json).Identity.PrincipalId 
                    
# Adding Storage Blob Data Contributor Azure role to SA-MI
az role assignment create --assignee $workSpaceIdentityObjectID `
--role $roleName `
--scope $scope

步驟 9:指派 Azure Synapse RBAC 角色

使用個別角色和許可權,新增所有需要存取目標工作區的使用者。 下列 PowerShell 和 CLI 腳本會將 Microsoft Entra 使用者新增至目的地區域工作區中的 Synapse 管理員istrator 角色。

若要取得所有 Azure Synapse RBAC 角色名稱,請參閱 Azure Synapse RBAC 角色

Synapse Studio

若要從 Synapse Studio 新增或刪除 Azure Synapse RBAC 指派,請遵循如何在 Synapse Studio 中管理 Azure Synapse RBAC 角色指派中的 步驟。

Azure PowerShell

下列 PowerShell 腳本會將 Synapse 管理員istrator 角色指派新增至 Microsoft Entra 使用者或群組。 您可以使用 -RoleDefinitionId 而非 -RoleDefinitionName 搭配下列命令,將使用者新增至工作區:

New-AzSynapseRoleAssignment `
   -WorkspaceName $workspaceName  `
   -RoleDefinitionName "Synapse Administrator" `
   -ObjectId 1c02d2a6-ed3d-46ec-b578-6f36da5819c6

Get-AzSynapseRoleAssignment -WorkspaceName $workspaceName  

若要在來源區域工作區中取得 ObjectIds 和 RoleId,請執行 Get-AzSynapseRoleAssignment 命令。 將相同的 Azure Synapse RBAC 角色指派給目的地區域工作區中的 Microsoft Entra 使用者或群組。

除了使用 -ObjectId 做為 參數,您也可以使用 -SignInName ,您可以在其中提供使用者的電子郵件地址或使用者主體名稱。 若要深入瞭解可用的選項,請參閱 Azure Synapse RBAC - PowerShell Cmdlet

Azure CLI

取得使用者的物件識別碼,並將必要的 Azure Synapse RBAC 許可權指派給 Microsoft Entra 使用者。 您可以為 參數提供使用者的電子郵件地址 ( username@contoso.com )。 --assignee

az synapse role assignment create `
--workspace-name $workspaceName `
--role "Synapse Administrator" --assignee adasdasdd42-0000-000-xxx-xxxxxxx

az synapse role assignment create `
--workspace-name $workspaceName `
--role "Synapse Contributor" --assignee "user1@contoso.com"

若要深入瞭解可用的選項,請參閱 Azure Synapse RBAC - CLI

步驟 10:上傳工作區套件

將所有必要的工作區套件上傳至新的工作區。 若要將上傳工作區套件的程式自動化,請參閱 Microsoft Azure Synapse Analytics Artifacts 用戶端程式庫

步驟 11:許可權

若要設定目的地區域的 Azure Synapse 工作區存取控制,請遵循如何設定 Azure Synapse 工作區 的存取控制中的 步驟。

步驟 12:建立受控私人端點

若要從目的地區域工作區中的來源區域工作區重新建立受控私人端點,請參閱 建立資料來源 的受控私人端點。

捨棄

如果您想要捨棄目的地區域工作區,請刪除目的地區域工作區。 若要這樣做,請從入口網站中的儀表板移至資源群組,然後選取工作區,然後選取 [資源群組] 頁面頂端的 [刪除]。

清理

若要認可變更並完成工作區的移動,請在測試目的地區域中的工作區之後,刪除來源區域工作區。 若要這樣做,請移至入口網站中儀表板中具有來源區域工作區的資源群組,然後選取工作區,然後選取 [資源群組] 頁面頂端的 [刪除]。

下一步