VM-Anwendung ist ein Ressourcentyp im Azure Compute Gallery, der die Verwaltung, Freigabe und globale Verteilung von Anwendungen für Ihre virtuellen Computer vereinfacht.
Weitere Informationen zur VM-Anwendung
Um Anwendungen auf einem Azure-VM zu erstellen und bereitzustellen, packen und laden Sie Ihre Anwendung als Speicherblob in das Azure Storage-Konto hoch. Dann erstellen Sie Azure VM application-Ressourcen und VM application version-Ressourcen, die auf diese Speicherblobs verweisen. Stellen Sie schließlich die Anwendung auf einer beliebigen virtuellen Maschine oder einem Virtual Machine Scale Set bereit, indem Sie den Anwendungsverweis in applicationProfile übergeben.
Voraussetzungen
- Erstellen Sie Azure-Speicherkonto und -Speichercontainer. Dieser Container wird verwendet, um Ihre Anwendungsdateien hochzuladen. Es wird empfohlen, das Speicherkonto mit deaktivierten anonymen Zugriffen für zusätzliche Sicherheit zu verwenden.
- Erstellen Sie den Azure Compute Gallery zum Speichern und Freigeben von Anwendungsressourcen.
Packen der Anwendung
1. Verpacken der Anwendungsdateien
- Wenn ihre Anwendungsinstallation eine einzelne Datei (.exe, .msi, .sh, .ps usw.) erfordert, können Sie sie wie folgt verwenden.
- Wenn ihre Anwendungsinstallation mehrere Dateien (ausführbare Datei mit Konfigurationsdatei, Abhängigkeiten, Manifestdateien, Skripts usw.) erfordert, müssen Sie sie (mit .zip, .tar, .tar.gz usw.) in einer einzelnen Datei archivieren.
- Für die Microservice-Anwendung können Sie jeden Microservice als separate Azure VM-Anwendung packen und veröffentlichen. Dies erleichtert die Wiederverwendbarkeit, teamübergreifende Entwicklung und sequenzielle Installation von Microservices unter Verwendung der
order-Eigenschaft im applicationProfile.
2. (Optional) Verpacken der Anwendungskonfigurationsdatei
- Optional können Sie die Konfigurationsdatei separat bereitstellen. Dadurch wird der Aufwand für die Archivierung und das Aufheben der Archivierung von Anwendungspaketen reduziert. Konfigurationsdateien können auch während der App-Bereitstellung übergeben werden, um eine angepasste Installation pro VM zu ermöglichen.
3. Erstellen des Installationsskripts
Nachdem das Anwendungs- und Konfigurations-BLOB auf dem virtuellen Computer heruntergeladen wurde, führt Azure das bereitgestellte Installationsskript aus, um die Anwendung zu installieren.
Das Installationsskript wird als Zeichenfolge bereitgestellt und hat eine maximale Zeichengrenze von 4.096 Zeichen. Die Installationsbefehle sollten geschrieben werden, vorausgesetzt, das Anwendungspaket und die Konfigurationsdatei befinden sich im aktuellen Verzeichnis.
Möglicherweise sind einige Vorgänge erforderlich, die im Installationsskript ausgeführt werden müssen.
(Optional) Verwenden des richtigen Befehlsdolmetschers Der von Azure verwendete Standardbefehlsdolmetscher befindet sich /bin/bash unter Linux OS und cmd.exe windows OS. Es ist möglich, einen anderen Dolmetscher wie Chocolatey oder PowerShell zu verwenden, wenn er auf dem Computer installiert ist. Rufen Sie die ausführbare Datei auf, und übergeben Sie die Befehle an sie. Beispiel: powershell.exe -command '<powershell command>'. Wenn Sie PowerShell verwenden, müssen Sie Version 3.11.0 des Az.Storage-Moduls verwenden.
(Optional) Umbenennen des Anwendungs-Blobs und des Konfigurations-Blobs Azure kann den ursprünglichen Dateinamen und die Dateierweiterungen nicht beibehalten. Daher haben die heruntergeladene Anwendungsdatei und die Konfigurationsdatei einen Standardnamen als "MyVMApp" und "MyVMApp-config" ohne Dateierweiterung. Sie können die Datei mit der Dateierweiterung mithilfe des Installationsskripts umbenennen oder die Namen auch in den Eigenschaften packageFileName und configFileName der publishingProfile-Ressource der VM-Anwendungsversion übergeben. Azure verwendet diese Namen dann anstelle von Standardnamen beim Herunterladen der Dateien.
(Optional) Verschieben des Anwendungs- und Konfigurations-BLOB an den entsprechenden Speicherort Azure lädt das Anwendungs-BLOB und das Konfigurations-BLOB an folgende Speicherorte herunter. Das Installationsskript muss die Dateien bei Bedarf an die entsprechenden Speicherorte verschieben.
Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version>
Fenster: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.16\Downloads\<application name>\<application version>
Aufheben der Archivierung des Anwendungs-Blobs Bei archivierten Anwendungspaketen muss sie vor der Installation der Anwendung aufgehoben werden. Es wird empfohlen, .zip oder .tar zu verwenden, da die meisten Betriebssysteme integrierte Unterstützung zum Aufheben der Archivierung dieser Formate haben. Stellen Sie für andere Formate sicher, dass das Gastbetriebssystem Unterstützung bietet.
(Optional) Festlegen der richtigen Ausführungsrichtlinie und Berechtigungen Nach dem Aufheben der Archivierung können Dateiberechtigungen zurückgesetzt werden. Es empfiehlt sich, die richtigen Berechtigungen festzulegen, bevor Sie die Dateien ausführen.
Konvertieren des Skripts in eine Zeichenfolge Das Installationsskript wird als Zeichenfolge für die install Eigenschaft in der publishingProfile Azure VM-Anwendungsversionsressource übergeben.
Hier sind Beispielinstallationsskripts basierend auf der Dateierweiterung des Anwendungs-Blobs.
#!/bin/bash
# Rename blobs
mv MyVMApp app.tar
mv MyVMApp-config app-config.yaml
# Unarchive application
mkdir -p app
tar -xf app.tar -C app
# Set permissions
chmod -R +x app
chmod -R +r app
# Install the script (example: install.sh with config)
bash ./app/install.sh --config app-config.yaml
# OR Install the .deb package (example: install.deb without config)
# sudo dpkg -i ./app/install.deb
# OR Install the .rpm package (example: install.rpm without config)
# sudo rpm -ivh ./app/install.rpm
Skript als Zeichenfolge:
"#!/bin/bash\nmv MyVMApp app.tar\nmv MyVMApp-config app-config.yaml\nmkdir -p app\ntar -xf app.tar -C app\nchmod -R +x app\nchmod -R +r app\nbash ./app/install.sh --config app-config.yaml\n# sudo dpkg -i ./app/install.deb\n# sudo rpm -ivh ./app/install.rpm"
:: Rename blobs
rename MyVMApp app.zip
rename MyVMApp-config app-config.json
:: Unzip using built-in tar (available on Windows 10+)
mkdir app
tar -xf app.zip -C app
:: Install .exe application (example: setup.exe with config)
app\setup.exe /config app-config.json
:: install .msi application (example: setup.exe without config)
:: msiexec /i app\setup.msi /qn /l*v install.log
:: Install JavaScript (example: setup.js with config)
:: cscript //nologo app\setup.js app-config.json
:: Install python script (example: install.py with config) - Needs python pre-installed
:: python app\install.py app-config.json
:: Install ruby application (example: install.rb with config) - Needs Ruby pre-installed
:: ruby app\install.rb app-config.json
Skript als Zeichenfolge:
"rename MyVMApp app.zip\r\nrename MyVMApp-config app-config.json\r\nmkdir app\r\ntar -xf app.zip -C app\r\napp\\setup.exe /config app-config.json\r\n:: msiexec /i app\\setup.msi /qn /l*v install.log\r\n:: cscript //nologo app\\setup.js app-config.json\r\n:: python app\\install.py app-config.json\r\n:: ruby app\\install.rb app-config.json"
powershell.exe -command "
# Rename blobs
Rename-Item -Path '.\MyVMApp' -NewName 'app.zip'
Rename-Item -Path '.\MyVMApp-config' -NewName 'app-config.json'
# Unzip application package
Expand-Archive -Path '.\app.zip' -DestinationPath '.\app'
# Set execution policy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
# Install the .exe application (example: setup.exe with config)
Start-Process -FilePath '.\app\setup.exe' -ArgumentList '/config app-config.json' -Wait
# Install PowerShell script (example: setup.ps1 with config)
# powershell.exe -ExecutionPolicy Bypass -File '.\app\setup.ps1' -ConfigFile 'app-config.json'
# Install .msi application (example: setup.msi without config)
# Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i .\app\setup.msi /qn /l*v install.log' -Wait
"
Skript als Zeichenfolge:
"powershell.exe -command \"Rename-Item -Path '.\\MyVMApp' -NewName 'app.zip'; Rename-Item -Path '.\\MyVMApp-config' -NewName 'app-config.json'; Expand-Archive -Path '.\\app.zip' -DestinationPath '.\\app'; Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force; Start-Process -FilePath '.\\app\\setup.exe' -ArgumentList '/config app-config.json' -Wait; # powershell.exe -ExecutionPolicy Bypass -File '.\\app\\setup.ps1' -ConfigFile 'app-config.json'; # Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i .\\app\\setup.msi /qn /l*v install.log' -Wait\""
:: Rename blobs
rename MyVMApp app.exe
rename MyVMApp-config app-config.json
:: Run the installer with config
app.exe /config app-config.json
Skript als Zeichenfolge:
"rename MyVMApp app.exe\r\nrename MyVMApp-config app-config.json\r\napp.exe /config app-config.json"
powershell.exe -command "
# Rename blobs
Rename-Item -Path '.\MyVMApp' -NewName 'app.exe'
Rename-Item -Path '.\MyVMApp-config' -NewName 'app-config.json'
# Set execution policy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
# Install the .exe application (example: setup.exe with config)
Start-Process -FilePath '.\app.exe' -ArgumentList '/config app-config.json' -Wait
"
Skript als Zeichenfolge:
"powershell.exe -command \"Rename-Item -Path '.\\MyVMApp' -NewName 'app.exe'; Rename-Item -Path '.\\MyVMApp-config' -NewName 'app-config.json'; Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force; Start-Process -FilePath '.\\app.exe' -ArgumentList '/config app-config.json' -Wait\""
:: Rename blobs
rename MyVMApp app.msi
rename MyVMApp-config app-config.json
:: install .msi application (example: setup.exe without config)
msiexec /i app.msi /qn /l*v install.log
Skript als Zeichenfolge:
"rename MyVMApp app.msi\r\nrename MyVMApp-config app-config.json\r\nmsiexec /i app.msi /qn /l*v install.log"
powershell.exe -command "
# Rename blobs
Rename-Item -Path '.\MyVMApp' -NewName 'app.zip'
Rename-Item -Path '.\MyVMApp-config' -NewName 'app-config.json'
# Set execution policy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
# Install .msi application (example: setup.msi without config)
Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i .\app\setup.msi /qn /l*v install.log' -Wait
"
Skript als Zeichenfolge:
"powershell.exe -command \"Rename-Item -Path '.\\MyVMApp' -NewName 'app.zip'; Rename-Item -Path '.\\MyVMApp-config' -NewName 'app-config.json'; Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force; Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i .\\app\\setup.msi /qn /l*v install.log' -Wait\""
#!/bin/bash
# Rename blobs
mv MyVMApp app.deb
mv MyVMApp-config app-config.yaml
# Set permissions
chmod -R +x app.deb
chmod -R +r app.deb
# Install .deb package (example: install.deb without config)
# sudo dpkg -i ./app.deb
Skript als Zeichenfolge:
"#!/bin/bash\nmv MyVMApp app.deb\nmv MyVMApp-config app-config.yaml\nchmod -R +x app.deb\nchmod -R +r app.deb\n# sudo dpkg -i ./app.deb"
#!/bin/bash
# Rename blobs
mv MyVMApp app.rpm
mv MyVMApp-config app-config.yaml
# Set permissions
chmod -R +x app.rpm
chmod -R +r app.rpm
# Install .rpm package (example: install.rpm without config)
sudo rpm -ivh ./app.rpm
Skript als Zeichenfolge:
"#!/bin/bash\nmv MyVMApp app.rpm\nmv MyVMApp-config app-config.yaml\nchmod -R +x app.rpm\nchmod -R +r app.rpm\nsudo rpm -ivh ./app.rpm"
#!/bin/bash
# Rename blobs
mv MyVMApp app.sh
mv MyVMApp-config app-config.yaml
# Set permissions
chmod -R +x app.sh
chmod -R +r app.sh
# Install the script (example: install.sh with config)
bash ./app.sh --config app-config.yaml
Skript als Zeichenfolge:
"#!/bin/bash\nmv MyVMApp app.sh\nmv MyVMApp-config app-config.yaml\nchmod -R +x app.sh\nchmod -R +r app.sh\nbash ./app.sh --config app-config.yaml"
powershell.exe -command "
# Rename blobs
Rename-Item -Path '.\MyVMApp' -NewName 'app.ps1'
Rename-Item -Path '.\MyVMApp-config' -NewName 'app-config.json'
# Set execution policy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
# Install PowerShell script (example: setup.ps1 with config)
powershell.exe -ExecutionPolicy Bypass -File '.\app.ps1' -ConfigFile 'app-config.json'
"
Skript als Zeichenfolge:
"powershell.exe -command \"Rename-Item -Path '.\\MyVMApp' -NewName 'app.ps1'; Rename-Item -Path '.\\MyVMApp-config' -NewName 'app-config.json'; Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force; powershell.exe -ExecutionPolicy Bypass -File '.\\app.ps1' -ConfigFile 'app-config.json'\""
4. Erstellen des Löschskripts
Mit dem Löschskript können Sie die Löschvorgänge für die Anwendung definieren. Das Löschskript wird als Zeichenfolge bereitgestellt und hat eine maximale Zeichengrenze von 4.096 Zeichen. Schreiben Sie die Löschbefehle, vorausgesetzt, das Anwendungspaket und die Konfigurationsdatei befinden sich im aktuellen Verzeichnis.
Es kann einige Vorgänge geben, die das Löschskript ausführen muss.
Anwendung deinstallieren: Deinstallieren Sie die Anwendung ordnungsgemäß von der VM. Führen Sie z. B. uninstall.exe unter Windows oder sudo apt remove app unter Linux aus.
Restdateien entfernen: Löschen Sie Restanwendungsdateien aus dem virtuellen Computer. Führen Sie z. B. Remove-Item -Path "$PWD\*" -Recurse -Force -ErrorAction SilentlyContinue unter Windows oder sudo rm -rf ./* ./.??* unter Linux aus.
Hochladen der Anwendungsdateien in das Azure-Speicherkonto
Ihre Anwendung kann in einem Block- oder Seitenblob gespeichert werden. Wenn Sie sich für ein Seitenblob entscheiden, müssen Sie vor dem Hochladen für die Dateien eine Byteausrichtung durchführen. Verwenden Sie das folgende Beispiel, um die Datei auszurichten.
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. Generieren der SAS-URL für das Anwendungspaket und die Konfigurationsdatei
Sobald die Anwendungs- und Konfigurationsdateien in das Speicherkonto hochgeladen wurden, müssen Sie eine SAS-URL mit Leseberechtigung für diese Blobs generieren. Diese SAS-URLs werden dann als Referenz beim Erstellen der VM-Anwendungsversionsressource bereitgestellt. Für Speicherkonten, die für anonymen Zugriff aktiviert sind, kann auch blob-URL verwendet werden. Es wird jedoch empfohlen, SAS-URL für verbesserte Sicherheit zu verwenden. Sie können Storage-Explorer verwenden, um schnell einen SAS-URI zu erstellen, falls Sie noch keinen besitzen.
#!/bin/bash
# === CONFIGURATION ===
STORAGE_ACCOUNT="yourstorageaccount"
CONTAINER_NAME="yourcontainer"
LOCAL_FOLDER="./your-local-folder"
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 FILES ===
az storage blob upload-batch \
--account-name $STORAGE_ACCOUNT \
--destination $CONTAINER_NAME \
--source $LOCAL_FOLDER \
--auth-mode login \
--only-show-errors
# === GENERATE SAS URLs ===
echo "Generating SAS URLs..."
FILES=$(find $LOCAL_FOLDER -type f)
for FILE in $FILES; do
BLOB_NAME="${FILE#$LOCAL_FOLDER/}"
EXPIRY=$(date -u -d "+$SAS_EXPIRY_HOURS hours" '+%Y-%m-%dT%H:%MZ')
SAS_TOKEN=$(az storage blob generate-sas \
--account-name $STORAGE_ACCOUNT \
--container-name $CONTAINER_NAME \
--name "$BLOB_NAME" \
--permissions r \
--expiry $EXPIRY \
--auth-mode login \
-o tsv)
SAS_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${BLOB_NAME}?${SAS_TOKEN}"
echo "$BLOB_NAME: $SAS_URL"
done
# === CONFIGURATION ===
$storageAccount = "yourstorageaccount"
$containerName = "yourcontainer"
$localFolder = "C:\path\to\your\local\folder"
$sasExpiryHours = 24
# === LOGIN (if not already logged in) ===
az login | Out-Null
# === CREATE CONTAINER IF NOT EXISTS ===
az storage container create `
--name $containerName `
--account-name $storageAccount `
--auth-mode login `
--only-show-errors | Out-Null
# === UPLOAD FILES ===
az storage blob upload-batch `
--account-name $storageAccount `
--destination $containerName `
--source $localFolder `
--auth-mode login `
--only-show-errors
# === GENERATE SAS URLs ===
Write-Host "`nGenerating SAS URLs..."
$files = Get-ChildItem -Recurse -File -Path $localFolder
foreach ($file in $files) {
$relativePath = $file.FullName.Substring($localFolder.Length + 1).Replace("\", "/")
$expiry = (Get-Date).ToUniversalTime().AddHours($sasExpiryHours).ToString("yyyy-MM-ddTHH:mmZ")
$sasToken = az storage blob generate-sas `
--account-name $storageAccount `
--container-name $containerName `
--name $relativePath `
--permissions r `
--expiry $expiry `
--auth-mode login `
-o tsv
$sasUrl = "https://$storageAccount.blob.core.windows.net/$containerName/$relativePath`?$sasToken"
Write-Host "$relativePath:`n$sasUrl`n"
}
Erstellen der VM-Anwendung
Um die VM-Anwendung zu erstellen, erstellen Sie zuerst die VM-Anwendungsressource, die die Anwendung beschreibt. Erstellen Sie dann eine VM-Anwendungsversionsressource darin, die die VM-Anwendungsnutzlast und Skripts zum Installieren, Aktualisieren und Löschen der Anwendung enthält. Die Nutzlast wird über eine SAS-URL zu dem Blob-Container im Azure Storage-Konto bereitgestellt.
Weitere Informationen zu den einzelnen Eigenschaften finden Sie im Schema für VM-Anwendungs- und VM-Anwendungsversionsressource .
Erstellen der VM-Anwendungsdefinition mithilfe der "Create Gallery Application API"
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": "2020-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"
}
}
Erstellen Sie eine Version der VM-Anwendung mithilfe der 'API zum Erstellen von Galerieanwendungsversionen'.
PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{applicationName}/versions/{versionName}?api-version=2024-03-03
{
"location": "$location",
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "$mediaLink",
"defaultConfigurationLink": "$configLink"
},
"manageActions": {
"install": "echo installed",
"remove": "echo removed",
"update": "echo update"
},
"targetRegions": [
{
"name": "West US",
"regionalReplicaCount": 1
},
{
"name": "East US"
}
]
"endofLifeDate": "datetime",
"replicaCount": 1,
"excludeFromLatest": false,
"storageAccountType": "PremiumV2_LRS | Premium_LRS | Standard_LRS | Standard_ZRS"
"safetyProfile": {
"allowDeletionOfReplicatedLocations": false
}
"settings": {
"scriptBehaviorAfterReboot": "None | Rerun",
"configFileName": "$appConfigFileName",
"packageFileName": "$appPackageFileName"
}
}
}
Für VM-Anwendungen ist mindestens Version 2.30.0 der Azure-Befehlszeilenschnittstelle erforderlich.
Erstellen Sie die VM-Anwendungsdefinition mit "az sig gallery-application create". In diesem Beispiel erstellen Sie eine VM-Anwendungsdefinition namens myApp für Linux-basierte VMs.
az sig gallery-application create \
--application-name myApp \
--gallery-name myGallery \
--resource-group myResourceGroup \
--os-type Linux \
--location "East US"
Erstellen Sie eine VM-Anwendungsversion mit "az sig gallery-application version create". Zulässige Zeichen für die Version sind Zahlen und Punkte. Zahlen müssen im Bereich einer ganzen 32-Bit-Zahl liegen. Format: MajorVersion. MinorVersion. Patch.
Ersetzen Sie die Werte der Parameter durch Ihre eigenen.
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>"\
Erstellen Sie die VM-Anwendungsdefinition mithilfe von New-AzGalleryApplication. In diesem Beispiel erstellen wir eine Linux-App mit dem Namen "myApp " im MyGallery Azure Compute Gallery und in der Ressourcengruppe "myGallery ". Ersetzen Sie die Werte für Variablen nach Bedarf.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$description = "Backend Linux application for finance."
New-AzGalleryApplication `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-Location "East US" `
-Name $applicationName `
-SupportedOSType Linux `
-Description $description
Erstellen Sie eine Version Ihrer VM-Anwendung mithilfe von New-AzGalleryApplicationVersion. Zulässige Zeichen für die Version sind Zahlen und Punkte. Zahlen müssen im Bereich einer ganzen 32-Bit-Zahl liegen. Format: MajorVersion. MinorVersion. Patch.
In diesem Beispiel erstellen Sie die Versionsnummer 1.0.0. Ersetzen Sie die Werte der Variablen nach Bedarf.
$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" `
- Navigieren Sie zum Azure-Portal und suchen Sie dann nach Azure Compute Gallery, was Sie dann bitte auswählen.
- Wählen Sie den gewünschten Katalog aus der Liste aus.
- Wählen Sie oben auf der Seite Ihrer Galerie Hinzufügen und dann im Dropdownmenü Anwendungsdefinition für virtuelle Computer aus. Die Seite VM-Anwendungsdefinition erstellen wird geöffnet.
- Geben Sie auf der Registerkarte Grundlagen einen Namen für Ihre Anwendung ein, und wählen Sie aus, ob die Anwendung für VMs mit Linux oder Windows vorgesehen ist.
- Wählen Sie die Registerkarte " Veröffentlichungsoptionen " aus, wenn Sie eine der folgenden optionalen Einstellungen für Ihre VM-Anwendungsdefinition angeben möchten:
- Eine Beschreibung der VM-Anwendungsdefinition.
- Datum für Ende des Lebenszyklus
- Link zu einem Endbenutzer-Lizenzvertrag (EULA)
- URI zu Datenschutzbestimmungen
- URI zu Versionshinweisen
- Wählen Sie abschließend Überprüfen + erstellen aus.
- Wählen Sie nach Abschluss der Validierung Erstellen aus, um die Definition bereitzustellen.
- Klicken Sie nach Abschluss der Bereitstellung auf Zu Ressource wechseln.
- Wählen Sie auf der Seite für die Anwendung die Option Erstellen Sie eine VM-Anwendungsversion aus. Die Seite VM-Anwendungsversion erstellen wird geöffnet.
- Geben Sie eine Versionsnummer wie 1.0.0 an.
- Wählen Sie die Region aus, in die Ihre Anwendungspakete hochgeladen werden.
- Wählen Sie unter Quellanwendungspaket die Option Durchsuchen aus. Wählen Sie das Speicherkonto und dann den Container aus, in dem sich Ihr Paket befindet. Wählen Sie das Paket aus der Liste aus, und klicken Sie dann auf Auswählen, wenn Sie fertig sind. Alternativ können Sie den SAS-URI in dieses Feld einfügen, falls bevorzugt.
- Geben Sie das Skript "Installieren" an. Sie können auch das Skript "Deinstallieren" und das "Updateskript" bereitstellen. Informationen zum Erstellen der Skripts finden Sie in der Übersicht.
- Wenn Sie eine Standardkonfigurationsdatei in ein Speicherkonto hochgeladen haben, können Sie sie unter Standardkonfiguration auswählen.
- Wählen Sie Aus Neuesten ausschließen aus, wenn diese Version beim Erstellen einer VM nicht als neueste Version angezeigt werden soll.
- Wählen Sie für Ende der Lebensdauer ein Datum in der Zukunft aus, um nachzuverfolgen, wann diese Version eingestellt werden soll. Sie wird nicht automatisch gelöscht oder entfernt. Diese Angabe dient nur Ihrer eigenen Nachverfolgung.
- Um diese Version in andere Regionen zu replizieren, wählen Sie die Registerkarte " Replikation " aus, fügen Sie weitere Regionen hinzu, und nehmen Sie Änderungen an der Anzahl der Replikate pro Region vor. Die ursprüngliche Region, in der Ihre Version erstellt wurde, muss in der Liste enthalten sein und darf nicht entfernt werden.
- Wenn Sie alle Änderungen vorgenommen haben, wählen Sie unten auf der Seite Überprüfen und erstellen aus.
- Wenn die Überprüfung als erfolgreich angezeigt wird, wählen Sie Erstellen aus, um Ihre VM-Anwendungsversion bereitzustellen.
name: Deploy Azure VM Application
on:
push:
branches:
- main
env:
# Customize your app and config filenames here
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:
# Step 1: Checkout repo
- name: Checkout
uses: actions/checkout@v4
# Step 2: Login to Azure using OIDC
- 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 }}
# Step 3: Upload app and config files to Azure Blob
- 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 \
--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 \
--only-show-errors
# Step 4: Create VM Application (if missing)
- 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" \
--name "$APPLICATION_NAME" &>/dev/null; then
az sig gallery-application create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--name "$APPLICATION_NAME" \
--location "$AZURE_LOCATION" \
--os-type Windows
fi
# Step 5: Generate SAS URLs
- 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 -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 -o tsv)
echo "APP_SAS=$APP_SAS" >> $GITHUB_ENV
echo "CONFIG_SAS=$CONFIG_SAS" >> $GITHUB_ENV
# Step 6: Create Application Version using semantic versioning
- name: Create VM Application Version
run: |
set -euo pipefail
# Generate a unique version name
MAJOR=1
MINOR=0
PATCH=$(date +%Y%m%d)
VERSION="$MAJOR.$MINOR.$PATCH"
# Load install/uninstall commands from .txt files as strings
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}"
# Create the version
az sig gallery-application version create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--gallery-application-name "$APPLICATION_NAME" \
--gallery-application-version-name "$VERSION" \
--version-name "$VERSION" \
--location "$AZURE_LOCATION" \
--package-file-link "$PACKAGE_URL" \
--default-file-link "$CONFIG_URL" \
--install-command "$INSTALL_CMD" \
--remove-command "$REMOVE_CMD" \
--only-show-errors
trigger:
branches:
include: [ main ]
variables:
# Customize filenames below
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
# Step 1: Upload files to Blob
- task: AzureCLI@2
displayName: Upload app (exe, zip, etc) + 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 \
--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 --only-show-errors
# Step 2: Create VM Application Definition (if not exists)
- 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" \
--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
# Step 3: Generate SAS URLs
- 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 -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 -o tsv)
echo "##vso[task.setvariable variable=APP_SAS]$APP_SAS"
echo "##vso[task.setvariable variable=CONFIG_SAS]$CONFIG_SAS"
# Step 4: Create VM Application Version
- task: AzureCLI@2
displayName: Create VM Application Version
inputs:
azureSubscription: 'AzureServiceConnection'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
set -euo pipefail
# Generate a unique version name
MAJOR=1
MINOR=0
PATCH=$(date +%Y%m%d)
VERSION="$MAJOR.$MINOR.$PATCH"
# Load install/uninstall commands from .txt files as strings
INSTALL_CMD=$(jq -Rs '.' < install-script-as-string.txt)
REMOVE_CMD=$(jq -Rs '.' < uninstall-script-as-string.txt)
# Load SAS URL for Application and config file
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}"
# Create the version
az sig gallery-application version create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--name "$VERSION" \
--location "$AZURE_LOCATION" \
--package-file-link "$PACKAGE_URL" \
--default-configuration-file-link "$CONFIG_URL" \
--install-command "$INSTALL_CMD" \
--remove-command "$REMOVE_CMD" \
--version-name $VERSION
stages:
- deploy
variables:
# Customize your filenames here
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
only:
- main
script:
# Login to Azure using service principal
- az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID"
- az account set --subscription "$AZURE_SUBSCRIPTION_ID"
# Step 1: Upload app and config files to Blob Storage
- |
echo "Uploading $APP_FILE and $CONFIG_FILE to blob..."
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 \
--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 \
--only-show-errors
# Step 2: Create VM Application Definition if missing
- |
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
# Step 3: Generate SAS URLs
- |
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 -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 -o tsv)
# Step 4: Create VM Application Version (semantic version: 1.0.YYYYMMDD)
- |
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" \
--gallery-application-version-name "$VERSION" \
--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 \
--username "$AZURE_CLIENT_ID" \
--password "$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 --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 --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
fi
'''
}
}
stage('Generate SAS URLs') {
steps {
sh '''
export EXPIRY=$(date -u -d "+1 day" '+%Y-%m-%dT%H:%MZ')
export 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 -o tsv)
export 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 -o tsv)
echo "APP_SAS=$APP_SAS" > sas.env
echo "CONFIG_SAS=$CONFIG_SAS" >> sas.env
'''
}
}
stage('Create Application Version') {
steps {
sh '''
source sas.env
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)
az sig gallery-application version create \
--resource-group "$AZURE_RESOURCE_GROUP" \
--gallery-name "$GALLERY_NAME" \
--application-name "$APPLICATION_NAME" \
--gallery-application-version-name "$VERSION" \
--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
'''
}
}
}
}
Bereitstellen der VM-Apps
Auf eine oder mehrere VM-Anwendungen kann jetzt in den applicationProfile Azure-VM- oder Azure Virtual Machine Scale Sets verwiesen werden. Azure ruft dann die Nutzlast der VM-Anwendung ab und installiert sie auf jedem virtuellen Computer mithilfe des bereitgestellten Installationsskripts. Die order Eigenschaft definiert die sequenzielle Reihenfolge, in der die VM-Anwendungen auf dem virtuellen Computer installiert sind.
Weitere Informationen zu den einzelnen Eigenschaften finden Sie im Schema "applicationProfile" des VM/Virtual Machine Scale Set .
Um einer VM eine VM-Anwendungsversion hinzuzufügen, führen Sie einen PUT-Befehl auf der VM aus.
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}"
}
So wenden Sie die VM-Anwendung auf eine einheitliche Skalierungsgruppe an
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}"
}
Die Antwort enthält das vollständige VM-Modell. Im Folgenden finden Sie die relevanten Teile.
{
"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=}"
}
]
}
Legen Sie eine VM-Anwendung auf einen vorhandenen virtuellen Computer fest, indem Sie "az vm application set" verwenden , und ersetzen Sie die Werte der Parameter durch Ihre eigenen.
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
Festlegen mehrerer Anwendungen auf einer 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
Verwenden Sie "az vmss application set", um einer VM-Skalierungsgruppe eine Anwendung hinzuzufügen:
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
So fügen Sie einem Skalierungssatz für virtuelle Computer mehrere Anwendungen hinzu:
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
Um die Anwendung auf einer vorhandenen VM hinzuzufügen, rufen Sie die Anwendungsversion ab, und verwenden diese, um die ID der VM-Anwendungsversion abzurufen. Mithilfe diese ID fügen Sie die Anwendung der VM-Konfiguration hinzu.
$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
So fügen Sie die Anwendung zu einem Skalierungssatz für virtuelle Computer hinzu:
$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
Nun können Sie eine VM erstellen und die VM-Anwendung über das Portal darauf bereitstellen. Erstellen Sie die VM einfach wie gewohnt, und wählen Sie auf der Registerkarte Erweitert die Option Select a VM application to install (VM-Anwendung für Installation auswählen).
Wählen Sie die VM-Anwendung aus der Liste aus, und wählen Sie dann unten auf der Seite "Speichern" aus.
Wenn Sie mehrere VM-Anwendungen installieren möchten, können Sie auf der Registerkarte Erweitert die Installationsreihenfolge für jede VM-Anwendung festlegen.
Sie können die VM-Anwendung auch für derzeit ausgeführte VMs bereitstellen. Wählen Sie im linken Menü die Option Erweiterungen und Anwendungen unter Einstellungen aus, wenn Sie die VM-Details im Portal anzeigen.
Wählen Sie VM-Anwendungen aus, und wählen Sie dann Anwendung hinzufügen aus, um Ihre VM-Anwendung hinzuzufügen.
Wählen Sie die VM-Anwendung aus der Liste aus, und wählen Sie dann unten auf der Seite "Speichern" aus.
Nächste Schritte
Erfahren Sie mehr über Azure VM-Anwendungen.
Erfahren Sie, wie Sie Azure VM-Anwendungen verwalten, aktualisieren oder löschen .