Share via


使用並存移轉功能將 App Service 環境 v2 移轉至 App Service 環境 v3

注意

本文所述的移轉功能是用於將 App Service 環境 v2 自動移轉至 App Service 環境 v3 的並存(不同子網)。

如果您要尋找就地移轉功能的資訊,請參閱使用就地移轉功能移轉至 App Service 環境 v3。 如果您要尋找手動移轉選項的相關資訊,請參閱手動移轉選項。 如需有助於決定適合您移轉選項的說明,請參閱移轉路徑決策樹。 如需 App Service 環境 v3 的詳細資訊,請參閱 App Service 環境 v3 概觀

您可以使用並存移轉功能,自動將 App Service 環境 v2 移轉至 App Service 環境 v3。 若要深入瞭解移轉程式,並查看您的 App Service 環境 目前是否支援移轉,請參閱並存移轉功能的概觀。

重要

建議您先將此功能用於開發環境,再移轉任何生產環境,以避免發生非預期的問題。 請使用頁面底部的按鈕,提供與本文或功能相關的任何意見反應。

必要條件

確保您了解移轉至 App Service 環境 v3 如何影響您的應用程式。 檢閱移轉流程,以了解流程時間軸,以及何時何處需要您參與。 另請檢閱常見問題集,其可回答您的一些問題。

確保您的虛擬網路、資源群組、資源或訂用帳戶上沒有任何鎖定。 鎖定會在移轉期間封鎖平台作業。

確保沒有任何 Azure 原則會封鎖移轉所需的動作,包括子網路修改和 Azure App Service 資源建立。 封鎖資源修改和建立的原則可能會導致移轉停滯或失敗。

由於 App Service 環境 v3 位於虛擬網路中的不同子網路中,因此您必須確定您的虛擬網路中有一個可用的子網路,才能滿足 App Service 環境 v3 的子網路需求。 您選取的子網路也必須能與現有 App Service 環境所在的子網路通訊。 請確定兩個子網路之間沒有任何通訊阻礙。 如果您沒有可用的子網路,請在移轉之前先建立一個子網路。 建立新的子網路可能會導致增加虛擬網路位址空間。 如需詳細資訊,請參閱建立虛擬網路和子網路

移轉期間會禁止調整規模,因此您應該在開始移轉之前將環境調整為所需的大小。 如果您需要在移轉之後調整環境,您可以在移轉完成後執行此動作。

請遵循此處所述的步驟,並依照撰寫的內容依序進行,因為您正在進行 Azure REST API 呼叫。 建議您使用 Azure CLI 進行這些 API 呼叫。 如需其他方法的相關資訊,請參閱 Azure REST API 參考

針對本指南, 請安裝 Azure CLI 或使用 Azure Cloud Shell ,並使用 Bash 殼層。

注意

建議您使用 Bash 殼層來執行本指南中提供的命令。 命令可能與 PowerShell 慣例和逸出字元不相容。

重要

在移轉期間,Azure 入口網站 可能會顯示 App Service 環境和應用程式的相關信息不正確。 請勿前往 Azure 入口網站 中的移轉體驗,因為該處無法使用並存移轉功能。 建議您使用 Azure CLI 來檢查移轉的狀態。 如果您有移轉或應用程式狀態的任何問題,請連絡支持人員。

1.選取新 App Service 環境 v3 要使用的子網路

在 App Service 環境 v3 中選取符合 App Service 環境 v3 子網路需求的子網路。 記下您選取的子網路名稱。 此子網路必須不同於您現有 App Service 環境所在的子網路。

2.取得您的 App Service 環境識別碼

執行下列命令來取得您的 App Service 環境識別碼,並將其儲存為環境變數。 將名稱和資源群組的預留位置取代為您所要移轉 App Service 環境的值。 如果您的虛擬網路和 App Service 環境位於相同的資源群組中,則 ASE_RGVNET_RG 會相同。

ASE_NAME=<Your-App-Service-Environment-name>
ASE_RG=<Your-ASE-Resource-Group>
VNET_RG=<Your-VNet-Resource-Group>
ASE_ID=$(az appservice ase show --name $ASE_NAME --resource-group $ASE_RG --query id --output tsv)

3.驗證是否支援移轉

下列命令會檢查是否支援您的 App Service 環境進行移轉。 如果您收到錯誤,或如果您的 App Service 環境處於狀況不良或暫停狀態,則目前無法移轉。 如需您可能會收到的潛在錯誤訊息描述,請參閱疑難排解一節。 如果您的環境不支援使用並存移轉功能進行移轉,或您想要移轉至 App Service 環境 v3 而不使用並存移轉功能,請參閱手動移轉選項。 此命令也會驗證您的 App Service 環境 是否位於支援的組建版本以進行移轉。 如果您的 App Service 環境 不在支援的組建版本上,您必須自行開始升級。 如需預先移轉升級的詳細資訊,請參閱使用 App Service 環境 的並存移轉功能來驗證是否支援移轉。

az rest --method post --uri "${ASE_ID}/NoDowntimeMigrate?phase=Validation&api-version=2022-03-01"

如果沒有錯誤,則支援您的移轉,而且您可以繼續進行下一個步驟。

如果您需要開始升級,將 App Service 環境 升級至支援的組建版本,請執行下列命令。 只有在驗證步驟失敗,並指示升級 App Service 環境 時,才執行此命令。

az rest --method post --uri "${ASE_ID}/NoDowntimeMigrate?phase=PreMigrationUpgrade&api-version=2022-03-01"

4.為新的 App Service 環境 v3 產生輸出IP位址

使用您區域和區域備援選取項目的下列詳細資料,建立名為 zoneredundancy.json 的檔案。

{
    "location":"<region>",    
    "Properties": {
        "zoneRedundant": "<true/false>"
    }
}

如果您的現有環境位於支援區域備援的區域,您可以讓新的 App Service 環境 v3 區域做為備援。 您可以將 zoneRedundant 屬性設定為 true 以設定區域備援。 區域備援是選擇性設定。 此設定只能在建立新的 App Service 環境 v3 期間進行設定,且稍後無法移除。

執行下列命令以建立新的輸出 IP 位址。 此步驟約需要 15 分鐘來完成。 請不要在這段時間調整或變更您現有的 App Service 環境。

az rest --method post --uri "${ASE_ID}/NoDowntimeMigrate?phase=PreMigration&api-version=2022-03-01" --body @zoneredundancy.json

執行下列命令檢查此步驟的狀態:

az rest --method get --uri "${ASE_ID}?api-version=2022-03-01" --query properties.status

如果步驟進行中,您會取得 Migrating 狀態。 取得 的狀態 Ready之後,請執行下列命令來檢視新的輸出IP。 如果您沒有立即看到新的 IP,請稍候幾分鐘,然後再試一次。

az rest --method get --uri "${ASE_ID}/configurations/networking?api-version=2022-03-01" --query properties.windowsOutboundIpAddresses

5.使用新的輸出 IP 更新相依資源

藉由使用新的輸出IP,更新任何資源或網路元件,以確保您的新環境在移轉完成後如預期般運作。 進行任何必要的更新,這是您的責任。

6.委派您的 App Service 環境 子網

App Service 環境 v3 需要其所位在的子網路具有 Microsoft.Web/hostingEnvironments 的單一委派。 舊版不需要此委派。 您必須確認已正確委派子網路,並在移轉之前更新委派 (如必要)。 您可以執行下列命令或移至 Azure 入口網站中的子網路來更新委派。

az network vnet subnet update --resource-group $VNET_RG --name <subnet-name> --vnet-name <vnet-name> --delegations Microsoft.Web/hostingEnvironments

7.確認虛擬網路上沒有鎖定

虛擬網路鎖定將會在移轉期間封鎖平台作業。 如果虛擬網路具有鎖定,則您需要先將其移除,才能進行移轉。 如有必要,您可以在移轉完成後再新增鎖定。

鎖定可以存在於三個範圍:訂用帳戶、資源群組和資源。 當您在父範圍套用鎖定時,該範圍內的所有資源都會都繼承相同的鎖定。 如果您已在訂用帳戶、資源群組或資源範圍套用鎖定,則需要在移轉之前移除。 如需鎖定和鎖定繼承的詳細資訊,請參閱鎖定您的資源以保護基礎結構

使用下列命令來檢查您的虛擬網路是否具有任何鎖定:

az lock list --resource-group $VNET_RG --resource <vnet-name> --resource-type Microsoft.Network/virtualNetworks

使用下列命令來刪除任何現有的鎖定:

az lock delete --resource-group $VNET_RG --name <lock-name> --resource <vnet-name> --resource-type Microsoft.Network/virtualNetworks

如需檢查訂用帳戶或資源群組是否具有鎖定的相關命令,請參閱鎖定的 Azure CLI 參考

8.準備您的設定

如果您的現有 App Service 環境使用自訂網域尾碼,您必須在移轉程序期間,為新的 App Service 環境 v3 資源設定自訂網域尾碼。 如果您未設定自訂網域尾碼,且目前使用一個自訂網域尾碼,移轉會失敗。 如需關於 App Service 環境 v3 自訂網域尾碼的詳細資訊,包括需求、逐步指示和最佳做法,請參閱 App Service 環境的自訂網域尾碼

注意

如果您要設定自訂網域尾碼,當您在 Azure Key Vault 上新增網路權限時,請確定您的金鑰保存庫允許從您 App Service v3 的新子網路存取。

若要調整這些設定,包括識別您稍早選取的子網路,請另建一個 parameters.json 檔案,並根據您的案例包含下列詳細資料。 請務必使用您為新 App Service 環境 v3 選取的新子網路。 如果此功能不適合您的移轉,則請勿包含自訂網域尾碼屬性。 請注意 zoneRedundant 屬性的值,並將其設定為在輸出 IP 產生步驟中使用的相同值。 您必須針對輸出 IP 產生步驟中使用的區域備援使用相同的值。

如果您想移轉但不使用自訂網域尾碼,請使用下列程式碼:

{
    "Properties": {
        "VirtualNetwork": {
            "Id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Network/virtualNetworks/<virtual-network-name>/subnets/<subnet-name>"
        },
        "zoneRedundant": "<true/false>"
    }
}

如果您是採用使用者指派的受控識別作為自訂網域尾碼設定,請使用下列程式碼:

{
    "Properties": {
        "VirtualNetwork": {
            "Id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Network/virtualNetworks/<virtual-network-name>/subnets/<subnet-name>"
        },
        "zoneRedundant": "<true/false>",
        "customDnsSuffixConfiguration": {
            "dnsSuffix": "internal.contoso.com",
            "certificateUrl": "https://contoso.vault.azure.net/secrets/myCertificate",
            "keyVaultReferenceIdentity": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/asev3-migration/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ase-managed-identity"
        }
    }
}

如果您是採用系統指派的受控識別作為自訂網域尾碼設定,請使用下列程式碼:

{
    "properties": {
        "VirtualNetwork": {
            "Id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Network/virtualNetworks/<virtual-network-name>/subnets/<subnet-name>"
        },
        "zoneRedundant": "<true/false>",
        "customDnsSuffixConfiguration": {
            "dnsSuffix": "internal.contoso.com",
            "certificateUrl": "https://contoso.vault.azure.net/secrets/myCertificate",
            "keyVaultReferenceIdentity": "SystemAssigned"
        }
    }
}

9.遷移至 App Service 環境 v3 並檢查狀態

完成上述所有步驟之後,您就可以開始移轉。 請確定您了解移轉的影響

此步驟需要三到六個小時才能完成。 此期間不會導致任何應用程式停機時間。 在此步驟執行時,將會封鎖對現有 App Service 環境的調整、部署和修改。

執行下列命令以開始移轉:

az rest --method post --uri "${ASE_ID}/NoDowntimeMigrate?phase=HybridDeployment&api-version=2022-03-01" --body @parameters.json

執行下列命令檢查移轉的狀態:

az rest --method get --uri "${ASE_ID}?api-version=2022-03-01" --query properties.subStatus

取得 MigrationPendingDnsChange 狀態之後,移轉即已完成,且您會有 App Service 環境 v3 資源。 您的應用程式現在正在新的環境和舊環境中執行。

執行下列命令以取得新環境的詳細資料:

az appservice ase show --name $ASE_NAME --resource-group $ASE_RG

重要

在移轉期間以及步驟期間MigrationPendingDnsChange,Azure 入口網站 會顯示 App Service 環境 和應用程式的相關信息不正確。 使用 Azure CLI 來檢查移轉的狀態。 如果您有移轉或應用程式狀態的任何問題,請連絡支持人員。

注意

如果您的移轉包含自定義網域後綴,您的自定義網域後綴組態可能會在移轉完成後顯示為降級,因為已知錯誤。 您的 App Service 環境 仍應如預期般運作。 降級的狀態應該會在 6-8 小時內自行解決。 如果設定在8小時后降級,或您的自定義網域後綴無法運作,請連絡支持人員。

範例降級自定義網域後綴組態的螢幕快照。

10.取得新 App Service 環境 v3 的輸入IP位址,並更新相依資源

在移轉程序的此階段,您會有兩個 App Service 環境。 您的應用程式同時在這兩個環境中執行。 您必須更新任何相依資源,以針對新的 App Service 環境 v3 使用新的IP輸入位址。 針對面向內部 (ILB) 的 App Service 環境,您必須更新私人 DNS 區域以指向新的輸入 IP 位址。

您可以執行下列對應至 App Service 環境 負載平衡器類型的命令,以取得新 App Service 環境 v3 的新輸入 IP 位址。 進行任何必要的更新,這是您的責任。

針對 ILB App Service 環境,請執行下列命令來取得私人輸入 IP 位址:

az rest --method get --uri "${ASE_ID}?api-version=2022-03-01" --query properties.networkingConfiguration.internalInboundIpAddresses

針對 ELB App Service 環境,請執行下列命令來取得公用輸入 IP 位址:

az rest --method get --uri "${ASE_ID}?api-version=2022-03-01" --query properties.networkingConfiguration.externalInboundIpAddresses

11.重新導向客戶流量、驗證您的 App Service 環境 v3,以及完成移轉

此步驟可讓您測試及驗證新的 App Service 環境 v3。 根據預設,流量會傳送至您的 App Service 環境 v2 前端。 如果您使用 ILB App Service 環境 v3,您可以使用新的輸入 IP 位址更新私人 DNS 區域,以測試您的 App Service 環境 v3 前端。 如果您使用 ELB App Service 環境 v3,則測試的程式取決於您的特定網路組態。 測試 ELB 環境的一個簡單方法是更新主機檔案,以使用新的 App Service 環境 v3 輸入 IP 位址。 如果您已將自定義網域指派給個別應用程式,您也可以更新其 DNS 以指向新的輸入 IP。 測試這項變更可讓您在起始移轉的最後一個步驟之前,完整驗證您的 App Service 環境 v3,其中刪除舊的 App Service 環境。 如果您能夠在沒有問題的情況下存取您的應用程式,這表示您已準備好完成移轉。

確認應用程式如預期般運作後,您可以執行下列命令,將客戶流量重新導向至新的 App Service 環境 v3。 此命令也會刪除您的舊環境。 您有 14 天的時間可以完成此步驟。 如果您在 14 天內未完成此步驟,您的移轉會自動還原回 v2 App Service 環境。 如果您需要超過 14 天才能完成此步驟,請連絡支持人員。

如果您發現任何問題,或決定放棄繼續移轉,請連絡支援人員以還原移轉。 如果您需要還原移轉,請勿執行 DNS 變更命令。 如需詳細資訊,請參閱還原移轉

az rest --method post --uri "${ASE_ID}/NoDowntimeMigrate?phase=DnsChange&api-version=2022-03-01"

執行下列命令檢查此步驟的狀態:

az rest --method get --uri "${ASE_ID}?api-version=2022-03-01" --query properties.subStatus

在此步驟中,您會取得 的狀態 CompletingMigration。 當您取得 的狀態 MigrationCompleted時,流量重新導向步驟會完成,且您的移轉已完成。

下一步