Aplikace virtuálního počítače je typ prostředku v galerii výpočetních prostředků Azure, která zjednodušuje publikování, nasazení, správu, sdílení a globální distribuci aplikací a skriptů pro vaše virtuální počítače.
Aplikace virtuálních počítačů podporují širokou škálu scénářů, včetně vysoce škálovatelných nasazení, požadavků na nízkou latenci, odolnosti proti chybám, zabezpečených důvěryhodných zavedení, konzistence pro celou flotilu, architektur mikroslužeb a správy po nasazení. Přečtěte si další informace o aplikacích virtuálních počítačů.
Pokud chcete vytvářet a nasazovat aplikace na virtuálním počítači Azure, nejprve zabalte aplikaci a nahrajte ji do Azure Storage Účtu jako objekt blob úložiště. Pak vytvořte prostředek Azure VM application a prostředek VM application version, které odkazují na tyto objekty blob úložiště. Azure ukládá a replikuje tyto bloby v účtech regionálních spravovaného úložiště. Nakonec nasaďte aplikaci na libovolný virtuální počítač nebo na Virtual Machine Scale Sets předáním odkazu na aplikaci v applicationProfile.
Diagram znázorňující podrobný proces související s publikováním a nasazením aplikací virtuálních počítačů
Požadavky
- Vytvořte účet úložiště Azure a kontejner storage. Tento kontejner se používá k nahrání souborů aplikace.
- Vytvořte galerii výpočetních prostředků Azure pro ukládání a sdílení prostředků aplikací.
- Vytvořte spravovanou identitu přiřazenou uživatelem a přiřaďte do Azure Compute Gallery
Zabalení aplikace
Před publikováním prostředku aplikace virtuálního počítače v „Azure Compute Gallery“ zabalte soubory aplikace pro nahrání do účtu „Azure Storage“. Následující diagram znázorňuje možné struktury složek pro uspořádání souborů aplikace:
Snímek obrazovky znázorňující strukturu složek doporučenou k nahrání a vytváření aplikací virtuálních počítačů
1. Zabalení souborů aplikace
Aplikace virtuálního počítače vyžaduje jako balíček aplikace jeden soubor.
- Pokud instalace aplikace vyžaduje jeden spustitelný soubor (.exe, .msi, .sh, .ps atd.), můžete ho použít jako balíček aplikace.
- Pokud vaše aplikace vyžaduje více souborů (spustitelné soubory, závislosti, skripty, metadata atd.), archivujte je do jednoho souboru (, , ) a tento soubor použijte jako balíček aplikace.
- U aplikace mikroslužeb můžete každou mikroslužbu zabalit a publikovat jako samostatnou aplikaci virtuálního počítače Azure. Tato modularizace usnadňuje opětovnou použitelnost aplikací, vývoj napříč týmy a sekvenční instalaci mikroslužeb pomocí vlastnosti v souboru applicationProfile.
Přečtěte si další informace o vytváření balíčků aplikací pro aplikace Azure virtuálních počítačů.
2. (Volitelné) Zabalení konfiguračního souboru aplikace
- Konfigurační soubor můžete zadat samostatně pomocí aplikace virtuálního počítače. To snižuje náklady na přenos a uložení při archivaci a dearchivaci balíčků aplikací.
- Konfigurační soubory je možné předat také během nasazování aplikací pomocí vlastnosti v rámci nasazení virtuálního počítače, která umožňuje přizpůsobenou instalaci pro každý virtuální počítač.
- Pokud jsou nastaveny obě vlastnosti, přepíše konfiguraci předanou pomocí .
3. Vytvoření instalačního skriptu
Po stažení aplikace a objektu blob konfigurace na virtuálním počítači Azure spustí zadaný instalační skript pro instalaci aplikace. Instalační skript je k dispozici jako řetězec a má maximální limit znaků 4 096 znaků. Příkazy instalace by se měly zapsat za předpokladu, že balíček aplikace a konfigurační soubor jsou v aktuálním adresáři.
V instalačním skriptu může být potřeba provést několik operací.
(volitelné) Použijte správný interpret příkazů Výchozí interpret příkazů používaný Azure jsou /bin/bash v operačním systému Linux a cmd.exe v operačním systému Windows. Pokud je na počítači nainstalovaný, můžete použít jiný interpret, například Chocolatey nebo PowerShell. Zavolejte spustitelný soubor a předejte mu příkazy. Například: . Pokud používáte PowerShell, musíte použít verzi 3.11.0 modulu Az.Storage.
(volitelné) Přejmenování objektu blob aplikace a objektu blob konfigurace Azure nemůže zachovat původní název objektu blob a přípony souborů. Azure stáhne soubor aplikace s názvem prostředku aplikace virtuálního počítače publikovaného v galerii Azure Compute. Pokud je tedy název aplikace virtuálního počítače "VMApp1", soubor stažený na virtuálním počítači má název VMApp1 bez přípony. Konfigurační soubor má výchozí název "VMApp1-config" bez přípony souboru.
Soubor s příponou souboru můžete přejmenovat pomocí instalačního skriptu nebo můžete také předat názvy a vlastnosti prostředku verze aplikace virtuálního počítače. Azure tyto názvy používá místo výchozích názvů při stahování souborů.
Zrušení archivace objektu blob aplikace Pro archivované balíčky aplikací je potřeba před instalací aplikace zrušit archivaci. Použijte .zip nebo .tar, protože většina operačního systému má integrovanou podporu pro zrušení archivace těchto formátů. V případě jiných formátů se ujistěte, že hostovaný operační systém podporuje.
Převeďte skript na řetězec Instalační skript je předán jako řetězec pro vlastnost install ve verzi prostředku aplikace virtuálního počítače Azure publishingProfile.
Nainstalujte aplikace tiše a synchronně bez výzev uživatelského rozhraní. Vzhledem k tomu, že instalace běží na virtuálním počítači, kde vstup zákazníka není dostupný, musíte použít skryté nebo bezobslužné příznaky instalace. Kromě toho, pokud instalační program aplikace vytváří procesy na pozadí nebo podřízené procesy nebo běží asynchronně, nadřazený skript se může vrátit před dokončením instalace. Pokud chcete zajistit, aby se úplná instalace dokončila, než Azure označí operaci jako úspěšnou, použijte čekací příznaky nebo blokovací příkazy. Tento přístup pomáhá, když instalace zahrnuje několik kroků, které běží asynchronně, nebo je potřeba ověřit dokončení instalace před zahájením následné aplikace v posloupnosti .
K běžným příkladům patří:
-
Windows .msi:
start /wait msiexec /i app.msi /quiet /qn
-
Windows .exe:
start /wait app.exe /silent nebo start /wait app.exe /quiet nebo start /wait app.exe /S
- PowerShell:
- Linux .sh: (skripty prostředí se ve výchozím nastavení spouštějí synchronně)
- Linux .deb: (spouští se synchronně ve výchozím nastavení)
- Linux .rpm: (spouští se synchronně ve výchozím nastavení)
(Volitelné) Nastavení zásad a oprávnění pro správné spuštění Po zrušení archivace je možné obnovit oprávnění k souborům. Před spuštěním souborů je vhodné nastavit správná oprávnění.
(Volitelné) Nastavení podrobného spuštění a protokolování Aplikace virtuálních počítačů automaticky zachytí veškerý výstup z instalačního skriptu a uloží ho do souboru stdout na virtuálním počítači. Pomocí této funkce můžete protokolovat průběh instalace, chyby ladění a ověřit úspěšná nasazení.
- Povolte podrobný režim pro zaznamenání protokolů instalačního programu aplikace. Bash: , PowerShell: , Cmd: .
- Přidejte vlastní zprávy ke sledování průběhu skriptu. Bash: , PowerShell: , Cmd:
Tyto protokoly můžete načíst pomocí funkce Run Command nebo připojením k virtuálnímu počítači. Soubory a soubory se nacházejí v následující cestě:
- Linux:
- Windows:
C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>/
(volitelné) Přesuňte aplikaci a objekt blob konfigurace do příslušného umístění Azure stáhne objekt blob aplikace a objekt blob konfigurace do následujících umístění. Instalační skript musí soubory v případě potřeby přesunout do příslušných umístění.
Linux:
Windows: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.16\Downloads\<application name>\<application version>
Tady je několik ukázkových instalačních skriptů podle přípony souboru aplikačního blobu. Pokud jsou vlastnosti uvedené v názvu a příponě souboru, odeberte kód pro přejmenování souborů v následujících skriptech.
-
.TAR
-
.ZIP
-
.EXE
-
.MSI
-
.DEB
-
. RPM
-
.SH
-
.PS1
Nahraďte názvem aplikace virtuálního počítače v balíčku aplikace (VMApp1) a konfiguračním souborem (VMApp1-config).
Nahraďte požadovaným názvem aplikace.
Nahraďte požadovaným názvem konfigurace.
Instalace pomocí Bash bez konfiguračního souboru:
mv VMApp1 app.tar && tar -xf app.tar && chmod -R +xr . && bash ./install.sh
mv VMApp1 app.tar && tar -xf app.tar && chmod -R +xr . && sudo DEBIAN_FRONTEND=noninteractive dpkg -i ./app.deb
Instalace pomocí Bash s konfiguračním souborem:
mv VMApp1 app.tar && mv VMApp1-config config.yaml && tar -xf app.tar && chmod -R +xr . && bash ./install.sh --config config.yaml
Pokud je konfigurační soubor zabalený v souboru tar
mv VMApp1 app.tar && tar -xf app.tar && chmod -R +xr . && sudo debconf-set-selections < config.cfg && sudo DEBIAN_FRONTEND=noninteractive dpkg -i ./app.deb
Nahraďte názvem aplikace virtuálního počítače v balíčku aplikace (VMApp1) a konfiguračním souborem (VMApp1-config).
Nahraďte požadovaným názvem aplikace.
Nahraďte požadovaným názvem konfigurace.
Následující příklady předpokládají, že aplikace virtuálního počítače instaluje aplikaci Python a pythonInstaller.exe se zabalí do app.zip.
Instalace pomocí CMD bez konfiguračního souboru:
Nahraďte VMApp1 názvem vaší aplikace virtuálního počítače a app.zip požadovaným názvem spustitelného souboru v následujícím skriptu.
ren VMApp1 app.zip && tar -xf app.zip && start /wait pythonInstaller.exe /quiet InstallAllUsers=1 PrependPath=1
Instalace pomocí CMD s konfiguračním souborem:
ren VMApp1 app.zip && tar -xf app.zip && ren VMApp1-config config.json && start /wait pythonInstaller.exe --config config.json /quiet InstallAllUsers=1 PrependPath=1
Pokud je konfigurační soubor součástí balíčku .zip
ren VMApp1 app.zip && tar -xf app.zip && start /wait pythonInstaller.exe --config config.json /quiet InstallAllUsers=1 PrependPath=1
Instalace pomocí PowerShellu bez konfiguračního souboru:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item VMApp1 app.zip; Expand-Archive -Path '.\app.zip' -DestinationPath '.'; Start-Process -FilePath '.\pythonInstaller.exe' -ArgumentList '/quiet','InstallAllUsers=1','PrependPath=1' -Wait -NoNewWindow"
Instalace pomocí PowerShellu s konfiguračním souborem:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item VMApp1 app.zip; Rename-Item VMApp1-config config.json Expand-Archive -Path '.\app.zip' -DestinationPath '.'; Start-Process -FilePath '.\pythonInstaller.exe' -ArgumentList '--config','config.json','/quiet','InstallAllUsers=1','PrependPath=1' -Wait -NoNewWindow"
Pokud je konfigurační soubor součástí balíčku .zip
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item VMApp1 app.zip; Expand-Archive -Path '.\app.zip' -DestinationPath '.'; Start-Process -FilePath '.\pythonInstaller.exe' -ArgumentList '--config','config.json','/quiet','InstallAllUsers=1','PrependPath=1' -Wait -NoNewWindow"
Nahraďte názvem aplikace virtuálního počítače v balíčku aplikace (VMApp1) a konfiguračním souborem (VMApp1-config).
Nahraďte požadovaným názvem aplikace.
Nahraďte požadovaným názvem konfigurace.
Následující příklady předpokládají, že aplikace virtuálního počítače instaluje aplikaci Python pomocí exe.
Instalace pomocí CMD bez konfiguračního souboru:
Nahraďte VMApp1 názvem vaší aplikace virtuálního počítače a pythonInstaller.exe požadovaným názvem pro váš spustitelný soubor.
ren VMApp1 pythonInstaller.exe && start /wait pythonInstaller.exe /quiet InstallAllUsers=1 PrependPath=1
Instalace pomocí CMD s konfiguračním souborem:
ren VMApp1 pythonInstaller.exe && ren VMApp1-config config.json && start /wait pythonInstaller.exe --config config.json /quiet InstallAllUsers=1 PrependPath=1
Instalace pomocí PowerShellu bez konfiguračního souboru:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item VMApp1 pythonInstaller.exe; Start-Process -FilePath '.\pythonInstaller.exe' -ArgumentList '/quiet','InstallAllUsers=1','PrependPath=1' -Wait -NoNewWindow"
Instalace pomocí PowerShellu s konfiguračním souborem:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item VMApp1 pythonInstaller.exe; Rename-Item VMApp1-config config.json; Start-Process -FilePath '.\pythonInstaller.exe' -ArgumentList '--config','config.json','/quiet','InstallAllUsers=1','PrependPath=1' -Wait -NoNewWindow"
Nahraďte názvem aplikace virtuálního počítače v balíčku aplikace (VMApp1) a konfiguračním souborem (VMApp1-config).
Nahraďte požadovaným názvem aplikace.
Nahraďte požadovaným názvem konfigurace.
Následující příklady předpokládají, že aplikace virtuálního počítače instaluje aplikaci Python pomocí MSI.
Instalace pomocí CMD bez konfiguračního souboru:
Nahraďte VMApp1 názvem vaší aplikace virtuálního počítače a pythonInstaller.msi požadovaným názvem souboru MSI.
ren VMApp1 pythonInstaller.msi && msiexec /i pythonInstaller.msi /quiet InstallAllUsers=1 PrependPath=1
Instalace pomocí CMD s konfiguračním souborem:
ren VMApp1 pythonInstaller.msi && ren VMApp1-config config.json && msiexec /i pythonInstaller.msi CONFIGFILE=config.json /quiet InstallAllUsers=1 PrependPath=1
Instalace pomocí PowerShellu bez konfiguračního souboru:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item VMApp1 pythonInstaller.msi; Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i','.\pythonInstaller.msi','/quiet','InstallAllUsers=1','PrependPath=1' -Wait -NoNewWindow"
Instalace pomocí PowerShellu s konfiguračním souborem:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item VMApp1 pythonInstaller.msi; Rename-Item VMApp1-config config.json; Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i','.\pythonInstaller.msi','CONFIGFILE=config.json','/quiet','InstallAllUsers=1','PrependPath=1' -Wait -NoNewWindow"
Nahraďte názvem aplikace virtuálního počítače v balíčku aplikace (VMApp1) a konfiguračním souborem (VMApp1-config).
Nahraďte požadovaným názvem aplikace.
Nahraďte požadovaným názvem konfigurace.
Instalace pomocí Bash bez konfiguračního souboru:
mv VMApp1 app.deb && chmod +xr app.deb && sudo DEBIAN_FRONTEND=noninteractive dpkg -i ./app.deb
Instalace pomocí Bash s konfiguračním souborem:
mv VMApp1 app.deb && mv VMApp1-config config.cfg && chmod +xr app.deb && sudo debconf-set-selections < config.cfg && sudo DEBIAN_FRONTEND=noninteractive dpkg -i ./app.deb
Nahraďte názvem aplikace vašeho virtuálního počítače v balíčku aplikace (VMApp1) a v konfiguračním souboru (VMApp1-config).
Nahraďte požadovaným názvem aplikace.
Nahraďte požadovaným názvem konfigurace.
Instalace pomocí Bash bez konfiguračního souboru:
mv VMApp1 app.rpm && chmod +xr app.rpm && sudo rpm -ivh ./app.rpm
Instalace pomocí Bash s konfiguračním souborem:
mv VMApp1 app.rpm && mv VMApp1-config config.cfg && chmod +xr app.rpm && sudo rpm -ivh ./app.rpm --rcfile config.cfg
Nahraďte názvem aplikace virtuálního počítače v balíčku aplikace (VMApp1) a konfiguračním souborem (VMApp1-config).
Nahraďte požadovaným názvem skriptu.
Nahraďte požadovaným názvem konfigurace.
Instalace pomocí Bash bez konfiguračního souboru:
mv VMApp1 install.sh && chmod +xr install.sh && bash ./install.sh
Instalace pomocí Bash s konfiguračním souborem:
mv VMApp1 install.sh && mv VMApp1-config config.yaml && chmod +xr install.sh && bash ./install.sh --config config.yaml
Nahraďte názvem aplikace virtuálního počítače v balíčku aplikace (VMApp1) a konfiguračním souborem (VMApp1-config).
Nahraďte požadovaným názvem skriptu.
Nahraďte požadovaným názvem konfigurace.
Instalace pomocí PowerShellu bez konfiguračního souboru:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item -Path '.\VMApp1' -NewName 'install.ps1'; .\install.ps1"
Instalace pomocí PowerShellu s konfiguračním souborem:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Rename-Item -Path '.\VMApp1' -NewName 'install.ps1'; Rename-Item -Path '.\VMApp1-config' -NewName 'config.json'; .\install.ps1 -ConfigFile 'config.json'"
4. Vytvoření skriptu pro odebrání
Skript umožňuje definovat operace pro odebrání aplikace. Skript je k dispozici jako řetězec a má maximální limit znaků 4 096 znaků. Za předpokladu, že balíček aplikace a konfigurační soubor jsou v aktuálním adresáři, napište příkazy. Během operace odinstalace Azure spustí odinstalační skript a pak odstraní všechny soubory z úložiště.
Existuje několik operací, které musí skript provést.
- Odinstalace aplikace: Správně odinstalujte aplikaci z virtuálního počítače. Například:
CMD na Windows:
start /wait uninstall.exe /quiet
start /wait python.exe /uninstall /quiet
start /wait msiexec /x app.msi /quiet /qn
PowerShell na Windows:
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Start-Process -FilePath '.\uninstall.exe' -ArgumentList '/quiet' -Wait -NoNewWindow"
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Start-Process -FilePath '.\python.exe' -ArgumentList '/uninstall','/quiet' -Wait -NoNewWindow"
powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "Start-Process -FilePath 'msiexec.exe' -ArgumentList '/x','.\app.msi','/quiet','/qn' -Wait -NoNewWindow"
Bash v Linuxu:
sudo ./uninstall.sh
sudo apt remove -y app
sudo rpm -e app
- Odebrání zbytkových souborů: Pokud instalace aplikace vytvoří soubory v jiných částech systému souborů, odeberte tyto soubory.
Nahrání souborů aplikace do Azure účtu úložiště
Důležité
Před nahráním souborů nebo generováním adres URL SAS přiřaďte role uživateli, instančnímu objektu nebo spravované identitě, které provádějí tyto operace s cílovým účtem úložiště nebo kontejnerem:
- Přispěvatel dat v objektech blob služby Storage nebo Vlastník dat objektů blob služby Storage: Vyžaduje se nahrání, úprava nebo odstranění objektů blob.
- Pro generování SAS s Azure AD (například pomocí
--auth-mode přihlášení v rozhraní příkazového řádku nebo PowerShellu) musíte přiřadit delegátora objektu Blob úložiště v oboru účtu úložiště.
1. Instalujte aplikaci a konfigurační soubory do kontejner v účtu úložiště Azure.
Nahrajte zabalenou aplikaci a volitelný konfigurační soubor jako objekty blob. Blobové objekty bloku fungují ve většině scénářů.
Volitelně, pokud potřebujete použít objekty blob stránky, můžete soubory před nahráním bajtově zarovnat pomocí jednoho z následujících skriptů:
-
Rozhraní příkazového řádku
-
PowerShell
inputFile="<the file you want to pad>"
# Get the file size
fileSize=$(stat -c %s "$inputFile")
# Calculate the remainder when divided by 512
remainder=$((fileSize % 512))
if [ "$remainder" -ne 0 ]; then
# Calculate how many bytes to pad
difference=$((512 - remainder))
# Create padding (empty bytes)
dd if=/dev/zero bs=1 count=$difference >> "$inputFile"
fi
$inputFile = <the file you want to pad>
$fileInfo = Get-Item -Path $inputFile
$remainder = $fileInfo.Length % 512
if ($remainder -ne 0){
$difference = 512 - $remainder
$bytesToPad = [System.Byte[]]::CreateInstance([System.Byte], $difference)
Add-Content -Path $inputFile -Value $bytesToPad -Encoding Byte
}
2. Vygenerování adresy URL SAS nebo objektu blob pro balíček aplikace a konfigurační soubor
Jakmile se aplikace a konfigurační soubory nahrají do účtu úložiště, musíte pro tyto objekty blob vygenerovat adresu URL objektu blob nebo adresu URL SAS s oprávněním ke čtení. Tyto adresy URL se pak zadají jako referenční informace při vytváření prostředku verze aplikace virtuálního počítače.
Poznámka:
Pro lepší zabezpečení a ochranu osobních údajů důrazně doporučujeme používat adresu URL objektu blob se spravovanou identitou.
Použijte URL objektu blob:
Použijte adresu URL SAS:
- Pokud je účet úložiště zakázaný pro anonymní přístup a spravovaná identita není přiřazená ke službě Azure Compute Gallery.
cs-CZ: Adresa URL objektu blob = https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${BLOB_NAME} Adresa URL SAS = https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${BLOB_NAME}?${SAS_TOKEN}
-
Rozhraní příkazového řádku pomocí URL blobu
-
CLI s využitím adresy URL SAS
-
PowerShell s použitím URL adresy objektu blob
-
PowerShell s využitím adresy URL SAS
-
Portál
Pokud je spravovaná identita přiřazena ke službě Azure Compute Gallery, použijte následující skript. Tento přístup používá adresy URL objektů blob bez tokenů SAS.
#!/bin/bash
set -euo pipefail
# === CONFIGURATION ===
STORAGE_ACCOUNT="your-storage-account-name"
CONTAINER_NAME="your-container-name"
APP_FILE="./path/to/your-app-file" # Path to your application payload file
CONFIG_FILE="./path/to/your-config-file" # Path to your configuration file (optional)
# === LOGIN (if not already logged in) ===
az login --only-show-errors
# === CREATE CONTAINER IF NOT EXISTS ===
az storage container create \
--name "$CONTAINER_NAME" \
--account-name "$STORAGE_ACCOUNT" \
--auth-mode login \
--only-show-errors
# === UPLOAD APPLICATION FILE ===
APP_BLOB_NAME=$(basename "$APP_FILE")
az storage blob upload \
--account-name "$STORAGE_ACCOUNT" \
--container-name "$CONTAINER_NAME" \
--name "$APP_BLOB_NAME" \
--file "$APP_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
# === UPLOAD CONFIG FILE (optional) ===
if [ -n "$CONFIG_FILE" ] && [ -f "$CONFIG_FILE" ]; then
CONFIG_BLOB_NAME=$(basename "$CONFIG_FILE")
az storage blob upload \
--account-name "$STORAGE_ACCOUNT" \
--container-name "$CONTAINER_NAME" \
--name "$CONFIG_BLOB_NAME" \
--file "$CONFIG_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
fi
# === GENERATE BLOB URLs ===
echo "Generating Blob URLs..."
APP_BLOB_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${APP_BLOB_NAME}"
echo "Application file: $APP_BLOB_URL"
if [ -n "$CONFIG_FILE" ] && [ -f "$CONFIG_FILE" ]; then
CONFIG_BLOB_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${CONFIG_BLOB_NAME}"
echo "Configuration file: $CONFIG_BLOB_URL"
fi
Pokud má účet úložiště zakázaný anonymní přístup a spravovaná identita není přiřazená ke službě Azure Compute Gallery, použijte následující skript. Tento přístup generuje časově omezené tokeny SAS.
#!/bin/bash
set -euo pipefail
# === CONFIGURATION ===
STORAGE_ACCOUNT="yourstorageaccount"
CONTAINER_NAME="yourcontainer"
APP_FILE="./your-app-file" # Path to your application payload file
CONFIG_FILE="./your-config-file" # Path to your configuration file (optional)
SAS_EXPIRY_HOURS=24
# === LOGIN (if not already logged in) ===
az login --only-show-errors
# === CREATE CONTAINER IF NOT EXISTS ===
az storage container create \
--name "$CONTAINER_NAME" \
--account-name "$STORAGE_ACCOUNT" \
--auth-mode login \
--only-show-errors
# === UPLOAD APPLICATION FILE ===
APP_BLOB_NAME=$(basename "$APP_FILE")
az storage blob upload \
--account-name "$STORAGE_ACCOUNT" \
--container-name "$CONTAINER_NAME" \
--name "$APP_BLOB_NAME" \
--file "$APP_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
# === UPLOAD CONFIG FILE (optional) ===
if [ -n "$CONFIG_FILE" ] && [ -f "$CONFIG_FILE" ]; then
CONFIG_BLOB_NAME=$(basename "$CONFIG_FILE")
az storage blob upload \
--account-name "$STORAGE_ACCOUNT" \
--container-name "$CONTAINER_NAME" \
--name "$CONFIG_BLOB_NAME" \
--file "$CONFIG_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
fi
# === GENERATE SAS URLs ===
# Note: Using --auth-mode login --as-user requires "Storage Blob Delegator" role at the storage account scope
echo "Generating SAS URLs..."
EXPIRY=$(date -u -d "+$SAS_EXPIRY_HOURS hours" '+%Y-%m-%dT%H:%MZ')
APP_SAS_TOKEN=$(az storage blob generate-sas \
--account-name "$STORAGE_ACCOUNT" \
--container-name "$CONTAINER_NAME" \
--name "$APP_BLOB_NAME" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
APP_SAS_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${APP_BLOB_NAME}?${APP_SAS_TOKEN}"
echo "Application file: $APP_SAS_URL"
if [ -n "$CONFIG_FILE" ] && [ -f "$CONFIG_FILE" ]; then
CONFIG_SAS_TOKEN=$(az storage blob generate-sas \
--account-name "$STORAGE_ACCOUNT" \
--container-name "$CONTAINER_NAME" \
--name "$CONFIG_BLOB_NAME" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
CONFIG_SAS_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${CONFIG_BLOB_NAME}?${CONFIG_SAS_TOKEN}"
echo "Configuration file: $CONFIG_SAS_URL"
fi
Pokud je spravovaná identita přiřazena Azure Compute Gallery, použijte následující skript. Tento přístup používá URL adresy blobů bez tokenů SAS.
# === CONFIGURATION ===
$subscriptionId = "your-subscription-id"
$resourceGroupName = "yourresourcegroup"
$storageAccountName = "yourstorageaccount"
$containerName = "yourcontainer"
$appFile = "C:\path\to\your-app-file" # Path to your application payload file
$configFile = "C:\path\to\your-config-file" # Path to your configuration file (optional, set to $null if not needed)
$sasExpiryHours = 24
# === LOGIN (if not already logged in) ===
Connect-AzAccount -Subscription $subscriptionId
# === GET STORAGE CONTEXT ===
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName
$context = $storageAccount.Context
# === CREATE CONTAINER IF NOT EXISTS ===
$container = Get-AzStorageContainer -Name $containerName -Context $context -ErrorAction SilentlyContinue
if (-not $container) {
New-AzStorageContainer -Name $containerName -Context $context -Permission Off
}
# === UPLOAD APPLICATION FILE ===
$appBlobName = Split-Path -Leaf $appFile
Set-AzStorageBlobContent `
-File $appFile `
-Container $containerName `
-Blob $appBlobName `
-Context $context `
-Force
# === UPLOAD CONFIG FILE (optional) ===
if ($configFile -and (Test-Path $configFile)) {
$configBlobName = Split-Path -Leaf $configFile
Set-AzStorageBlobContent `
-File $configFile `
-Container $containerName `
-Blob $configBlobName `
-Context $context `
-Force
}
# === GENERATE BLOB URLs ===
Write-Host "`nGenerating Blob URLs..."
$appBlobUrl = "https://$storageAccountName.blob.core.windows.net/$containerName/$appBlobName"
Write-Host "Application file: $appBlobUrl"
if ($configFile -and (Test-Path $configFile)) {
$configBlobUrl = "https://$storageAccountName.blob.core.windows.net/$containerName/$configBlobName"
Write-Host "Configuration file: $configBlobUrl"
}
Pokud má účet úložiště zakázaný anonymní přístup a spravovaná identita není přiřazená k Azure Výpočetní galerii použijte následující skript. Tento přístup generuje časově omezené tokeny SAS.
# === CONFIGURATION ===
$subscriptionId = "your-subscription-id"
$resourceGroupName = "yourresourcegroup"
$storageAccountName = "yourstorageaccount"
$containerName = "yourcontainer"
$appFile = "C:\path\to\your-app-file" # Path to your application payload file
$configFile = "C:\path\to\your-config-file" # Path to your configuration file (optional, set to $null if not needed)
$sasExpiryHours = 24
# === LOGIN (if not already logged in) ===
Connect-AzAccount -Subscription $subscriptionId
# === GET STORAGE CONTEXT ===
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName
$context = $storageAccount.Context
# === CREATE CONTAINER IF NOT EXISTS ===
$container = Get-AzStorageContainer -Name $containerName -Context $context -ErrorAction SilentlyContinue
if (-not $container) {
New-AzStorageContainer -Name $containerName -Context $context -Permission Off
}
# === UPLOAD APPLICATION FILE ===
$appBlobName = Split-Path -Leaf $appFile
Set-AzStorageBlobContent `
-File $appFile `
-Container $containerName `
-Blob $appBlobName `
-Context $context `
-Force
# === UPLOAD CONFIG FILE (optional) ===
if ($configFile -and (Test-Path $configFile)) {
$configBlobName = Split-Path -Leaf $configFile
Set-AzStorageBlobContent `
-File $configFile `
-Container $containerName `
-Blob $configBlobName `
-Context $context `
-Force
}
# === GENERATE SAS URLs ===
Write-Host "`nGenerating SAS URLs..."
$expiryTime = (Get-Date).AddHours($sasExpiryHours)
$appSasToken = New-AzStorageBlobSASToken `
-Container $containerName `
-Blob $appBlobName `
-Permission r `
-ExpiryTime $expiryTime `
-Context $context
$appSasUrl = "https://$storageAccountName.blob.core.windows.net/$containerName/$appBlobName$appSasToken"
Write-Host "Application file: $appSasUrl"
if ($configFile -and (Test-Path $configFile)) {
$configSasToken = New-AzStorageBlobSASToken `
-Container $containerName `
-Blob $configBlobName `
-Permission r `
-ExpiryTime $expiryTime `
-Context $context
$configSasUrl = "https://$storageAccountName.blob.core.windows.net/$containerName/$configBlobName$configSasToken"
Write-Host "Configuration file: $configSasUrl"
}
- Na portálu Azure přejděte ke svému účtu úložiště a vyberte Containers.
- Vyberte kontejner (nebo ho vytvořte) a pak vyberte Nahrát.
- Přejděte k balíčku aplikace a konfiguračním souborům, vyberte je a vyberte Nahrát.
- Po dokončení nahrávání vyberte každý objekt blob a zkopírujte adresu URL. Vygenerujte tokeny SAS, pokud není spravovaná identita připojená k výpočetní galerii nebo je zakázaný anonymní přístup.
Podrobný postup najdete v tématu Nahrání objektů blob do Azure Storage pomocí portálu.
Vytvoření aplikace virtuálního počítače
Pokud chcete vytvořit aplikaci virtuálního počítače, nejprve vytvořte prostředek aplikace virtuálního počítače, který popisuje aplikaci. Potom v něm vytvořte prostředek verze aplikace VM, který obsahuje aplikační obsah VM a skripty pro instalaci, aktualizaci a odstranění aplikace. Datová část se dodává pomocí adresy URL objektu blob nebo adresy URL SAS kontejneru objektů blob v Azure Storage účtu.
Další informace o jednotlivých vlastnostech najdete ve schématu pro aplikaci virtuálního počítače a verzi prostředku aplikace.
Pomocí následující šablony ARM vytvořte Azure Compute Gallery, aplikaci pro virtuální počítače a verzi aplikace pro virtuální počítače. Tato šablona ukazuje klíčové vlastnosti a možnosti konfigurace pro publikování balíčku aplikace.
{
"$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 (Example: 1.0.0)"
}
},
"location": {
"type": "string",
"defaultValue": "West US"
},
"supportedOSType": {
"type": "string",
"allowedValues": ["Windows", "Linux"]
},
"endOfLifeDate": {
"type": "string",
"metadata": {
"description": "Optional. This property is for information only and doesn't block app deployment."
}
},
"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. Example: echo 'Installing application...'"
}
},
"updateScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to update the application. Example: echo 'Updating application...'"
}
},
"removeScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to delete the application. Example: 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')]"
}
}
]
}
Vytvoření definice aplikace virtuálního počítače pomocí rozhraní API pro vytvoření aplikace galerie
- Vytváříme definici aplikace virtuálního počítače s názvem myApp.
PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{applicationName}?api-version=2024-03-03
{
"location": "West US",
"name": "myApp",
"properties": {
"supportedOSType": "Windows | Linux",
"endOfLifeDate": "2030-01-01",
"description": "Description of the App",
"eula": "Link to End-User License Agreement (EULA)",
"privacyStatementUri": "Link to privacy statement for the application",
"releaseNoteUri": "Link to release notes for the application"
}
}
Vytvořte verzi aplikace virtuálního počítače pomocí rozhraní API pro vytvoření verze aplikace galerie.
Dále vytváříme verzi v rámci definice aplikace. Bere adresu URL blob/SAS vytvořenou v předchozím kroku k načtení blobu aplikace a jeho konfigurace z účtu úložiště.
- Aktualizujte mediaLink, nainstalujte a odeberte vlastnosti aplikace.
- (Volitelné) Aktualizujte defaultConfigurationLink tak, aby předával konfigurační soubor.
- (Volitelné) Aktualizujte packageFileName a configFileName a povolte Azure stahování souborů s tímto názvem. Tyto vlastnosti eliminují potřebu přejmenovat stažené soubory v instalačním skriptu.
PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{applicationName}/versions/{versionName}?api-version=2024-03-03
{
"location": "West US",
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "Blob or SAS URL of application blob",
"defaultConfigurationLink": "Blob or SAS URL of configuration blob. Optional"
},
"manageActions": {
"install": "Install script for application as string",
"remove": "Uninstall script for application as string",
"update": "Update script for application as string. Optional "
},
"targetRegions": [
{
"name": "West US",
"regionalReplicaCount": 1
},
{
"name": "East US. Optional"
}
]
"endofLifeDate": "2030-01-01",
"replicaCount": 1,
"excludeFromLatest": false,
"storageAccountType": "PremiumV2_LRS | Premium_LRS | Standard_LRS | Standard_ZRS",
"safetyProfile": {
"allowDeletionOfReplicatedLocations": false
},
"settings": {
"scriptBehaviorAfterReboot": "None | Rerun",
"configFileName": "Name for downloaded configuration file on the VM",
"packageFileName": "Name for downloaded application file on the VM"
}
}
}
Pomocí příkazu az sig gallery-application create vytvořte definici aplikace virtuálního počítače.
- Vytváříme definici aplikace virtuálního počítače s názvem myApp pro virtuální počítače založené na Linuxu.
- Aplikace virtuálních počítačů vyžadují Azure CLI verze 2.30.0 nebo novější.
application_name="myApp"
gallery_name="myGallery"
resource_group="myResourceGroup"
location="East US"
os_type="Linux"
az sig gallery-application create \
--application-name "$application_name" \
--gallery-name "$gallery_name" \
--resource-group "$resource_group" \
--os-type "$os_type" \
--location "$location"
Vytvořte verzi aplikace virtuálního počítače pomocí příkazu az sig gallery-application version create.
Dále vytváříme verzi v rámci definice aplikace. Přebírá adresu URL objektu blob nebo SAS vytvořenou v předchozím kroku k načtení objektu blob aplikace z účtu úložiště.
- Aktualizujte package_url, install_command, remove_command pro vaši aplikaci.
- (Volitelné) Odkomentujte a aktualizujte config_url a default-configuration-file-link, aby bylo možné volitelně předat konfigurační soubor.
- (Volitelné) Aktualizujte package_file_name a config_file_name. Azure stahuje soubory s tímto názvem a eliminuje nutnost přejmenovat stažené soubory v instalačním skriptu.
version_name="1.0.0"
package_url="Blob or SAS URL for application blob"
package_file_name="Name to give for downloaded application file on VM"
# config_url="Blob or SAS URL for configuration"
# config_file_name="Name to give for downloaded config file on VM"
install_command="install script for your application"
remove_command="uninstall script for you application"
target_regions='[
{"name": "South Central US", "regionalReplicaCount": 2},
{"name": "West Europe", "regionalReplicaCount": 1}
]'
az sig gallery-application version create \
--version-name "$version_name" \
--application-name "$application_name" \
--gallery-name "$gallery_name" \
--location "$location" \
--resource-group "$resource_group" \
--package-file-link "$package_url" \
--package-file-name "$package_file_name" \
--install-command "$install_command" \
--remove-command "$remove_command" \
--target-regions "$target_regions"
# --default-configuration-file-link "$config_url" \
# --config-file-name "$config_file_name" \
Vytvořte definici aplikace virtuálního počítače pomocí cmdletu New-AzGalleryApplication.
- Vytváříme linuxovou aplikaci s názvem myApp v myGallery Azure Compute Gallery a ve skupině prostředků myGallery.
- Podle potřeby nahraďte hodnoty proměnných.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$description = "Backend Linux application for finance."
$location = "East US"
New-AzGalleryApplication `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-Location $location `
-Name $applicationName `
-SupportedOSType Windows `
-Description $description
Vytvořte verzi aplikace virtuálního počítače pomocí rutiny New-AzGalleryApplicationVersion.
Dále vytváříme verzi v rámci definice aplikace. Přebírá adresu URL objektu blob nebo SAS vytvořenou v předchozím kroku k načtení objektu blob aplikace z účtu úložiště.
- Aktualizujte package_url, install_command, remove_command pro vaši aplikaci.
- (Volitelné) Odkomentujte a aktualizujte config_url a default-configuration-file-link, aby bylo možné volitelně předat konfigurační soubor.
- (Volitelné) Aktualizujte package_file_name a config_file_name. Azure stahuje soubory s tímto názvem a eliminuje nutnost přejmenovat stažené soubory v instalačním skriptu.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$location = "East US"
$applicationName = "myApp"
$version = "1.0.0"
$package_url = "Blob or SAS URL for application blob in storage account"
$package_file_name="Name to give for downloaded application file on VM"
# $config_url = "Blob or SAS URL for configuration blob in storage account"
# $config_file_name="Name to give for downloaded config file on VM"
$install_command = "Install script for your application"
$remove_command = "Uninstall script for your application"
$target_regions = @(
@{ Name = "South Central US"; RegionalReplicaCount = 2 },
@{ Name = "West Europe"; RegionalReplicaCount = 1 }
)
New-AzGalleryApplicationVersion `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-GalleryApplicationName $applicationName `
-Name $version `
-PackageFileLink $package_url `
-PackageFileName $package_file_name `
-Location $location `
-Install $install_command `
-Remove $remove_command `
-TargetRegion $target_regions
# -DefaultConfigFileLink $config_url `
# -ConfigFileName $config_file_name `
- Přejděte na portál Azure a vyhledejte a vyberte Azure Compute Gallery.
- V seznamu vyberte galerii, kterou chcete použít.
- Na stránce galerie vyberte Přidat v horní části stránky a pak v rozevíracím seznamu vyberte definici aplikace virtuálního počítače. Otevře se stránka Vytvořit definici aplikace virtuálního počítače.
- Na kartě Basics zadejte název aplikace a zvolte, jestli je aplikace určená pro virtuální počítače s Linuxem nebo Windows.
- Pokud chcete pro definici aplikace virtuálního počítače zadat některá z následujících volitelných nastavení, vyberte kartu Možnosti publikování :
- Popis definice aplikace virtuálního počítače
- Datum konce životnosti
- Odkaz na licenční smlouvu s koncovým uživatelem (EULA)
- URI zásad ochrany osobních údajů
- URI pro poznámky k vydání
- Až budete hotovi, vyberte Zkontrolovat a vytvořit.
- Po dokončení ověření vyberte Vytvořit , aby byla definice nasazena.
- Po dokončení nasazení vyberte Přejít k prostředku.
- Na stránce aplikace vyberte Vytvořit verzi aplikace virtuálního počítače. Otevře se stránka Vytvořit verzi aplikace virtuálního počítače.
- Zadejte číslo verze, například 1.0.0.
- Vyberte oblast, do které se balíčky aplikace nahrají.
- V části Balíček zdrojové aplikace vyberte Procházet. Vyberte účet úložiště a pak kontejner, ve kterém se nachází váš balíček. Vyberte balíček ze seznamu a pak zvolte Vybrat, když jste hotovi. Případně můžete v případě potřeby vložit identifikátor URI SAS do tohoto pole.
- Zadejte instalační skript.
- Zadejte skript pro odinstalaci.
- Volitelně můžete zadat aktualizační skript.
- Pokud máte výchozí konfigurační soubor nahraný do účtu úložiště, můžete ho vybrat ve výchozí konfiguraci.
- Pokud nechcete, aby se tato verze při vytváření virtuálního počítače zobrazovala jako nejnovější verze, vyberte možnost Vyloučit z nejnovější verze.
- Pro datum ukončení životnosti zvolte datum v budoucnu, které chcete sledovat, kdy má být tato verze vyřazena. Neodstraní se ani neodebere automaticky, jenom pro vaše vlastní sledování.
- Pokud chcete replikovat tuto verzi do jiných oblastí, vyberte kartu Replikace , přidejte další oblasti a proveďte změny počtu replik na každou oblast. Původní oblast, ve které byla vaše verze vytvořená, musí být v seznamu a nedá se odebrat.
- Až budete hotovi s prováděním změn, vyberte Zkontrolovat + vytvořit v dolní části stránky.
- Jakmile ověření projde, vyberte Vytvořit k nasazení verze aplikace virtuálního počítače.
name: Deploy Azure VM Application
on:
push:
branches:
- main
env:
APP_FILE: app.exe
CONFIG_FILE: app-config.json
AZURE_RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }}
AZURE_LOCATION: ${{ secrets.AZURE_LOCATION }}
AZURE_STORAGE_ACCOUNT: ${{ secrets.AZURE_STORAGE_ACCOUNT }}
AZURE_CONTAINER_NAME: ${{ secrets.AZURE_CONTAINER_NAME }}
GALLERY_NAME: ${{ secrets.GALLERY_NAME }}
APPLICATION_NAME: ${{ secrets.AZURE_VM_APPLICATION_NAME }}
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Upload files to Azure Blob Storage
run: |
set -euo pipefail
echo "Creating container if missing..."
az storage container create \
--name "$AZURE_CONTAINER_NAME" \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--auth-mode login \
--only-show-errors
echo "Uploading files..."
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--file "$APP_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--file "$CONFIG_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
- name: Create VM Application if missing
run: |
set -euo pipefail
echo "Checking for existing VM Application..."
if ! az sig gallery-application show \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" &>/dev/null; then
az sig gallery-application create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--location "$AZURE_LOCATION" \
--os-type Windows
fi
- name: Generate SAS URLs
id: sas
run: |
set -euo pipefail
echo "Generating SAS URLs valid for 24 hours..."
EXPIRY=$(date -u -d "+1 day" '+%Y-%m-%dT%H:%MZ')
APP_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
CONFIG_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
echo "APP_SAS=$APP_SAS" >> $GITHUB_ENV
echo "CONFIG_SAS=$CONFIG_SAS" >> $GITHUB_ENV
- name: Create VM Application Version
run: |
set -euo pipefail
MAJOR=1
MINOR=0
PATCH=$(date +%Y%m%d)
VERSION="$MAJOR.$MINOR.$PATCH"
INSTALL_CMD=$(jq -Rs '.' < install-script-as-string.txt)
REMOVE_CMD=$(jq -Rs '.' < uninstall-script-as-string.txt)
PACKAGE_URL="https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${APP_FILE}?${APP_SAS}"
CONFIG_URL="https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${CONFIG_FILE}?${CONFIG_SAS}"
az sig gallery-application version create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--version-name "$VERSION" \
--location "$AZURE_LOCATION" \
--package-file-link "$PACKAGE_URL" \
--default-configuration-file-link "$CONFIG_URL" \
--install-command "$INSTALL_CMD" \
--remove-command "$REMOVE_CMD" \
--only-show-errors
trigger:
branches:
include: [ main ]
variables:
APP_FILE: app.exe
CONFIG_FILE: app-config.json
AZURE_RESOURCE_GROUP: $(AZURE_RESOURCE_GROUP)
AZURE_LOCATION: $(AZURE_LOCATION)
AZURE_STORAGE_ACCOUNT: $(AZURE_STORAGE_ACCOUNT)
AZURE_CONTAINER_NAME: $(AZURE_CONTAINER_NAME)
GALLERY_NAME: $(GALLERY_NAME)
APPLICATION_NAME: $(AZURE_VM_APPLICATION_NAME)
stages:
- stage: DeployVMApp
displayName: Upload files and deploy Azure VM Application
jobs:
- job: Deploy
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- task: AzureCLI@2
displayName: Upload app and config to Blob
inputs:
azureSubscription: 'AzureServiceConnection'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
set -euo pipefail
echo "Creating container if it doesn't exist..."
az storage container create \
--name "$AZURE_CONTAINER_NAME" \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--auth-mode login \
--only-show-errors
echo "Uploading files..."
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--file "$APP_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--file "$CONFIG_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
- task: AzureCLI@2
displayName: Create VM Application Definition
inputs:
azureSubscription: 'AzureServiceConnection'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
set -euo pipefail
echo "Checking for existing VM Application..."
if ! az sig gallery-application show \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" &>/dev/null; then
echo "Creating new VM Application..."
az sig gallery-application create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--location "$AZURE_LOCATION" \
--os-type Windows
else
echo "VM Application definition already exists."
fi
- task: AzureCLI@2
displayName: Generate SAS URLs
inputs:
azureSubscription: 'AzureServiceConnection'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
set -euo pipefail
echo "Generating SAS URLs valid for 24 hours..."
EXPIRY=$(date -u -d "+1 day" '+%Y-%m-%dT%H:%MZ')
APP_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
CONFIG_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
echo "##vso[task.setvariable variable=APP_SAS]$APP_SAS"
echo "##vso[task.setvariable variable=CONFIG_SAS]$CONFIG_SAS"
- task: AzureCLI@2
displayName: Create VM Application Version
inputs:
azureSubscription: 'AzureServiceConnection'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
set -euo pipefail
MAJOR=1
MINOR=0
PATCH=$(date +%Y%m%d)
VERSION="$MAJOR.$MINOR.$PATCH"
INSTALL_CMD=$(jq -Rs '.' < install-script-as-string.txt)
REMOVE_CMD=$(jq -Rs '.' < uninstall-script-as-string.txt)
PACKAGE_URL="https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${APP_FILE}?${APP_SAS}"
CONFIG_URL="https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${CONFIG_FILE}?${CONFIG_SAS}"
az sig gallery-application version create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--version-name "$VERSION" \
--location "$AZURE_LOCATION" \
--package-file-link "$PACKAGE_URL" \
--default-configuration-file-link "$CONFIG_URL" \
--install-command "$INSTALL_CMD" \
--remove-command "$REMOVE_CMD" \
--only-show-errors
stages:
- deploy
variables:
APP_FILE: "app.exe"
CONFIG_FILE: "app-config.json"
AZURE_RESOURCE_GROUP: "$AZURE_RESOURCE_GROUP"
AZURE_LOCATION: "$AZURE_LOCATION"
AZURE_STORAGE_ACCOUNT: "$AZURE_STORAGE_ACCOUNT"
AZURE_CONTAINER_NAME: "$AZURE_CONTAINER_NAME"
GALLERY_NAME: "$GALLERY_NAME"
APPLICATION_NAME: "$AZURE_VM_APPLICATION_NAME"
deploy_vm_app:
image: mcr.microsoft.com/azure-cli
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == "main"
script:
- az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID"
- az account set --subscription "$AZURE_SUBSCRIPTION_ID"
- |
echo "Creating container and uploading files..."
az storage container create \
--name "$AZURE_CONTAINER_NAME" \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--auth-mode login \
--only-show-errors
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--file "$APP_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--file "$CONFIG_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
- |
echo "Checking for existing VM Application..."
if ! az sig gallery-application show \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" &>/dev/null; then
echo "Creating VM Application definition..."
az sig gallery-application create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--location "$AZURE_LOCATION" \
--os-type Windows \
--only-show-errors
else
echo "VM Application already exists."
fi
- |
echo "Generating SAS URLs and creating VM Application Version..."
EXPIRY=$(date -u -d "+1 day" '+%Y-%m-%dT%H:%MZ')
APP_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
CONFIG_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
MAJOR=1
MINOR=0
PATCH=$(date +%Y%m%d)
VERSION="$MAJOR.$MINOR.$PATCH"
echo "Creating VM Application Version: $VERSION"
INSTALL_CMD=$(jq -Rs '.' < install-script-as-string.txt)
REMOVE_CMD=$(jq -Rs '.' < uninstall-script-as-string.txt)
az sig gallery-application version create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--version-name "$VERSION" \
--location "$AZURE_LOCATION" \
--package-file-link "https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${APP_FILE}?${APP_SAS}" \
--default-configuration-file-link "https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${CONFIG_FILE}?${CONFIG_SAS}" \
--install-command "$INSTALL_CMD" \
--remove-command "$REMOVE_CMD" \
--only-show-errors
pipeline {
agent any
environment {
APP_FILE = 'app.exe'
CONFIG_FILE = 'app-config.json'
AZURE_RESOURCE_GROUP = credentials('AZURE_RESOURCE_GROUP')
AZURE_LOCATION = credentials('AZURE_LOCATION')
AZURE_STORAGE_ACCOUNT = credentials('AZURE_STORAGE_ACCOUNT')
AZURE_CONTAINER_NAME = credentials('AZURE_CONTAINER_NAME')
GALLERY_NAME = credentials('GALLERY_NAME')
APPLICATION_NAME = credentials('AZURE_VM_APPLICATION_NAME')
AZURE_CLIENT_ID = credentials('AZURE_CLIENT_ID')
AZURE_CLIENT_SECRET = credentials('AZURE_CLIENT_SECRET')
AZURE_TENANT_ID = credentials('AZURE_TENANT_ID')
AZURE_SUBSCRIPTION_ID = credentials('AZURE_SUBSCRIPTION_ID')
}
stages {
stage('Login to Azure') {
steps {
sh '''
az login --service-principal \
-u "$AZURE_CLIENT_ID" \
-p "$AZURE_CLIENT_SECRET" \
--tenant "$AZURE_TENANT_ID"
az account set --subscription "$AZURE_SUBSCRIPTION_ID"
'''
}
}
stage('Upload to Blob Storage') {
steps {
sh '''
az storage container create \
--name "$AZURE_CONTAINER_NAME" \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--auth-mode login \
--only-show-errors
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--file "$APP_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
az storage blob upload \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--file "$CONFIG_FILE" \
--auth-mode login \
--overwrite \
--only-show-errors
'''
}
}
stage('Create VM Application if Needed') {
steps {
sh '''
if ! az sig gallery-application show \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" &>/dev/null; then
az sig gallery-application create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--location "$AZURE_LOCATION" \
--os-type Windows \
--only-show-errors
fi
'''
}
}
stage('Generate SAS and Create Version') {
steps {
sh '''
EXPIRY=$(date -u -d "+1 day" '+%Y-%m-%dT%H:%MZ')
APP_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$APP_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
CONFIG_SAS=$(az storage blob generate-sas \
--account-name "$AZURE_STORAGE_ACCOUNT" \
--container-name "$AZURE_CONTAINER_NAME" \
--name "$CONFIG_FILE" \
--permissions r \
--expiry "$EXPIRY" \
--auth-mode login \
--as-user \
-o tsv)
MAJOR=1
MINOR=0
PATCH=$(date +%Y%m%d)
VERSION="$MAJOR.$MINOR.$PATCH"
INSTALL_CMD=$(jq -Rs '.' < install-script-as-string.txt)
REMOVE_CMD=$(jq -Rs '.' < uninstall-script-as-string.txt)
PACKAGE_URL="https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${APP_FILE}?${APP_SAS}"
CONFIG_URL="https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_CONTAINER_NAME}/${CONFIG_FILE}?${CONFIG_SAS}"
az sig gallery-application version create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--version-name "$VERSION" \
--location "$AZURE_LOCATION" \
--package-file-link "$PACKAGE_URL" \
--default-configuration-file-link "$CONFIG_URL" \
--install-command "$INSTALL_CMD" \
--remove-command "$REMOVE_CMD" \
--only-show-errors
'''
}
}
}
}
Nasazení aplikací virtuálních počítačů
Na jednu nebo více aplikací virtuálních počítačů lze nyní odkazovat v rámci Azure virtual machine nebo sady Škálovací sady virtuálních počítačů Azure. Azure pak načte datovou část aplikace virtuálního počítače a nainstaluje ji na každý virtuální počítač pomocí poskytnutého instalačního skriptu. Vlastnost definuje sekvenční pořadí, ve kterém jsou na virtuálním počítači nainstalovány aplikace virtuálních počítačů.
Další informace o jednotlivých vlastnostech najdete ve schématu applicationProfile virtuálního počítače / Virtual Machine Scale Sets.
-
Template
-
REST
-
Rozhraní příkazového řádku
-
PowerShell
-
Portál
Pomocí následující šablony ARM nasaďte aplikaci pro virtuální počítače na virtuální počítač Azure nebo sadu škálování virtuálních počítačů Azure. Tato šablona ukazuje klíčové vlastnosti a možnosti konfigurace pro nasazení aplikace virtuálního počítače.
Nasaďte aplikaci VM na sady škálování virtuálních počítačů
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmssName": {
"type": "string"
},
"location": {
"type": "string"
},
"subscriptionId": {
"type": "string"
},
"resourceGroupName": {
"type": "string"
},
"galleryName": {
"type": "string"
},
"applicationName1": {
"type": "string"
},
"applicationVersion1": {
"type": "string",
"defaultValue": "latest"
},
"configurationReference1": {
"type": "string",
"metadata": {
"description": "Optional path to configuration file from Storage Account. Overrides default configuration file."
}
},
"applicationName2": {
"type": "string"
},
"applicationVersion2": {
"type": "string",
"defaultValue": "latest"
}
},
"variables": {
"packageReferenceId1": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName1'), parameters('applicationVersion1'))]",
"packageReferenceId2": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName2'), parameters('applicationVersion2'))]"
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2024-03-03",
"name": "[parameters('vmssName')]",
"location": "[parameters('location')]",
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "[variables('packageReferenceId1')]",
"configurationReference": "[parameters('configurationReference1')]",
"treatFailureAsDeploymentFailure": true
},
{
"order": 2,
"packageReferenceId": "[variables('packageReferenceId2')]",
"treatFailureAsDeploymentFailure": false
}
]
}
}
}
}
]
}
Deploy VM Application on Azure VM
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmName": {
"type": "string"
},
"location": {
"type": "string"
},
"subscriptionId": {
"type": "string"
},
"resourceGroupName": {
"type": "string"
},
"galleryName": {
"type": "string"
},
"applicationName1": {
"type": "string"
},
"applicationVersion1": {
"type": "string",
"defaultValue": "latest"
},
"configurationReference1": {
"type": "string",
"metadata": {
"description": "Optional path to configuration blob for application 1"
}
},
"applicationName2": {
"type": "string"
},
"applicationVersion2": {
"type": "string",
"defaultValue": "latest"
}
},
"variables": {
"packageReferenceId1": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName1'), parameters('applicationVersion1'))]",
"packageReferenceId2": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName2'), parameters('applicationVersion2'))]"
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2024-07-01",
"name": "[parameters('vmName')]",
"location": "[parameters('location')]",
"properties": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "[variables('packageReferenceId1')]",
"configurationReference": "[parameters('configurationReference1')]",
"treatFailureAsDeploymentFailure": true
},
{
"order": 2,
"packageReferenceId": "[variables('packageReferenceId2')]",
"treatFailureAsDeploymentFailure": false
}
]
}
}
}
]
}
Pokud chcete do virtuálního počítače přidat verzi aplikace virtuálního počítače, proveďte na virtuálním počítači put.
PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{VMName}?api-version=2024-03-03
{
"properties": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version | latest}",
"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}"
}
K použití aplikace virtuálního stroje na jednotnou sadu škálování virtuálních strojů:
PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}?api-version=2024-03-03
{
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version | latest}",
"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}"
}
Odpověď zahrnuje celý model virtuálního počítače. Níže jsou uvedené příslušné části.
{
"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=}"
}
]
}
Nastavte aplikaci virtuálního počítače na existující virtuální počítač pomocí příkazu az vm application set a nahraďte hodnoty parametrů vlastními.
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
Nastavení více aplikací na virtuálním počítači:
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
Pokud chcete přidat aplikaci do Virtual Machine Scale Sets, použijte '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
Chcete-li přidat více aplikací do Virtual Machine Scale Sets:
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
Pokud chcete přidat aplikaci do existujícího virtuálního počítače, získejte verzi aplikace a použijte ji k získání ID verze aplikace virtuálního počítače. Vytvořte objekt aplikace pomocí ID s rutinou New-AzVmGalleryApplication a přidejte aplikaci do konfigurace virtuálního počítače pomocí rutiny Add-AzVmGalleryApplication.
$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
Chcete-li přidat aplikaci do skupin škálování virtuálních počítačů:
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
$vmssName = "myVMSS"
$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
Teď můžete vytvořit virtuální počítač a nasadit do něj aplikaci virtuálního počítače pomocí portálu. Stačí vytvořit virtuální počítač obvyklým způsobem a na kartě Upřesnit zvolte Vybrat aplikaci virtuálního počítače, která se má nainstalovat.
Snímek obrazovky karty Upřesnit, kde si můžete vybrat nainstalovat aplikaci VM.
V seznamu vyberte aplikaci virtuálního počítače a pak v dolní části stránky vyberte Uložit .
Snímek obrazovky znázorňující výběr aplikace virtuálního počítače, která se má na virtuální počítač nainstalovat
Pokud máte k instalaci více než jednu aplikaci virtuálního počítače, můžete nastavit pořadí instalace pro každou aplikaci virtuálního počítače zpět na kartě Upřesnit.
Aplikaci virtuálního počítače můžete také nasadit do aktuálně spuštěných virtuálních počítačů. Při prohlížení podrobností virtuálního počítače na portálu vyberte možnost Rozšíření a aplikace v nabídce Nastavení v nabídce vlevo.
Zvolte aplikace virtuálních počítačů a pak vyberte Přidat aplikaci pro přidání aplikace virtuálního počítače.
Snímek obrazovky znázorňující výběr aplikace virtuálního počítače, která se má nainstalovat na aktuálně spuštěný virtuální počítač
V seznamu vyberte aplikaci virtuálního počítače a pak v dolní části stránky vyberte Uložit .
Snímek obrazovky znázorňující výběr aplikace virtuálního počítače, která se má na virtuální počítač nainstalovat
Další kroky