Freigeben über


Erstellen und Bereitstellen einer VM-Anwendung

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

  1. 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.
  2. Erstellen Sie den Azure Compute Gallery zum Speichern und Freigeben von Anwendungsressourcen.

Packen der Anwendung

Screenshot der Ordnerstruktur, die für das Hochladen und Erstellen von VM-Anwendungen empfohlen wird.

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"

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

1. Laden Sie Ihre Anwendungs- und Konfigurationsdateien in einen Container in einem Azure-Speicherkonto hoch.

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

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

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"
      }
   }
}

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=}"
    }
  ]
}

Nächste Schritte

Erfahren Sie mehr über Azure VM-Anwendungen. Erfahren Sie, wie Sie Azure VM-Anwendungen verwalten, aktualisieren oder löschen .