- 請前往 [Azure 入口網站],再搜尋並選取 [Azure Compute Gallery]。
- 從資源庫選取您要使用的映像。
- 在資源庫分頁上,請在頁面頂端選取 [新增],再從下拉式清單中選取 [VM 應用程式定義]。 [建立 VM 應用程式定義] 頁面隨即開啟。
- 在 [基本] 索引標籤中,輸入應用程式的名稱,再選擇應用程式適用於執行 Linux 或Windows的 VM。
- 若想要指定 VM 應用程式定義的任一下列選用設定,請選取 [發佈選項] 索引標籤:
- VM 應用程式定義的描述。
- 生命週期結束日期
- 連結至授權條款
- 隱私權聲明的 URI
- 版本資訊的 URI
- 當您完成時,選取 [檢閱 + 建立]。
- 驗證完成時,選取 [建立] 以部署定義。
- 部署完成後,請選取 [前往資源]。
- 在應用程式的頁面上,選取 [建立 VM 應用程式版本]。 [建立 VM 應用程式版本] 頁面隨即開啟。
- 輸入版本號碼,例如 1.0.0.
- 選取已上傳應用程式套件的區域。
- 在 [來源應用程式套件] 下,選取 [瀏覽]。 選取 [儲存體帳戶],再選取套件所在的容器。 從清單中選取套件,完成時選取 [選取]。 或者,如有需要,您也可以將 SAS URI 貼到此欄位中。
- 在 [安裝指令碼] 輸入。 您亦可提供解除安裝指令碼和更新指令碼。 如需建立指定碼的相關資訊,請參閱概觀。
- 若上傳預設設定檔至儲存體帳戶,您可以在 [預設設定檔] 中選取。
- 建立 VM 時不想將此版本顯示為最新版本,選取 [從最新版本排除]。
- 針對 [生命日期結束],選取未來日期以追蹤此版本應淘汰的時間。 這不會自動刪除或移除版本,僅用於自行追蹤。
- 若要複寫此版本至其他區域,選取 [複寫] 索引標籤,並新增更多區域和變更每個區域中複本的數量。 版本建立時的原始區域必須在清單上,且無法將其移除。
- 完成變更後,選擇頁面下方的 [檢閱 + 建立]。
- 驗證顯示為通過後,選取 [建立] 以部署 VM 應用程式版本。
現在您可以使用入口網站,建立 VM 和對其部署 VM 應用程式。 僅需像往常一樣建立 VM,並在 [進階] 索引標籤下選擇 [選取要安裝的 VM 應用程式]。
從清單中選取 VM 應用程式,然後選取頁面下方的 [儲存]。
若有要安裝多於一個 VM 應用程式,您可以設定回到 [進階] 索引標籤,設定每個 VM 應用程式的安裝順序。
您也可以將 VM 應用程式部署到目前正在執行的 VM。 在入口網站中檢視 VM 詳細資料時,選取左側功能表中 [設定] 底下的 [延伸模組 + 應用程式] 選項。
選擇 [VM 應用程式],然後選取 [新增應用程式] 以新增 VM 應用程式。
從清單中選取 VM 應用程式,然後選取頁面下方的 [儲存]。
若要顯示 VM 應用程式狀態,請移至 [擴充功能 + 應用程式] 索引標籤/設定,並檢查 VMAppExtension 的狀態:
若要顯示 VMSS 的 VM 應用程式狀態,請移至 [VMSS] 頁面,選取其中一個執行個體,然後移至 VMAppExtension:
VM 應用程式需 Azure CLI 2.30.0 版本或更新版本。
使用 az sig gallery-application create 建立 VM 應用程式定義。 在此範例中,我們會為 Linux 型 VM 建立名為 myApp 的 VM 應用程式定義。
az sig gallery-application create \
--application-name myApp \
--gallery-name myGallery \
--resource-group myResourceGroup \
--os-type Linux \
--location "East US"
使用 az sig gallery-application version create 建立 VM 應用程式版本。 版本允許的字元是數字及句點。 數字必須在 32 位元整數的範圍內。 格式:MajorVersion.MinorVersion.Patch。
將參數值取代為自己的值。
az sig gallery-application version create \
--version-name 1.0.0 \
--application-name myApp \
--gallery-name myGallery \
--location "East US" \
--resource-group myResourceGroup \
--package-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" \
--install-command "mv myApp .\myApp\myApp" \
--remove-command "rm .\myApp\myApp" \
--update-command "mv myApp .\myApp\myApp" \
--default-configuration-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>"\
使用 az vm application set 並且以您自己的值取代參數值,將 VM 應用程式設定為現有 VM。
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subID}/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
若要在 VM 上設定多個應用程式:
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.1 \
--treat-deployment-as-failure true true
若要將應用程式新增至 VMSS,請使用 az vmss application set:
az vmss application set \
--resource-group myResourceGroup \
--name myVmss \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
若要將多個應用程式新增至 VMSS:
az vmss application set \
--resource-group myResourceGroup \
--name myVmss
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.0 \
--treat-deployment-as-failure true
若要驗證應用程式 VM 部署狀態:請使用 az vm get-instance-view:
az vm get-instance-view -g myResourceGroup -n myVM --query "instanceView.extensions[?name == 'VMAppExtension']"
若要驗證應用程式 VMSS 部署狀態,請使用 az vmss get-instance-view:
az vmss get-instance-view --ids (az vmss list-instances -g myResourceGroup -n myVmss --query "[*].id" -o tsv) --query "[*].extensions[?name == 'VMAppExtension']"
注意
上述 VMSS 部署狀態命令不會隨結果列出執行個體識別碼。 若要顯示每個執行個體中擴充功能狀態的執行個體識別碼,則需要某些額外的指令碼。 請參閱下列包含 PowerShell 語法的 VMSS CLI 範例:
$ids = az vmss list-instances -g myResourceGroup -n myVmss --query "[*].{id: id, instanceId: instanceId}" | ConvertFrom-Json
$ids | Foreach-Object {
$iid = $_.instanceId
Write-Output "instanceId: $iid"
az vmss get-instance-view --ids $_.id --query "extensions[?name == 'VMAppExtension']"
}
使用 New-AzGalleryApplication
建立 VM 應用程式定義。 在此範例中,我們會在 myGallery Azure Compute Gallery 和 myGallery 資源群組中,建立名為 myApp 的 Linux 應用程式,而我已提供 VM 應用程式的簡短定義以自己使用。 視需要取代值。
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
New-AzGalleryApplication `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-Location "East US" `
-Name $applicationName `
-SupportedOSType Linux `
-Description "Backend Linux application for finance."
使用 New-AzGalleryApplicationVersion
建立應用程式版本。 版本允許的字元是數字及句點。 數字必須在 32 位元整數的範圍內。 格式:MajorVersion.MinorVersion.Patch。
在此範例中,我們會建立版本號碼 1.0.0。 視需要取代變數的值。
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
New-AzGalleryApplicationVersion `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-GalleryApplicationName $applicationName `
-Name $version `
-PackageFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-DefaultConfigFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-Location "East US" `
-Install "mv myApp .\myApp\myApp" `
-Remove "rm .\myApp\myApp" `
若要新增應用程式至現有 VM,請取得應用程式版本,再使用其取得 VM 應用程式版本識別碼。 使用識別碼以新增應用程式至 VM 設定。
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
$vmName = "myVM"
$vm = Get-AzVM -ResourceGroupName $rgname -Name $vmName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmGalleryApplication -PackageReferenceId $packageId
Add-AzVmGalleryApplication -VM $vm -GalleryApplication $app -TreatFailureAsDeploymentFailure true
Update-AzVM -ResourceGroupName $rgName -VM $vm
若要將應用程式新增至 VMSS:
$vmss = Get-AzVmss -ResourceGroupName $rgname -Name $vmssName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmssGalleryApplication -PackageReferenceId $packageId
Add-AzVmssGalleryApplication -VirtualMachineScaleSetVM $vmss.VirtualMachineProfile -GalleryApplication $app
Update-AzVmss -ResourceGroupName $rgName -VirtualMachineScaleSet $vmss -VMScaleSetName $vmssName
確認應用程式成功:
$rgName = "myResourceGroup"
$vmName = "myVM"
$result = Get-AzVM -ResourceGroupName $rgName -VMName $vmName -Status
$result.Extensions | Where-Object {$_.Name -eq "VMAppExtension"} | ConvertTo-Json
若要驗證 VMSS:
$rgName = "myResourceGroup"
$vmssName = "myVMss"
$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
建立應用程式定義。
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>?api-version=2019-03-01
{
"location": "West US",
"name": "myApp",
"properties": {
"supportedOSType": "Windows | Linux",
"endOfLifeDate": "2020-01-01"
}
}
欄位名稱 |
描述 |
限制 |
NAME |
資源庫中 VM 應用程式的唯一名稱 |
長度上限為 117 個字元。 允許的字元為大寫或小寫字母、數字、連字號 (-)、句號 (.)、底線 (_)。 不允許以句號 (.) 結尾的名稱。 |
supportedOSType |
不論這是 Windows 還是 Linux 應用程式 |
「Windows」或「Linux」 |
endOfLifeDate |
應用程式的未來生命結束日期。 請注意這僅供參考,且不會強制執行。 |
有效的未來日期 |
建立 VM 應用程式版本。
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>/versions/\<**versionName**\>?api-version=2019-03-01
{
"location": "$location",
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "$mediaLink",
"defaultConfigurationLink": "$configLink"
},
"manageActions": {
"install": "echo installed",
"remove": "echo removed",
"update": "echo update"
},
"targetRegions": [
{
"name": "$location1",
"regionalReplicaCount": 1
},
{ "name": "$location1" }
]
},
"endofLifeDate": "datetime",
"excludeFromLatest": "true | false"
}
}
欄位名稱 |
描述 |
限制 |
location |
VM 應用程式版本的來源位置 |
有效的 Azure 區域 |
mediaLink |
包含應用程式版本套件的 URL |
有效和現有的儲存體 URL |
defaultConfigurationLink |
選擇性。 包含預設設定的 URL,可能會在部署時覆寫。 |
有效和現有的儲存體 URL |
安裝 |
安裝應用程式的命令 |
指定應用程式的有效命令 |
移除 |
移除應用程式的命令 |
指定應用程式的有效命令 |
更新 |
選擇性。 更新應用程式的命令。 若未指定且不須更新,舊版本會移除,並安裝新的版本。 |
指定應用程式的有效命令 |
targetRegions/name |
要複寫區域的名稱 |
驗證 Azure 區域 |
targetRegions/regionalReplicaCount |
選擇性。 區域中要建立的複本數。 預設值為 1。 |
介於 1 和 3 (含) 間的整數 |
endOfLifeDate |
應用程式版本的未來生命結束日期。 請注意這僅供客戶參考,且不會強制執行。 |
有效的未來日期 |
excludeFromLatest |
若指定,則此版本不會視為最新版本。 |
True 或 False |
請在 VM 上執行 PUT 以新增 VM 應用程式版本至 VM。
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>?api-version=2019-03-01
{
"properties": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
若要將 VM 應用程式套用至統一擴展集:
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/
virtualMachineScaleSets/\<**VMSSName**\>?api-version=2019-03-01
{
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
欄位名稱 |
描述 |
限制 |
訂單 |
選擇性。 應部署應用程式的順序。 請參閱下方 。 |
驗證整數 |
packageReferenceId |
資源庫應用程式版本的參考 |
有效的應用程式版本參考 |
configurationReference |
選擇性。 儲存體 BlOb 的完整 URL,其中包含此部署的設定。 這會覆寫稍早針對 defaultConfiguration 提供的任何值。 |
有效的儲存體 Blob 參考 |
treatFailureAsDeploymentFailure |
選擇性。 VM 應用程式的佈建狀態。 當設定為 False 時,無論應用程式部署是否失敗,佈建狀態一律顯示「成功」。 |
True 或 False |
順序欄位可用來指定應用程式間的相依性。 順序規則如下:
大小寫 |
安裝意義 |
失敗意義 |
未指定順序 |
未排序的應用程式會在已排序的應用程式安裝後才進行安裝。 不保證未排序應用程式中的安裝順序。 |
其他應用程式的安裝失敗,不論是否排序,不會影響未排序應用程式的安裝。 |
重複的順序值 |
相較於相同順序的其他應用程式,該應用程式會依任何順序安裝。 相同順序的所有應用程式會在順序較前的應用程式前、順序較後的應用程式後,進行安裝。 |
若順序較前的應用程式安裝失敗,不會安裝此順序中的應用程式。 若此順序中有任何應用程式安裝失敗,不會安裝順序較後的應用程式。 |
提高順序 |
應用程式會在順序較前的應用程式前、順序較後的應用程式後,進行安裝。 |
若順序較前的應用程式安裝失敗,不會安裝此應用程式。 如果此應用程式無法安裝,則不會安裝順序較高的應用程式。 |
回應將會包含完整的 VM 模型。 以下是相關的元件。
{
"name": "{vm name}",
"id": "{vm id}",
"type": "Microsoft.Compute/virtualMachines",
"location": "{vm location}",
"properties": {
"applicationProfile": {
"galleryApplications": ""
},
"provisioningState": "Updating"
},
"resources": [
{
"name": "VMAppExtension",
"id": "{extension id}",
"type": "Microsoft.Compute/virtualMachines/extensions",
"location": "centraluseuap",
"properties": "@{autoUpgradeMinorVersion=True; forceUpdateTag=7c4223fc-f4ea-4179-ada8-c8a85a1399f5; provisioningState=Creating; publisher=Microsoft.CPlat.Core; type=VMApplicationManagerLinux; typeHandlerVersion=1.0; settings=}"
}
]
}
若 VM 應用程式尚未安裝至 VM,此值會顯示空白。
若要取得 VM 執行個體檢視的結果:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>/instanceView?api-version=2019-03-01
結果如下所示:
{
...
"extensions" [
...
{
"name": "VMAppExtension",
"type": "Microsoft.CPlat.Core.VMApplicationManagerLinux",
"typeHandlerVersion": "1.0.9",
"statuses": [
{
"code": "ProvisioningState/succeeded",
"level": "Info",
"displayStatus": "Provisioning succeeded",
"message": "Enable succeeded: {\n \"CurrentState\": [\n {\n \"applicationName\": \"doNothingLinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install SUCCESS\"\n },\n {
\n \"applicationName\": \"badapplinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install FAILED Error executing command \u0027exit 1\u0027: command terminated with exit status=1\"\n }\n ],\n \"ActionsPerformed\": []\n}
"
}
]
}
...
]
}
VM 應用程式狀態位於執行個體檢視中 VMApp 擴充功能結果的狀態訊息中。
若要取得 VMSS 應用程式的狀態:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/ virtualMachineScaleSets/\<**VMSSName**\>/virtualMachines/<**instanceId**>/instanceView?api-version=2019-03-01
輸出會與稍早 VM 範例類似。