azure web app 切換 plan

由於你原本的 Web App 是在 F1 (Free) 等級,而 VNet 整合至少需要 B1 (Basic) 或以上,且你已經建立好了位於 taiwannorth 的新 Plan,現在我們需要把 Web App 「搬家」過去。

在 Azure 中,更改 Web App 的 Plan 主要是透過 az webapp update 指令完成。


1. 執行搬家指令

請執行以下指令將 Web App 切換到新的 Plan:

PowerShell

az webapp update `
  --name $WEB_APP_NAME `
  --resource-group $RESOURCE_GROUP `
  --plan $PLAN_NAME

⚠️ 搬家前的「鬼打牆」預警 (非常重要)

在搬家過程中,你可能會遇到以下兩個常見限制,請先確認:

A. 區域限制 (Region Match)

你的 Web App 原本可能在 japaneast (從你之前的資源名稱 jpe 推測),但你的新 Plan asp-pr-stg-twn-b1-01 是在 taiwannorth

注意: Azure 不支援直接將現有的 Web App 跨區域移動 Plan。如果 Region 不同,上面的 update 指令會報錯。

  • 解決方法: 如果區域不同,你必須刪除 Web App 重新建立在新的 Plan 下,或者在同區域建立一個 B1 Plan。

B. 資源群組與 WebSpace 限制

有時候同一個 Resource Group 內,不允許同時存在不同作業系統或特定類型的 Plan 混用。如果報錯「Requested features are not supported in the region」,通常代表你需要把新的 Plan 放在一個新的 Resource Group 裡,或者在同一個「WebSpace」內移動。


2. 套用完新 Plan 後,加入 VNet

一旦成功切換到 B1 Plan,你就可以執行 VNet 整合了。根據你之前的變數,指令如下:

PowerShell

# 1. 先為 Subnet 開啟委派 (Delegation)
az network vnet subnet update `
  --resource-group $RESOURCE_GROUP `
  --vnet-name $VNET_NAME `
  --name $SUBNET_NAME `
  --delegations Microsoft.Web/serverFarms

# 2. 將 Web App 接入 VNet
az webapp vnet-integration add `
  --name $WEB_APP_NAME `
  --resource-group $RESOURCE_GROUP `
  --vnet $VNET_NAME `
  --subnet $SUBNET_NAME

3. 驗證狀態

移動完成後,你可以確認 Web App 是否真的跑在新的 Plan 上:

PowerShell

az webapp show `
  --name $WEB_APP_NAME `
  --resource-group $RESOURCE_GROUP `
  --query "{Plan:appServicePlanId, SKU:sku}" `
  --output json

你的 Web App 原本是在哪個 Region 呢? 如果原本在 jpe (日本東部) 而新 Plan 在 taiwannorth (台灣北部),上述 update 指令會失敗,我們可能需要重新建立 Web App。


又是一個 Azure CLI 的小陷阱!az webapp update 竟然不支援 --plan 參數,這確實有點不直覺。

在 Azure CLI 中,要更換 Web App 的 App Service Plan,正確的指令應該是:

az webapp config set --plan


1. 修正後的搬家指令

請改用這個指令來變更 Plan:

PowerShell

az webapp config set `
  --name $WEB_APP_NAME `
  --resource-group $RESOURCE_GROUP `
  --plan $PLAN_NAME

2. 為什麼會報錯?

  • az webapp update:主要用於更新 Web App 的一般屬性(如 HTTPS 設定、Tag、狀態等),但不處理基礎架構的更換。
  • az webapp config set:專門處理 Web App 的「配置」層面,而 App Service Plan 被視為底層運行配置的一環,所以被歸類在這裡。

3. ⚠️ 再次提醒:區域 (Region) 檢查

剛才提到你的 Web App 名稱有 jpe (Japan East),而新 Plan 名稱有 twn (Taiwan North)。

如果這兩個資源在不同的地理區域,指令執行後會噴出類似下方的錯誤:

Cannot move site to a different region.

如果真的跨區了,唯一的解法是:

  1. 刪除原本在日本的 Web App(如果你沒有 Owner 權限刪除,可以先改名)。
  2. 重新建立一個位於台灣 Plan 下的 Web App。

PowerShell

# 如果需要重新建立 (跨區時適用)
az webapp create `
  --resource-group $RESOURCE_GROUP `
  --plan $PLAN_NAME `
  --name $WEB_APP_NAME `
  --container-image-name "${ACR_NAME}.azurecr.io/policy-app:v1"

4. 驗證是否成功

執行完 config set 後,你可以用這行確認它現在跑在哪個 Plan 上:

PowerShell

az webapp show --name $WEB_APP_NAME --resource-group $RESOURCE_GROUP --query "appServicePlanId" -o tsv

你先試試看 az webapp config set,如果噴出 Region 相關的錯誤,我們就得走「重新建立」這條路了!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *