Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
VM-Anwendungen sind ein Ressourcentyp in Azure Compute Gallery, der einen modernen, flexiblen Ansatz zum Verwalten und Bereitstellen von Anwendungen auf Ihren virtuellen Computern und Skalierungsgruppen bietet. Durch die Entkoppelung der Anwendungsinstallation von Ihren Basis-VM-Images können Sie Updates optimieren, den Wartungsaufwand für Bilder verringern und die Bereitstellungszyklen beschleunigen. Bei diesem Ansatz ist es nicht erforderlich, VM-Images für jede Anwendungsänderung neu zu erstellen und erneut zu veröffentlichen, was eine schnellere Iteration und eine höhere Betriebliche Flexibilität ermöglicht. VM-Anwendungen eignen sich am besten für die Bereitstellung von KI, hoher Skalierung, geringer Latenz, Mikrodiensten, sicheren und kompatiblen Workloads auf Azure-VMs.
Ressource | BESCHREIBUNG |
---|---|
Azure Compute Gallery | Eine Galerie ist ein Repository zum Verwalten und Freigeben von Anwendungspaketen. Benutzer können die Katalogressource freigeben und alle untergeordneten Ressourcen werden dann automatisch freigegeben. Der Galerie-Name muss pro Abonnement anders ausfallen. Beispielsweise können Sie über eine Galerie verfügen, in der alle Ihre Betriebssystemimages gespeichert werden, und eine andere Galerie, in der alle Ihre Anwendungen für virtuelle Computer gespeichert werden. |
VM-Anwendung | Dies ist die Definition von Ihrer VM-Anwendung. Es handelt sich um eine logische Ressource, die die gemeinsamen Metadaten aller Versionen unter ihr speichert. Beispielsweise verfügen Sie möglicherweise über eine Anwendungsdefinition für Apache Tomcat und über mehrere Versionen in diesem Programm. |
Anwendungsversion für virtuelle Computer | Die bereitstellungsfähige Ressource, die Ihr Anwendungspaket und versionsspezifische Konfigurationen enthält. Sie können Ihre Anwendungsversionen für virtuelle Computer global in Zielregionen replizieren, die näher an der Infrastruktur Ihres virtuellen Computers liegen. Die VM-Anwendungsversion muss in eine Region repliziert werden, bevor sie auf einem virtuellen Computer in dieser Region bereitgestellt werden kann. |
Speicherkonto | Anwendungspakete werden zuerst in Ihr Speicherkonto hochgeladen. Azure Compute Gallery lädt dann das Anwendungspaket aus diesem Speicherkonto mithilfe von SAS-URLs herunter und speichert es in der VM-Anwendungsversion. Azure Compute Gallery repliziert dieses Paket auch über Regionen und regionalen Replikaten gemäß der VM-Anwendungsversionsdefinition. Das Anwendungspaket im Speicherkonto kann gelöscht werden, nachdem die VM-Anwendungsversion im Azure Compute Gallery erstellt wurde. |
Hauptvorteile:
-
Zentrales und flexibles Anwendungsmanagement:
- Packen Sie alles einmal, Bereitstellen von Anywhere: Paketanwendungen (Windows / Linux), Skripts oder Dateien als VM-Anwendungen. Stellen Sie sie dann über Azure VMs oder Vm Scale Sets bereit, und verwalten Sie sie zentral im Azure Compute Gallery. Anwendungen oder Dateien können sich in .zip, .msi, .exe, .tar.gz, .deb, .rpm, .sh oder einem anderen Format befinden.
- Versionssteuerung: Stellen Sie entweder die neueste oder eine bestimmte Version bereit, indem Sie mehrere Versionen jeder Anwendung verwalten.
-
Nahtlose Freigabe und Zugriffssteuerung
- Tenant-Wide Teilen: Anwendungen innerhalb von Teams oder mit Ihrer gesamten Organisation (Mandanten) teilen.
- Integriertes RBAC: Steuern des Veröffentlichungs- und Bereitstellungszugriffs mithilfe von Azure Role-Based Access Control (RBAC).
-
Zuverlässige und anpassbare Bereitstellungen
- Individuelle Anwendungssteuerung: Installieren, Aktualisieren oder Löschen von Anwendungen unabhängig – sie müssen keine VM-Images neu erstellen.
- Anpassbare Vorgänge: Anpassen von Installations-, Update- und Löschvorgängen für Anwendungen, einschließlich Neustartbehandlung.
- Built-In Fehlerbehandlung: Gewährleisten Sie robuste Bereitstellungen, indem Sie VM-Anwendungsfehler mit VM-Fehlern verbinden.
-
Skalierbare und latenzarme Verteilung
- Globale und Intra-Region Replikation: Automatisches Replizieren von Anwendungen in und innerhalb von Regionen, um Latenz zu reduzieren und Resilienz zu verbessern – keine Notwendigkeit für AzCopy oder manuelle Übertragungen.
- Optimiert für High-Scale Szenarien: Erzielen Sie auch bei umfangreichen Bereitstellungen eine geringe Erstellungslatenz.
-
Sicher und konform nach Entwurf
- Richtliniengesteuerte Erzwingung: Verwenden Sie Azure-Richtlinie, um Anwendungspräsenz und -konfiguration in Ihrer Flotte zu erzwingen.
- Sichere Bereitstellungen: Vermeiden Sie internetbasierte Downloads und komplexe Private Link-Setups, die nicht ideal für gesperrte oder sichere Umgebungen sind.
-
Umfassender Plattformsupport
- VMs und Scale Sets: Bereitstellen für einzelne VMs, flexible Skalierungssätze oder einheitliche Skalierungssätze mit vollständiger Unterstützung.
- Block blob-Unterstützung: Effiziente Verarbeitung großer Anwendungspakete (bis zu 2 GB) mithilfe von Azure Block Blobs für geblockte Uploads und Hintergrundstreaming.
Erstellen einer VM-Anwendungs- und VM-Anwendungsversionsressource
Die VM-Anwendung wird im Azure Compute Gallery gespeichert. Die Anwendungsressource für virtuelle Computer definiert Folgendes zu Ihrer Anwendung für virtuelle Computer:
Eigentum | BESCHREIBUNG | Einschränkungen |
---|---|---|
name | Name der Anwendung | Maximale Länge von 117 Zeichen. Zulässige Zeichen sind Groß- oder Kleinbuchstaben, Ziffern, Bindestriche (-), Punkt (.), Unterstrich (_). Namen dürfen nicht mit punkt(.) enden. |
supportedOSType | Definieren des unterstützten Betriebssystemtyps | "Linux" oder "Windows" |
endOfLifeDate | Ein zukünftiges Lebenszyklusdatum für die Anwendung. Das Datum ist nur referenziert und wird nicht erzwungen. | |
Beschreibung | Wahlfrei. Eine Beschreibung der Anwendung für virtuelle Computer | |
Eula | Wahlfrei. Referenz auf Endbenutzer-Lizenzvertrag (EULA) | |
privacyStatementUri | Wahlfrei. Referenz zu den Datenschutzbestimmungen für die Anwendung. | |
releaseNoteUri | Wahlfrei. Referenz zu Versionshinweisen für die Anwendung. |
VM-Anwendungsversionen sind die bereitstellungsfähigen Ressourcen innerhalb der VM-Anwendungsressource. Versionen werden mit den folgenden Eigenschaften definiert:
Eigentum | BESCHREIBUNG | Einschränkungen |
---|---|---|
___location | Quellspeicherort für die VM-Anwendungsversion. | Gültige Azure-Region |
source/mediaLink | Link zur Datei des Anwendungspakets in einem Speicherkonto | Gültige und vorhandene Speicher-URL |
source/defaultConfigurationLink | Wahlfrei. Ein Link zur Konfigurationsdatei für die VM-Anwendung. Sie kann zur Bereitstellungszeit außer Kraft gesetzt werden. | Gültige und vorhandene Speicher-URL |
manageActions/install | Installieren des Skripts als Zeichenfolge, um die Anwendung ordnungsgemäß zu installieren | Gültiger Befehl für das angegebene Betriebssystem im Zeichenfolgenformat. |
manageActions/remove | Entfernen des Skripts als Zeichenfolge zum ordnungsgemäßen Entfernen der Anwendung | Gültiger Befehl für das angegebene Betriebssystem im Zeichenfolgenformat |
manageActions/Update | Wahlfrei. Aktualisieren Sie das Skript als Zeichenfolge, um die VM-Anwendung ordnungsgemäß auf eine neuere Version zu aktualisieren. | Gültiger Befehl für das angegebene Betriebssystem im Zeichenfolgenformat |
targetRegions/Name | Name der Zielbereiche, in die repliziert werden soll. Verbessert die Ausfallsicherheit von Regionen und erstellt Latenz. | Gültige Azure-Region |
targetRegions/regionalReplicaCount | Wahlfrei. Die Anzahl der Replikate, die in der Region erstellt werden sollen. Verbessert die Lastbehandlung und die Latenz. Standardwert ist 1. | Ganze Zahl zwischen 1 und 3 einschließlich |
replicaCount | Wahlfrei. Definiert die Anzahl der Replikate in den einzelnen Regionen. Wird wirksam, wenn regionalReplicaCount nicht definiert ist. Verbessert die Resilienz gegenüber Regionen- oder Clusterfehlern und erstellt während einer hohen Skalierung Latenz. | Ganze Zahl zwischen 1 und 3 einschließlich. |
endOfLifeDate | Wahlfrei. Ein zukünftiges Enddatum für die Anwendungsversion. Diese Eigenschaft ist nur für kundenreferenziert und wird nicht erzwungen. | Gültiges zukünftiges Datum |
excludeFromLatest | Schließen Sie die Version aus, die als neueste Version der Anwendung verwendet wird, wenn das Schlüsselwort "latest" in applicationProfile verwendet wird. | |
storageAccountType | Wahlfrei. Typ des Speicherkontos, das in jeder Region zum Speichern des Anwendungspakets verwendet werden soll. Standardmäßig wird Standard_LRS. | Diese Eigenschaft ist nicht aktualisierbar. |
safetyProfile/allowDeletionOfReplicatedLocations | Wahlfrei. Gibt an, ob das Entfernen dieser Katalogbildversion aus replizierten Regionen zulässig ist. | |
settings/packageFileName | Paketdateiname, der verwendet werden soll, wenn das Paket auf den virtuellen Computer heruntergeladen wird. | Dies ist auf 4.096 Zeichen beschränkt. |
settings/configFileName | Der Name der Konfigurationsdatei, die verwendet werden soll, wenn die Konfiguration auf den virtuellen Computer heruntergeladen wird. | Dies ist auf 4.096 Zeichen beschränkt. |
settings/scriptBehaviorAfterReboot | Wahlfrei. Die Auszuführende Aktion zum Installieren, Aktualisieren oder Entfernen der Kataloganwendung nach dem Neustart des virtuellen Computers. |
{
"$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')]"
}
}
]
}
Bereitstellen von Azure VM-Anwendungen
Nachdem die VM-Anwendungsversion im Azure Compute Gallery veröffentlicht wurde, können Sie die Version in Azure Virtual Machines (VM) und Azure Virtual Machine Scale Sets bereitstellen.
Die applicationProfile
Skalierungssätze in Azure VM und VM-Skalierungsgruppen definieren Folgendes:
Eigentum | BESCHREIBUNG | Einschränkungen |
---|---|---|
galleryApplications | Kataloganwendungen, die bereitgestellt werden sollen | |
PaketReferenzId | Referenz zur Bereitstellung der Anwendungsversion | Gültige Anwendungsversionsreferenz |
configurationReferenz | Wahlfrei. Die vollständige URL eines Speicherblobs, das die Konfiguration für diese Bereitstellung enthält. Dadurch werden alle zuvor für "defaultConfiguration" bereitgestellten Werte außer Kraft gesetzt. | Gültige Speicher-BLOB-Referenz |
order | Wahlfrei. Reihenfolge, in der Anwendungen bereitgestellt werden sollen | Gültige ganze Zahl |
treatFailureAsDeploymentFailure | Wahlfrei. Kennzeichnen eines Anwendungsfehlers als VM-Bereitstellungsfehler bei der Fehlerbehandlung | Wahr oder Falsch |
Das Bestellfeld kann verwendet werden, um Abhängigkeiten zwischen Anwendungen anzugeben. Die Regeln für die Bestellung sind wie folgt:
Case | Bedeutung installieren | Fehlerbedeutung |
---|---|---|
Es wurde keine Reihenfolge angegeben. | Nicht sortierte Anwendungen werden nach sortierten Anwendungen installiert. Es gibt keine Garantie für den Installationsauftrag unter den nicht sortierten Anwendungen. | Installationsfehler anderer Anwendungen, sei es sortiert oder ungeordnet, wirken sich nicht auf die Installation von nicht sortierten Anwendungen aus. |
Doppelte Bestellwerte | Die Anwendung wird in beliebiger Reihenfolge im Vergleich zu anderen Anwendungen mit derselben Reihenfolge installiert. Alle Anwendungen derselben Bestellung werden nach den Anwendungen mit niedrigeren Bestellungen und vor den Anwendungen mit höheren Bestellungen installiert. | Wenn eine vorherige Anwendung mit einer niedrigeren Reihenfolge nicht installiert werden konnte, werden keine Anwendungen mit dieser Bestellung installiert. Wenn eine Anwendung mit dieser Reihenfolge nicht installiert werden kann, werden keine Anwendungen mit einer höheren Reihenfolge installiert. |
Erhöhen von Aufträgen | Die Anwendung wird nach den Anwendungen mit niedrigeren Bestellungen und vor denen mit höheren Bestellungen installiert. | Wenn eine vorherige Anwendung mit einer niedrigeren Reihenfolge nicht installiert werden konnte, wird diese Anwendung nicht installiert. Wenn diese Anwendung nicht installiert werden kann, wird keine Anwendung mit einer höheren Reihenfolge installiert. |
- Bereitstellen auf Skalierungssätzen für virtuelle Computer
- Bereitstellen auf einem virtuellen Computer
{
"$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
}
]
}
}
}
}
]
}
Kosten
Für die Verwendung von Anwendungspaketen für virtuelle Computer fallen keine zusätzlichen Gebühren an, Ihnen werden jedoch die folgenden Ressourcen in Rechnung gestellt:
- Speicherkosten für die Speicherung der einzelnen Pakete und Replikate.
- Ausgehender Netzwerkdatenverkehr wird für die Replikation der ersten Imageversion aus der Quellregion in die replizierten Regionen berechnet. Weitere Replikate werden in der Region verarbeitet, sodass keine zusätzlichen Gebühren anfallen.
Weitere Informationen zum ausgehenden Netzwerkdatenverkehr finden Sie unter Bandbreite: Preisübersicht.
Technische Details
Überlegungen und aktuelle Grenzwerte
Bis zu 10 Replikate pro Region: Wenn Sie eine VM-Anwendungsversion erstellen, beträgt die maximale Anzahl von Replikaten pro Region 10 für Seiten-BLOB und Block-BLOB.
Bis zu 300 Versionen pro Region: Beim Erstellen einer VM-Anwendungsversion können sie bis zu 300 Anwendungsversionen pro Region haben.
Speicher mit öffentlichem Zugriff und SAS-URI mit Leseberechtigung: Das Speicherkonto muss über Zugriff auf öffentliche Ebene verfügen und einen SAS-URI mit Leseberechtigung verwenden, da andere Einschränkungsstufen Bereitstellungen fehlschlagen. SAS-Token können umgangen werden, indem das Artefakt auf dem Speicherkonto veröffentlicht wird, indem anonymer Zugriff gewährt wird.
Manueller Wiederholungsvorgang für fehlgeschlagene Installationen: Derzeit besteht die einzige Möglichkeit zum Wiederholen einer fehlgeschlagenen Installation darin, die Anwendung aus dem Profil zu entfernen und sie dann wieder hinzuzufügen.
Bis zu 25 Anwendungen pro VM: Maximal 25 Anwendungen können auf einem einzelnen virtuellen Computer bereitgestellt werden.
2 GB Anwendungsgröße: Die maximale Dateigröße einer Anwendungsversion
mediaLink
beträgt 2 GB. Die maximale Dateigröße beträgtdefaultConfigurationLink
1 GB.Erfordert einen Agent für virtuelle Computer: Der Agent für virtuelle Computer muss auf dem virtuellen Computer vorhanden sein und in der Lage sein, Zielzustände zu empfangen.
Einzelne Version der Anwendung pro VM: Nur eine Version einer bestimmten Anwendung kann auf einem virtuellen Computer bereitgestellt werden.
Verschiebungsvorgänge werden derzeit nicht unterstützt: Das Verschieben von VMs mit zugeordneten VM-Anwendungen über Ressourcengruppen hinweg wird derzeit nicht unterstützt.
Hinweis
Für Azure Compute Gallery- und VM-Anwendungen kann die Speicher-SAS nach der Replikation gelöscht werden. Für alle nachfolgenden Aktualisierungsvorgänge ist jedoch eine gültige SAS erforderlich.
Herunterladen des Verzeichnisses innerhalb des virtuellen Computers
Der Downloadspeicherort des Anwendungspakets und der Konfigurationsdateien sind:
- Linux:
/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version>
- Fenster:
C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>
Die Befehle zum Installieren / Aktualisieren / Entfernen sollten geschrieben werden, vorausgesetzt, das Anwendungspaket und die Konfigurationsdatei befinden sich im aktuellen Verzeichnis.
Benennen der Datei
Wenn die Anwendungsdatei auf den virtuellen Computer heruntergeladen wird, wird die Datei in "MyVmApp" umbenannt und hat keine Dateierweiterung (z. B. .exe, .msi). Der virtuelle Computer weiß nicht über den ursprünglichen Namen und die Erweiterung der Datei.
Im Folgenden finden Sie einige Alternativen zum Beheben dieses Problems:
Sie können Ihr Skript so ändern, dass es einen Befehl zum Umbenennen der Datei vor der Ausführung enthält:
move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S
Sie können auch die Eigenschaft packageFileName
(und die entsprechende Eigenschaft configFileName
) verwenden, um uns anzuweisen, wie Ihre Datei umbenannt werden soll. Wenn Sie es beispielsweise auf "MyApp.exe" festlegen, wird das Installationsskript wie folgt festgelegt.
MyAppe.exe /S
Tipp
Wenn Ihr Blob ursprünglich als "myApp.exe" anstelle von "myapp" benannt wurde, funktioniert das Skript ohne Festlegen der packageFileName
Eigenschaft.
Kommandointerpreter
Die Standardkommandointerpreter sind:
- Linux:
/bin/bash
- Fenster:
cmd.exe
Es ist möglich, einen anderen Interpreter wie Chocolatey oder PowerShell zu verwenden, der auf dem Computer installiert ist, indem Sie die ausführbare Datei aufrufen und den Befehl an sie übergeben. Damit Ihr Befehl beispielsweise in PowerShell auf Windows anstelle von cmd ausgeführt wird, können Sie powershell.exe -Command '<powershell commmand>'
übergeben.
Wie mit Updates verfahren wird.
Wenn Sie eine Anwendungsversion für eine VM oder VM-Skalierungsgruppe aktualisieren, wird der Updatebefehl verwendet, den Sie bei der Bereitstellung angegeben haben. Wenn die aktualisierte Version keinen Updatebefehl enthält, wird die aktuelle Version entfernt und die neue Version installiert.
Updatebefehle sollten unter der Annahme geschrieben werden, dass sie von jeder älteren Version der VM-Anwendung aktualisiert werden könnten.
Behandeln von Fehlern als Bereitstellungsfehler
Die Vm-Anwendungserweiterung gibt immer einen Erfolg zurück, unabhängig davon, ob eine VM-App beim Installieren/Aktualisieren/Entfernen fehlgeschlagen ist. Die Anwendungserweiterung für virtuelle Computer gibt den Erweiterungsstatus nur dann als Fehler an, wenn ein Problem mit der Erweiterung oder der zugrundeliegenden Infrastruktur vorliegt. Dieses Verhalten wird durch das Flag „Fehler als Bereitstellungsfehler behandeln“ ausgelöst, das standardmäßig auf $false
festgelegt ist und in $true
geändert werden kann. Das Fehlerflag kann in PowerShell oder in der CLI konfiguriert werden.
Verpacken und Installieren von VM-Anwendungen unter Linux
Zum Erstellen einer VM-Anwendung benötigen Sie Anwendungspaket und Skripts, um die Anwendung ordnungsgemäß zu installieren, zu aktualisieren und zu löschen.
Drittanbieteranwendungen für Linux können auf verschiedene Weise gepackt werden. Im Folgenden erfahren Sie, wie Sie die Erstellung der Installationsbefehle für einige der gängigsten Befehle handhaben.
.tar- und .gz-Dateien
Bei diesen Dateien handelt es sich um komprimierte Archive, die an einem gewünschten Speicherort extrahiert werden können. Überprüfen Sie die Installationsanweisungen für das ursprüngliche Paket, falls sie an einen bestimmten Speicherort extrahiert werden müssen. Wenn die .tar.gz-Datei Quellcode enthält, lesen Sie die Anweisungen für das Paket, um zu erfahren, wie Sie sie aus der Quelle installieren.
Beispiel zum Installieren eines Befehls, um auf einem Linuxcomputer golang
zu installieren:
sudo tar -C /usr/local -xzf go_linux
Beispiel für einen Befehl zum Entfernen:
sudo rm -rf /usr/local/go
Erstellen von Anwendungspaketen mithilfe von .deb
, .rpm
und anderen plattformspezifischen Paketen für VMs mit eingeschränktem Zugriff auf das Internet
Sie können einzelne Pakete für plattformspezifische Paket-Manager herunterladen, aber sie enthalten in der Regel nicht alle Abhängigkeiten. Für diese Dateien müssen Sie auch alle Abhängigkeiten in das Anwendungspaket beifügen oder den Systempaket-Manager die Abhängigkeiten über die Repositorys herunterladen lassen, die für den virtuellen Computer verfügbar sind. Wenn Sie mit einem virtuellen Computer mit eingeschränktem Internetzugriff arbeiten, müssen Sie alle Abhängigkeiten selbst packen.
Die Ermittlung der Abhängigkeiten kann etwas schwierig sein. Es gibt Tools von Drittanbietern, mit denen Sie die gesamte Abhängigkeitsstruktur anzeigen können.
In Ubuntu können Sie sudo apt show <package_name> | grep Depends
ausführen, um alle Pakete anzuzeigen, die beim Ausführen des Befehls sudo apt-get install <packge_name>
installiert werden. Anschließend können Sie diese Ausgabe verwenden, um alle .deb
-Dateien herunterzuladen und ein Archiv zu erstellen, das als Anwendungspaket verwendet werden kann.
Führen Sie die folgenden Schritte aus, um ein VM-Anwendungspaket zum Installieren von PowerShell auf Ubuntu zu erstellen:
- Führen Sie die folgenden Befehle aus, um das Repository zum Herunterladen von PowerShell und zum Identifizieren von Paketabhängigkeiten auf einer neuen Ubuntu-VM zu aktivieren.
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
- Überprüfen Sie die Ausgabe der Zeile Depends, in der die folgenden Pakete aufgelistet sind:
Depends: libc6, lib32gcc-s1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
- Laden Sie jede dieser Dateien mithilfe von
sudo apt-get download <package_name>
herunter, und erstellen Sie ein tar-komprimiertes Archiv mit allen Dateien.
- Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Ubuntu 20.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Ubuntu 22.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Dieses tar-Archiv ist die Anwendungspaketdatei.
- Der Installationsbefehl lautet in diesem Fall:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
- Und der Entfernen-Befehl lautet:
sudo apt remove powershell
Verwenden Sie sudo apt autoremove
, anstatt umständlich zu versuchen, alle Abhängigkeiten zu entfernen. Möglicherweise haben Sie andere Anwendungen mit überlappenden Abhängigkeiten installiert. In diesem Fall würde ein expliziter Entfernen-Befehl fehlschlagen.
Falls Sie die Abhängigkeiten nicht selbst auflösen möchten und apt
eine Verbindung mit den Repositorys herstellen kann, können Sie eine Anwendung mit nur einer .deb
-Datei installieren und apt
die Abhängigkeiten verarbeiten lassen.
Beispiel für einen Befehl zum Installieren:
dpkg -i <package_name> || apt --fix-broken install -y
Erstellen von VM-Anwendungen unter Windows
Die meisten Anwendungen von Drittanbietern bei Windows sind als .exe- oder .msi-Installationsprogramme verfügbar. Einige sind auch zum Extrahieren und Ausführen von ZIP-Dateien verfügbar. Sehen wir uns die bewährten Methoden für jede dieser Methoden an.
.exe-Installationsprogramm
Ausführbare Installationsprogramme starten in der Regel eine Benutzeroberfläche und erfordern, dass jemand in der Benutzeroberfläche eine Auswahl vornimmt. Wenn das Installationsprogramm einen Parameter Automatik-Modus (Silent Mode) unterstützt, sollte er in der Installationszeichenfolge enthalten sein.
Auch „cmd.exe“ geht davon aus, dass ausführbare Dateien die Erweiterung .exe
aufweisen, daher müssen Sie die Datei umbenennen, damit sie über die Erweiterung .exe
verfügt.
Wenn ich ein VM-Anwendungspaket für myApp.exe
erstellen möchte, das als ausführbare Datei versendet wird, heißt meine VM-Anwendung „myApp“. Daher schreibe ich den Befehl unter der Voraussetzung, dass sich das Anwendungspaket im aktuellen Verzeichnis befindet:
"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"
Wenn die ausführbare Datei des Installationsprogramms keinen Deinstallations-Parameter unterstützt, können Sie manchmal die Registrierung auf einem Testcomputer nachschauen, um zu erfahren, wo sich das Deinstallationsprogramm befindet.
In der Registrierung wird die Deinstallationszeichenfolge in Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString
gespeichert, sodass Sie die Inhalte als Ihren Entfernen-Befehl verwenden können:
'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'
.msi-Installationsprogramm
Für die Befehlszeilenausführung der Installationsprogramme .msi
sollten die Befehle msiexec
zum Installieren oder Entfernen einer Anwendung verwendet werden. In der Regel wird msiexec
als eigener separater Prozess ausgeführt und cmd
wartet nicht auf dessen Abschluss, was zu Problemen bei der Installation von mehr als einer Anwendung für virtuelle Computer führen kann. Der Befehl start
kann zusammen mit msiexec
verwendet werden, um sicherzugehen, dass die Installation zum Abschluss gebracht wird, bevor der Befehl zurückkehrt. Beispiel:
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
Beispiel für einen Befehl zum Entfernen:
start /wait %windir%\\system32\\msiexec.exe /x myapp /quiet /forcerestart /log myapp_uninstall.log
In der Regel wird der Befehl start
in einem Batchskript aufgerufen. Bei Verwendung mit dem /wait
Parameter wird das aufrufende Skript angehalten, bis der aufgerufene Prozess beendet wird. Nach Abschluss des Vorgangs überprüft das Batchskript die errorlevel
-Variable, die vom Befehl start
festgelegt und beendet den Prozess wie folgt:
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...
Zip-Dateien
Bei ZIP- oder anderen komprimierten Dateien benennen Sie die Datei um, und entzippen Sie den Inhalt des Anwendungspakets in das gewünschte Ziel.
Beispiel für einen Befehl zum Installieren:
rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"
Beispiel für einen Befehl zum Entfernen:
rmdir /S /Q C:\\myapp
Behandeln von Problemen bei VM-Anwendungen
Um zu wissen, ob eine bestimmte VM-Anwendung erfolgreich zur VM-Instanz hinzugefügt wurde, überprüfen Sie die Meldung der Vm-Anwendungserweiterung.
Weitere Informationen zum Abrufen des Status von VM-Erweiterungen finden Sie unter VM-Erweiterungen und Funktionen für Linux und VM-Erweiterungen und Funktionen für Windows.
Um den Status für die Erweiterungen für virtuelle Computer abzurufen, verwenden Sie Get-AzVM:
Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10
Um den Status für die Skalierungsgruppenerweiterungen abzurufen, verwenden Sie Get-AzVMSS:
$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary = New-Object System.Collections.ArrayList
$result | ForEach-Object {
$res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
$resultSummary.Add($res) | Out-Null
}
$resultSummary | convertto-json -depth 5
Fehlermeldungen
`Message` | BESCHREIBUNG |
---|---|
Die aktuelle Anwendungsversion für virtuelle Computer {Name} wurde am {Datum} als veraltet erklärt. | Sie haben versucht, eine Anwendungsversion für virtuelle Computer bereitzustellen, die bereits veraltet ist. Versuchen Sie, latest zu verwenden, anstatt eine bestimmte Version anzugeben. |
Die aktuelle Anwendungsversion für virtuelle Computer {Name} unterstützt das Betriebssystem {Betriebssystem}, während das aktuelle Disk-Betriebssystem {Betriebssystem} ist. | Sie haben versucht, eine Linux-Anwendung auf einer Windows-Instanz oder umgekehrt bereitzustellen. |
Die maximale Anzahl von Anwendungen für virtuelle Computer (max=5, current={count}) wurde überschritten. Verwenden Sie weniger Anwendungen und wiederholen Sie die Anforderung. | Derzeit werden nur fünf VM-Anwendungen pro VM oder pro Skalierungsgruppe unterstützt. |
Es wurde mehr als eine VM-Anwendung mit derselben packageReferenceId angegeben. | Dieselbe Anwendung wurde mehr als einmal angegeben. |
Das Abonnement ist nicht für den Zugriff auf dieses Image autorisiert. | Das Abonnement hat keinen Zugriff auf diese Anwendungsversion. |
Das Speicherkonto in den Argumenten ist nicht vorhanden. | Es liegen keine Anwendungen für dieses Abonnement vor. |
Das Plattformimage {image} ist nicht verfügbar. Überprüfen Sie, ob alle Felder im Speicherprofil richtig sind. Weitere Informationen zum Speicherprofil finden Sie unter https://aka.ms/storageprofile. | Die Anwendung ist nicht vorhanden. |
Das Katalogimage {image} ist in der Region {region} nicht verfügbar. Bitten Sie den Besitzer des Images um eine Replikation in diese Region, oder ändern Sie die angeforderte Region. | Die Kataloganwendungsversion ist vorhanden, wurde aber nicht in diese Region repliziert. |
Die SAS ist für den Quell-URI {uri} ungültig. | Beim Abrufen von Informationen über die URL (mediaLink oder defaultConfigurationLink) wurde vom Speicher ein Fehler Forbidden empfangen. |
Das Blob, auf das vom Quell-URI {uri} verwiesen wird, ist nicht vorhanden. | Das für die mediaLink-Eigenschaft oder die defaultConfigurationLink-Eigenschaft bereitgestellte Blob ist nicht vorhanden. |
Auf die URL der Kataloganwendungsversion {url} kann aufgrund des folgenden Fehlers nicht zugegriffen werden: Remotename nicht gefunden. Stellen Sie sicher, dass das Blob vorhanden und öffentlich zugänglich ist oder eine SAS-URL mit Leseberechtigungen ist. | Der wahrscheinlichste Fall ist, dass kein SAS-URI mit Leseberechtigungen bereitgestellt wurde. |
Auf die URL der Kataloganwendungsversion {url} kann aufgrund des folgenden Fehlers nicht zugegriffen werden: {error description}. Stellen Sie sicher, dass das Blob vorhanden und öffentlich zugänglich ist oder eine SAS-URL mit Leseberechtigungen ist. | Es gibt ein Problem mit dem bereitgestellten Speicher-Blob. Die Fehlerbeschreibung enthält weitere Informationen. |
Der Vorgang {operationName} ist für {application} nicht zulässig, da er zum Löschen markiert ist. Sie können den Löschvorgang nur wiederholen (oder warten, bis ein fortlaufender Vorgang abgeschlossen ist). | Versuchen Sie, eine Anwendung zu aktualisieren, die gerade gelöscht wird. |
Der Wert {Wert} des Parameters "galleryApplicationVersion.properties.publishingProfile.replicaCount" liegt außerhalb des zulässigen Bereichs. Der Wert muss zwischen eins und drei liegen, einschließlich. | Für VM-Anwendungsversionen sind nur zwischen einem und drei Replikate zulässig. |
Das Ändern der Eigenschaft „galleryApplicationVersion.properties.publishingProfile.manageActions.install“ ist nicht zulässig. (Oder aktualisieren, löschen) | Es ist nicht möglich, eine der Aktionen zum Verwalten auf einer vorhandenen Anwendung für virtuelle Computer zu ändern. Es muss eine neue Anwendungs-Version für virtuelle Computer erstellt werden. |
Das Ändern der Eigenschaft „galleryApplicationVersion.properties.publishingProfile.settings.packageFileName“ ist nicht zulässig. (oder configFileName) | Es ist nicht möglich, eine der Einstellungen wie den Paketdateinamen oder den Namen der Konfigurationsdatei zu ändern. Es muss eine neue Anwendungs-Version für virtuelle Computer erstellt werden. |
Das Blob, auf das vom Quell-URI {uri} verwiesen wird, ist zu groß: Größe = {size}. Die maximal zulässige Blobgröße beträgt "1 GB". | Die maximale Größe für ein Blob, auf das von mediaLink oder defaultConfigurationLink verwiesen wird, beträgt derzeit 1 GB. |
Das Blob, auf das vom Quell-URI {uri} verwiesen wird, ist nicht vorhanden. | Es wurde auf ein leeres Blob verwiesen. |
Der Blobtyp {type} wird vom Vorgang {operation} nicht unterstützt. Es werden nur Seitenblobs und Blockblobs unterstützt. | Die Anwendungen für virtuelle Computer unterstützen nur Seitenblobs und Blockblobs. |
Die SAS ist für den Quell-URI {uri} ungültig. | Der für mediaLink oder defaultConfigurationLink angegebene SAS-URI ist kein gültiger SAS-URI. |
{region} kann in Zielregionen nicht angegeben werden, da im Abonnement das erforderliche Feature {featureName} fehlt. Registrieren Sie entweder Ihr Abonnement mit dem erforderlichen Feature oder entfernen Sie die Region aus der Liste der Zielregionen. | Um Anwendungen für virtuelle Computer in bestimmten eingeschränkten Regionen verwenden zu können, muss das Feature Flag für dieses Abonnement registriert sein. |
Galerie-Image-Versionen, die Profilregionen {Regionen} veröffentlichen, müssen den Speicherort der Image-Version {Speicherort} enthalten. | Die Liste der Regionen für die Replizierung muss den Speicherort enthalten, an dem sich die Anwendungsversion befindet. |
Duplizierten Regionen sind in Zielveröffentlichungsregionen nicht zulässig. | Die Veröffentlichungsregionen verfügen möglicherweise nicht über Duplikate. |
Ressourcen von Kataloganwendungsversionen unterstützen derzeit keine Verschlüsselung. | Die Verschlüsselungseigenschaft für Zielregionen wird für Anwendungen für virtuelle Computer nicht unterstützt. |
Der Entitätsname stimmt nicht mit dem Namen in der Anforderungs-URL überein. | Die in der Anforderungs-URL angegebene Version der Kataloganwendung stimmt nicht mit der in der Anforderung angegebenen Version überein. |
Der Name der Version der Galerie-Anwendung ist ungültig. Der Name der Anwendungsversion sollte auf Major(int32) folgen. Minor(int32). Patch(int32)-Format, wobei int zwischen 0 und 2.147.483.647 (einschließlich) liegt. Beispiel: 1.0.0, 2018.12.1 usw. |
Die Version der Galerie-Anwendung muss dem angegebenen Format folgen. |