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 應用程式版本之後,即可刪除記憶體帳戶中的應用程式套件。 |
主要優點:
-
集中式和彈性的應用程式管理:
- 套件一次,部署四方:將應用程式封裝為 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
。 您可以在 PowerShell 或 CLI 中設定 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,請執行下列步驟:
- 執行下列命令來啟用存放庫以下載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
- 檢查 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.
- 使用
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
- 此 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
參數使用,呼叫腳本會暫停,直到呼叫的進程終止為止。 完成之後,批次腳本會檢查 命令所設定的errorlevel
start
變數,然後結束,如下所示:
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 等。 |
資源庫應用程式版本必須遵循指定格式。 |
下一步
- 了解如何建立和部署 VM 應用程式封裝。