共用方式為


VM 應用程式概觀

VM 應用程式是 Azure 計算資源庫中的資源類型,可提供現代化、彈性的方法,以管理及部署跨虛擬機器和擴展集的應用程式。 藉由將應用程式安裝與基底 VM 映像分離,您可以簡化更新、減少映像維護額外負荷,以及加速部署週期。 這種方法不需要針對每個應用程式變更重建和重新發佈 VM 映像,進而加快反覆開發並提升營運靈活性。 VM 應用程式最適合在 Azure VM 上部署 AI、高延展性、低延遲、微服務、安全且相容的工作負載。

資源 描述
Azure 計算資源庫 資源庫是用來管理和共用應用程式封裝的存放庫。 使用者可以共用資源庫的資源,而且所有子資源都能自動共用。 每個訂閱的資源庫名稱必須不同。 例如,您有一個資源庫可儲存所有 OS 映射,而另一個資源庫可儲存所有 VM 應用程式。
VM 應用程式 VM 應用程式的定義。 是一種邏輯資源,可儲存其下所有版本的通用中繼資料。 例如,您可能有 Apache Tomcat 的應用程式定義,並在其中有多個版本。
VM 應用程式版本 可部署的資源,其中包含您的應用程式套件和版本特定組態。 您可以將 VM 應用程式版本全域複寫至更接近 VM 基礎結構的目標區域。 VM 應用程式版本必須復寫至區域,才能部署在該區域中的 VM 上。
儲存體帳戶 應用程式套件會先上傳至記憶體帳戶。 然後,Azure 計算資源庫會使用 SAS URL 從此記憶體帳戶下載應用程式套件,並將其儲存在 VM 應用程式版本內。 Azure 計算資源庫也會根據 VM 應用程式版本定義,跨區域和區域複本複寫此套件。 在 Azure 計算資源庫中建立 VM 應用程式版本之後,即可刪除記憶體帳戶中的應用程式套件。

此圖顯示建立 VM 應用程式並將其部署至 Azure 的步驟

主要優點:

  • 集中式和彈性的應用程式管理
    • 套件一次,部署四方:將應用程式封裝為 ZIP、MSI(微軟安裝套件格式)或 EXE 格式,並在 Azure 計算圖庫中集中管理。
    • 版本控制:藉由維護每個應用程式的多個版本,部署最新版或特定版本。
  • 無縫共用和訪問控制
    • Tenant-Wide 共享:在團隊內部或整個組織(租戶)中共享應用程式。
    • 整合式 RBAC:使用 Azure Role-Based 存取控制 (RBAC) 來控制發佈和部署存取。
  • 可靠且可自定義的部署
    • 個別應用程控:獨立安裝、更新或刪除應用程式,不需要重建 VM 映射。
    • 可自定義的作業:自定義應用程式的安裝、更新和刪除作業,包括重新啟動處理。
    • Built-In 失敗處理:將 VM 應用程式失敗與 VM 失敗關聯,以確保部署具有復原能力。
  • 可擴展和 Low-Latency 分配
    • 全域和 Intra-Region 複寫:自動跨區域和區域內復寫應用程式,以減少延遲並改善復原能力,不需要 AzCopy 或手動傳輸。
    • 針對 High-Scale 案例優化:即使在大規模部署期間,也能達到低建立延遲。
  • 依設計保護及符合規範
    • 原則驅動強制執行:使用 Azure 原則在您的資源中強制應用程式的存在和設定。
    • 安全部署:避免以因特網為基礎的下載和複雜的私人連結設定,這些設定不適合鎖定或安全的環境。
  • 廣泛平台支援
    • 虛擬機器和擴展集:部署至個別虛擬機器、彈性擴展集,或提供完整支援的統一擴展集。
    • 區塊 Blob 支援:使用 Azure 區塊 Blob 有效率地處理大型應用程式套件,以進行區塊上傳和背景串流。

VM 應用程式與 VM 應用程式版本資源

VM 應用程式資源會為下列項目定義 VM 應用程式:

  • 儲存 VM 應用程式的 Azure Compute Gallery
  • 應用程式的名稱
  • 支援的作業系統類型,例如 Linux 或 Windows
  • VM 應用程式的說明

VM 應用程式版本是可部署的資源。 版本會以下列屬性定義:

  • 版本號碼
  • 連結到儲存體帳戶中的應用程式封裝檔案
  • 安裝字串以正確安裝應用程式
  • 移除字元串以正確方式移除應用程式
  • 更新字串以正確將 VM 應用程式更新為較新版本
  • 將套件下載至 VM 時要使用的套件檔名。
  • 用來在 VM 上設定應用程式的組態檔名稱
  • VM 應用程式的組態檔連結,您可以包含授權檔案
  • 生命週期結束日期。 生命週期結束日期是參考性的;您仍然可以部署超過生命週期結束日期的 VM 應用程式版本。
  • 從最新中排除。 您可以避免某個版本被用為最新的應用程式版本。
  • 複寫的目標區域
  • 每個區域的複本計數

{
  "$schema": "https://schema.management.azure.com/schemas/2020-06-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "galleryName": {
      "type": "string"
    },
    "applicationName": {
      "type": "string"
    },
    "versionName": {
      "type": "string",
      "metadata": {
        "description": "Must follow the format: major.minor.patch (e.g., 1.0.0)"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "West US"
    },
    "supportedOSType": {
      "type": "string",
      "allowedValues": ["Windows", "Linux"]
    },
    "endOfLifeDate": {
      "type": "string"
    },
    "description": {
      "type": "string",
      "defaultValue": "Description of the application"
    },
    "eula": {
      "type": "string",
      "defaultValue": ""
    },
    "privacyStatementUri": {
      "type": "string",
      "defaultValue": ""
    },
    "releaseNoteUri": {
      "type": "string",
      "defaultValue": ""
    },
    "mediaLink": {
      "type": "string"
    },
    "configLink": {
      "type": "string"
    },
    "appConfigFileName": {
      "type": "string"
    },
    "appPackageFileName": {
      "type": "string"
    },
    "replicaRegion1": {
      "type": "string",
      "defaultValue": "East US"
    },
    "replicaRegion2": {
      "type": "string",
      "defaultValue": "South Central US"
    },
    "installScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to install the application. E.g. echo 'Installing application...'"
      }
    },
    "updateScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to update the application. E.g. echo 'Updating application...'"
      }
    },
    "removeScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to delete the application. E.g. echo 'Deleting application...'"
      }
    },
    "storageAccountType": {
      "type": "string",
      "allowedValues": ["PremiumV2_LRS", "Premium_LRS", "Standard_LRS", "Standard_ZRS"],
      "defaultValue": "Standard_LRS"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Compute/galleries",
      "apiVersion": "2024-03-03",
      "name": "[parameters('galleryName')]",
      "location": "[parameters('location')]",
      "properties": {
        "identifier": {}
      }
    },
    {
      "type": "Microsoft.Compute/galleries/applications",
      "apiVersion": "2024-03-03",
      "name": "[format('{0}/{1}', parameters('galleryName'), parameters('applicationName'))]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Compute/galleries', parameters('galleryName'))]"
      ],
      "properties": {
        "supportedOSType": "[parameters('supportedOSType')]",
        "endOfLifeDate": "[parameters('endOfLifeDate')]",
        "description": "[parameters('description')]",
        "eula": "[if(equals(parameters('eula'), ''), json('null'), parameters('eula'))]",
        "privacyStatementUri": "[if(equals(parameters('privacyStatementUri'), ''), json('null'), parameters('privacyStatementUri'))]",
        "releaseNoteUri": "[if(equals(parameters('releaseNoteUri'), ''), json('null'), parameters('releaseNoteUri'))]"
      }
    },
    {
      "type": "Microsoft.Compute/galleries/applications/versions",
      "apiVersion": "2024-03-03",
      "name": "[format('{0}/{1}/{2}', parameters('galleryName'), parameters('applicationName'), parameters('versionName'))]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Compute/galleries/applications', parameters('galleryName'), parameters('applicationName'))]"
      ],
      "properties": {
        "publishingProfile": {
          "source": {
            "mediaLink": "[parameters('mediaLink')]",
            "defaultConfigurationLink": "[parameters('configLink')]"
          },
          "manageActions": {
            "install": "[parameters('installScript')]",
            "remove": "[parameters('removeScript')]",
            "update": "[parameters('updateScript')]"
          },
          "settings": {
            "scriptBehaviorAfterReboot": "Rerun",
            "configFileName": "[parameters('appConfigFileName')]",
            "packageFileName": "[parameters('appPackageFileName')]"
          },
          "targetRegions": [
            {
              "name": "[parameters('location')]",
              "regionalReplicaCount": 3,
              "storageAccountType": "[parameters('storageAccountType')]"
            },
            {
              "name": "[parameters('replicaRegion1')]",
              "regionalReplicaCount": 1,
              "storageAccountType": "[parameters('storageAccountType')]"
            },
            {
              "name": "[parameters('replicaRegion2')]"
            },
          ],
          "excludeFromLatest": false,
          "replicaCount": 2,
          "storageAccountType": "[parameters('storageAccountType')]"
        },
        "safetyProfile": {
          "allowDeletionOfReplicatedLocations": true
        },
        "endOfLifeDate": "[parameters('endOfLifeDate')]"
      }
    }
  ]
}

成本

使用 VM 應用程式封裝不需要額外費用,但您將需支付下列資源的費用:

  • 儲存體儲存每個封裝和任何複本的成本。
  • 第一個映像版本從來源區域複寫至要複寫區域的網路輸出費用。 後續複本會在區域內處理,因此不會產生額外費用。

如需網路輸出詳細資訊,請參閱 頻寬定價

技術詳細資料

考量與目前的限制

  • 每個區域最多 10 個副本:當您建立 VM 應用程式版本時,無論是頁面 Blob 或區塊 Blob,每個區域的最大副本數目為 10 個。

  • 具有公用存取權的記憶體和具有讀取許可權的SAS URI: 記憶體帳戶必須具有公用層級存取權,並使用具有讀取許可權的SAS URI,因為其他限制層級會失敗部署。 可以通過允許匿名存取,在儲存帳戶上發佈工件,來略過 SAS 代號。

  • 手動重試失敗安裝:目前重試失敗安裝的唯一方法是從配置檔中移除應用程式,然後將它加回。

  • 每個 VM 最多 25 個應用程式:最多可以將 25 個應用程式部署到單一虛擬機。

  • 2 GB 應用程式大小:應用程式版本的 mediaLink 檔案大小上限為 2 GB。 的檔案大小 defaultConfigurationLink 上限為 1 GB。

  • 需要 VM 代理程式:VM 代理程式必須存在於 VM 上,而且能夠接收目標狀態。

  • 每個 VM 的單一應用程式版本:只能將一個特定應用程式的版本部署到 VM。

  • 目前不支援移動作業:目前不支援跨資源群組移動具有相關聯 VM 應用程式的 VM。

注意

針對 Azure Compute Gallery 和 VM 應用程式,可在複寫之後刪除儲存體 SAS。 不過,任何後續的更新作業都需要有效的 SAS。

下載 VM 內的目錄

應用程式封裝和組態檔的下載位置如下:

  • Linux:/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version>
  • Windows:C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>

假設應用程式封裝和組態檔位於目前的目錄中,應寫入安裝/更新/移除命令。

檔案命名

當應用程式檔下載到 VM 時,檔案會重新命名為 「MyVmApp」,而且沒有擴展名(例如 .exe、.msi)。 VM 不知道檔案的原始名稱與延伸名稱 。

以下是幾個替代方案,可協助解決此問題:

您可修改指令碼,在執行前包含重新命名檔案的命令:

move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S

您也可使用 packageFileName (和對應的 configFileName) 屬性以只是我們要重新命名檔案的內容。 例如,將它設定為 「MyApp.exe」,會讓您的安裝腳本如下所示。

MyAppe.exe /S

提示

如果您的 Blob 最初命名為 「myApp.exe」 而不是 「myapp」,則腳本會運作而不設定 packageFileName 屬性。

命令解釋器

預設命令解釋器為:

  • Linux:/bin/bash
  • Windows:cmd.exe

您可以使用 Chocolatey 或 PowerShell 等不同的解譯器 (需安裝在機器上),方法是呼叫可執行檔並將命令傳遞給解譯器。 例如,若要讓命令在 Windows 作業系統而非 CMD 上的 PowerShell 中執行,您可以傳遞 powershell.exe -Command '<powershell commmand>'

如何處理更新

當您更新 VM 或虛擬機器擴展集上的應用程式版本時,將會使用部署期間提供的更新命令。 如果更新的版本沒有更新命令,則會移除目前的版本,並安裝新的版本。

更新指令應該考慮到從任何舊版的 VM 應用程式進行更新的可能性而撰寫。

將失敗視為部署失敗

無論安裝/更新/移除任何 VM 應用程式失敗,VM 應用程式擴充功能一律都會 傳回成功 。 當延伸模組或基礎結構發生問題時,VM 應用程式延伸模組只會將擴充功能狀態回報為失敗。 此行為是由「將失敗視為部署失敗」旗標觸發,預設為 $false,但可以變更為 $true。 您可以在 PowerShellCLI 中設定 false 旗標。

在 Linux 上建立 VM 應用程式

若要建立 VM 應用程式,您需要應用程式套件和腳本,才能正確安裝、更新和刪除應用程式。
Linux 的協力廠商應用程式可以透過幾種方式封裝。 讓我們探索如何處理並建立一些常見的安裝命令。

.tar 和 .gz 檔案

這些檔案是壓縮過的封存,可以解壓縮到所需的位置。 檢查原始封裝的安裝指示,確認是否需要解壓縮至特定位置。 如果.tar 和 .gz 檔案包含原始程式碼,請參閱封裝指示,了解如何從來源安裝。

在 Linux 電腦上安裝命令並安裝 golang 的範例:

sudo tar -C /usr/local -xzf go_linux

移除命令的範例:

sudo rm -rf /usr/local/go

針對具有限制內部存取的 VM,使用 .deb.rpm 和其他平台特定封裝建立應用程式封裝

您可以下載平台特定封裝管理員的個別封裝,但通常不包含所有相依性。 針對這些檔案,您也必須在應用程式封裝中包含所有相依性,或讓系統套件管理員透過 VM 適用的存放庫下載相依性。 如果您使用受限制的網際網路存取 VM,則必須自行封裝所有相依性。

要找出相依性可能有點棘手。 有協力廠商工具可以顯示整個相依性的樹狀結構。

在 Ubuntu 中,您可執行 sudo apt show <package_name> | grep Depends 以顯示在執行 sudo apt-get install <packge_name> 命令時安裝的所有封裝。 然後,您可以使用該輸出下載所有 .deb 檔案以建立封存,作為應用程式封裝使用。

若要建立 VM 應用程式套件以在 Ubuntu 上安裝 PowerShell,請執行下列步驟:

  1. 執行下列命令來啟用存放庫以下載PowerShell,並識別新Ubuntu VM上的套件相依性
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
  1. 檢查 Depends 行的輸出,其中列出下列封裝:
Depends: libc6, lib32gcc-s1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
  1. 使用 sudo apt-get download <package_name> 下載這些檔案,並使用所有檔案建立 tar 壓縮的封存。
  • Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 20.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 22.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  1. 此 tar 封裝是應用程式封裝檔案。
  • 在此情況下,安裝命令為:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • 而移除命令為:
sudo apt remove powershell

使用 sudo apt autoremove,而不是明確嘗試移除所有相依性。 您可能已安裝具有重疊相依性的其他應用程式,在此情況下,明確移除命令將會失敗。

如果您不想自行解析相依性,而 apt 能夠連線到存放庫,您可以只安裝一個 .deb 檔案的應用程式,並讓 apt 處理相依性。

封裝安裝命令:

dpkg -i <package_name> || apt --fix-broken install -y

在 Windows 上建立 VM 應用程式

Windows 中的大部分協力廠商應用程式都可以作為 .exe 或 .msi 安裝程式使用。 有些也提供解壓縮和執行 zip 檔案。 讓我們看看每個最佳做法。

.exe 安裝程式

安裝程式的可執行檔通常會啟動使用者介面 (UI),並要求透過 UI 選取。 如果安裝程式支援無訊息模式參數,則應該包含在您的安裝字串中。

Cmd.exe 也會預期可執行檔的副檔名為 .exe,因此您在重新命名時,必須將檔案的副檔名設為 .exe

如果我想為 myApp.exe 建立一個 VM 應用程式套件,且該應用程式以可執行檔形式提供,我的 VM 應用程式名為「myApp」,因此我輸入命令,假設應用程式套件位於目前目錄中:

"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"

如果安裝程式的可執行檔不支援解除安裝參數,建議可以在測試電腦上查閱登錄,以了解解除安裝程式的所在位置。

在登錄中,解除安裝字串會儲存在 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString 中,以便使用內容作為移除命令:

'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'

.msi 安裝程式

針對安裝程式的 .msi 命令列執行,安裝或移除應用程式的命令應該使用 msiexec。 一般而言,msiexec 會以自己的個別流程執行,而 cmd 不會等待它完成,這可能會導致安裝 VM 應用程式時發生問題。 命令 start 可以搭配 msiexec 使用,確保安裝會在命令傳回之前完成。 例如:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log

移除命令的範例:

start /wait %windir%\\system32\\msiexec.exe /x myapp /quiet /forcerestart /log myapp_uninstall.log

一般而言, start 命令會在批次腳本內呼叫。 如果搭配 /wait 參數使用,呼叫腳本會暫停,直到呼叫的進程終止為止。 完成之後,批次腳本會檢查 命令所設定的errorlevelstart變數,然後結束,如下所示:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...

ZIP 檔案

對於.zip 或其他壓縮檔案,請將應用程式封裝的內容重新命名並解壓縮到所需的目的地。

封裝安裝命令:

rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"

移除命令的範例:

rmdir /S /Q C:\\myapp

針對 VM 應用程式進行疑難排解

若要知道特定 VM 應用程式是否已成功新增至 VM 實例,請檢查 VM 應用程式擴充功能的訊息。

若要深入了解如何取得 VM 擴充功能的狀態,請參閱適用於 Linux 的虛擬機器擴充功能以及適用於 Windows 的虛擬機器擴充功能

若要取得 VM 擴充功能的狀態,請使用 Get-AzVM

Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10

若要取得擴展集的擴充功能狀態,請使用 Get-AzVMSS

$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary  = New-Object System.Collections.ArrayList
$result | ForEach-Object {
    $res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
    $resultSummary.Add($res) | Out-Null
}
$resultSummary | convertto-json -depth 5

錯誤訊息

訊息 描述
目前的 VM 應用程式版本 {name} 已於 {date} 被取代。 您嘗試部署已被取代的 VM 應用程式版本。 請嘗試使用 latest 而不要指定特定版本。
目前的 VM 應用程式版本 {name} 支援 {OS} 作業系統,但目前 OSDisk 的作業系統是 {OS}。 您嘗試將 Linux 應用程式部署至 Windows 執行個體,或是將 Windows 應用程式部署至 Linux 執行個體。
已超過 (max=5、current={count}) 的 VM 應用程式數量上限。 減少使用的應用程式,然後重試要求。 我們目前對每個 VM 或擴展集僅支援五個 VM 應用程式。
使用相同的 packageReferenceId 指定多個 VM 應用程式。 相同的應用程式已指定一次以上。
訂閱未獲得存取此映像的授權。 訂閱無法存取這個應用程式版本。
引數中的儲存體帳戶不存在。 此訂閱中沒有任何應用程式。
平台映射 {image} 無法使用。 驗證儲存體設定檔中的所有欄位是否都正確。 如需儲存體設定檔的詳細資訊,請參閱 https://aka.ms/storageprofile 應用程式不存在。
資源庫映像 {image} 在 {region} 區域中無法使用。 請連絡映像擁有者以複寫至此區域,或變更您所要求的區域。 資源庫應用程式版本存在,但未複寫至此區域。
SAS 對來源 URI {uri} 無效。 嘗試擷取 (either mediaLink or defaultConfigurationLink).相關資訊時,從儲存體接收到 Forbidden 錯誤。
來源 URI {uri} 所參考的 Blob 不存在。 提供給 mediaLink 或 defaultConfigurationLink 屬性的 Blob 不存在。
資源庫應用程式版本 URL {url} 無法存取,因為發生下列錯誤:找不到遠端名稱。 請確定 Blob 存在,且為可公開存取或具有讀取權限的 SAS URL。 最可能的情況是未提供具有讀取權限的 SAS URI。
資源庫應用程式版本 URL {url} 無法存取,因為發生下列錯誤:{error description}。 請確定 Blob 存在,且為可公開存取或具有讀取權限的 SAS URL。 提供的儲存體 Blob 發生問題。 錯誤描述會提供詳細資訊。
該作業在 {application} 中標示為待刪除,所以不允許對其執行作業 {operationName}。 您只能重試刪除作業(或等候進行中的作業完成)。 嘗試更新目前正在刪除的應用程式。
參數「galleryApplicationVersion.properties.publishingProfile.replicaCount」的值 {value} 超出範圍。 值必須介於一與三 (含) 之間。 VM 應用程式版本只允許介於一到三個複本。
不允許變更「galleryApplicationVersion.properties.publishingProfile.manageActions.install」屬性。 (或更新、刪除) 您無法變更現有 VmApplication 上的任何管理動作。 必須建立新的 VmApplication 版本。
不允許變更「galleryApplicationVersion.properties.publishingProfile.settings.packageFileName」屬性。 (或 configFileName) 無法變更任何設定,例如封裝檔案名稱或組態檔名稱。 必須建立新的 VmApplication 版本。
來源 URI {uri} 所參考的 Blob 太大:大小 = {size}。 允許的 Blob 大小上限為「1 GB」。 目前 mediaLink 或 defaultConfigurationLink 所參考的 Blob 大小上限為 1 GB。
來源 URI {uri} 所參考的 Blob 是空的。 參考到空的 Blob。
{operation} 作業 不支援 Blob 型別 {type}。 僅支援分頁 Blob 和區塊 Blob。 VmApplications 僅支援分頁 Blob 和區塊 Blob。
SAS 對來源 URI {uri} 無效。 為 mediaLink 或 defaultConfigurationLink 提供的 SAS URI 不是有效的 SAS URI。
無法在目標區域中指定 {region},因為訂閱缺少必要的功能 {featureName}。 使用必要的功能註冊您的訂閱,或從目標區域清單中移除區域。 若要在特定限制區域中使用 VmApplications,必須註冊該訂閱的功能旗標。
資源庫映像版本發行設定檔的區域 {regions} 必須包含映像版本 {location} 的位置。 複寫的區域清單必須包含應用程式版本所在的位置。
目標發佈區域中不允許重複的區域。 發佈區域可能沒有重複。
資源庫應用程式版本資源目前不支援加密。 VM 應用程式不支援目標區域的加密屬性
實體名稱不符合要求 URL 中的名稱。 要求 URL 中指定的資源庫應用程式版本不符合要求本文中指定的版本。
資源庫應用程式版本的名稱無效。 應用程式版本名稱應遵循 Major(int32)。 Minor(int32)。 Patch(int32) 格式,其中 int 介於 0 與 2,147,483,647 (含) 之間。 例如,1.0.0、2018.12.1 等。 資源庫應用程式版本必須遵循指定格式。

下一步