Programmgesteuertes Verwalten von Updates für Azure-VMs

In diesem Artikel werden Sie durch den Prozess der Verwendung der REST-API von Azure geführt, um eine Bewertung und eine Updatebereitstellung auf Ihrer Azure-VM mit Azure Update Manager in Azure auszulösen. Wenn Sie mit Update Manager noch nicht vertraut sind und mehr erfahren möchten, lesen Sie die Übersicht über Azure Update Manager. Wie Sie die Azure REST-API zur Verwaltung von Arc-aktivierten Servern verwenden können, finden Sie unter Programmatische Arbeit mit Arc-aktivierten Servern.

Mit Azure Update Manager in Azure können Sie die REST-API von Azure programmgesteuert für den Zugriff verwenden. Darüber hinaus können Sie die entsprechenden REST-Befehle aus Azure PowerShell und Azure CLI verwenden.

Unterstützung für die REST-API von Azure zum Verwalten von Azure-VMs ist über die Update Manager-Erweiterung für VMs verfügbar.

Updatebewertung

Um eine Updatebewertung auf Ihrer Azure-VM auszulösen, geben Sie die folgende POST-Anforderung an:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/assessPatches?api-version=2020-12-01`

Um die POST-Anforderung anzugeben, können Sie den Azure CLI-Befehl az vm assess-patches verwenden.

az vm assess-patches -g MyResourceGroup -n MyVm

Updatebereitstellung

Um eine Updatebbereitstellung auf Ihrer Azure-VM auszulösen, geben Sie die folgende POST-Anforderung an:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/installPatches?api-version=2020-12-01`

Anforderungstext

In der folgenden Tabelle werden die Elemente des Anforderungstexts beschrieben:

Eigenschaft Beschreibung
maximumDuration Maximale Zeit, die der Vorgang ausführt. Es muss eine ISO 8601-kompatible Dauerzeichenfolge sein, z.B. PT4H (4 Stunden).
rebootSetting Flag, das angibt, ob der Computer neu gestartet werden soll und ob die Installation des Gastbetriebssystem-Updates dies für die Fertigstellung erfordert. Folgende Werte sind zulässig: IfRequired, NeverReboot, AlwaysReboot.
windowsParameters Parameteroptionen für das Gastbetriebssystemupdate auf Azure-VMs, die ein unterstütztes Microsoft Windows Server-Betriebssystem ausführen.
windowsParameters - classificationsToInclude Liste der Kategorien/Klassifizierungen, die zum Auswählen der auf dem Computer installierten Updates verwendet werden sollen. Folgende Werte sind zulässig: Critical, Security, UpdateRollup, FeaturePack, ServicePack, Definition, Tools, Updates
windowsParameters - kbNumbersToInclude Liste der Windows Update KB-Ids, die installiert werden sollen. Alle Updates, die zu den in der Liste bereitgestellten classificationsToInclude Klassifizierungen gehören, werden installiert. kbNumbersToInclude ist eine optionale Liste spezifischer KBs, die zusätzlich zu den Klassifizierungen installiert werden sollen. Beispiel: 1234
windowsParameters - kbNumbersToExclude Liste der Windows Update KB-Ids, die nicht installiert werden sollen. Mit diesem Parameter wird windowsParameters - classificationsToInclude außer Kraft gesetzt, d. h. eine hier angegebene Windows Update-KB-ID wird nicht installiert, auch wenn sie zur Klassifizierung gehört, die unter dem Parameter classificationsToInclude angegeben ist.
maxPatchPublishDate Dies wird verwendet, um Patches zu installieren, die am oder vor diesem angegebenen maximalen Veröffentlichungsdatum veröffentlicht wurden.
linuxParameters Parameteroptionen für das Gastbetriebssystemupdate auf Azure-VMs, die ein unterstütztes Linux Server-Betriebssystem ausführen.
linuxParameters - classificationsToInclude Liste der Kategorien/Klassifizierungen, die zum Auswählen der auf dem Computer installierten Updates verwendet werden sollen. Folgende Werte sind zulässig: Critical, Security, Other
linuxParameters - packageNameMasksToInclude Liste der Linux-Pakete, die installiert werden sollen. Alle Updates, die zu den in der Liste bereitgestellten classificationsToInclude Klassifizierungen gehören, werden installiert. packageNameMasksToInclude ist eine optionale Liste von Paketnamen, die zusätzlich zu den Klassifizierungen installiert werden sollen. Beispiel: mysql, libc=1.0.1.1, kernel*
linuxParameters - packageNameMasksToExclude Liste der Updates, die nicht installiert werden sollten. Mit diesem Parameter wird linuxParameters - packageNameMasksToExclude außer Kraft gesetzt, d. h. ein hier angegebenes Paket wird nicht installiert, auch wenn es zur Klassifizierung gehört, die unter dem Parameter classificationsToInclude angegeben ist.

Um die POST-Anforderung anzugeben, können Sie den folgenden Azure REST-API-Aufruf mit gültigen Parametern und Werten verwenden.

POST on 'subscriptions/{subscriptionId}/resourceGroups/acmedemo/providers/Microsoft.Compute/virtualMachines/ameacr/installPatches?api-version=2020-12-01

{
    "maximumDuration": "PT120M",
    "rebootSetting": "IfRequired",
    "windowsParameters": {
      "classificationsToInclude": [
        "Security",
        "UpdateRollup",
        "FeaturePack",
        "ServicePack"
      ],
      "kbNumbersToInclude": [
        "11111111111",
        "22222222222222"
      ],
      "kbNumbersToExclude": [
        "333333333333",
        "55555555555"
      ]
    }
  }'

Erstellen eines Wartungskonfigurationszeitplans

Um einen Wartungskonfigurationsplan zu erstellen, geben Sie die folgende PUT-Anforderung an:

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Maintenance/maintenanceConfigurations/<maintenanceConfigurationsName>?api-version=2021-09-01-preview`

Anforderungstext

In der folgenden Tabelle werden die Elemente des Anforderungstexts beschrieben:

Eigenschaft Beschreibung
id Vollqualifizierter Bezeichner der Ressource
location Speicherort der Ressource abrufen oder festlegen
name Name der Ressource
properties.extensionProperties „extensionProperties“ von „maintenanceConfiguration“ abrufen oder festlegen
properties.maintenanceScope „maintenanceScope“ der Konfiguration abrufen oder festlegen
properties.maintenanceWindow.duration Dauer des Wartungsfensters im HH:MM-Format. Wenn die Angabe fehlt, wird der Standardwert basierend auf dem angegebenen Wartungsumfang verwendet. z. B. 05:00.
properties.maintenanceWindow.expirationDateTime Effektives Ablaufdatum des Wartungsfensters im JJJJ-MM-TT hh:mm-Format. Das Fenster wird in der angegebenen Zeitzone mit der entsprechenden Sommerzeit dieser Zeitzone erstellt. Das Ablaufdatum muss auf ein Datum in der Zukunft festgelegt werden. Wenn die Angabe fehlt, wird es auf den maximalen Zeitpunkt (9999-12-31 23:59:59) festgelegt.
properties.maintenanceWindow.recurEvery Rate, bei der ein Wartungsfenster wieder auftreten soll. Die Rate kann als täglicher, wöchentlicher oder monatlicher Zeitplan ausgedrückt werden. Tägliche Zeitpläne werden als „recurEvery: [Häufigkeit als Ganzzahl]['Tag(e)']“ formatiert. Wird keine Rate angegeben, wird die Standardrate 1 verwendet. Beispiele für tägliche Zeitpläne sind: recurEvery: Tag, recurEvery: 3Tage. Wöchentliche Zeitpläne werden als „recurEvery: [Häufigkeit als Ganzzahl]['Woche(n)'] [Optionale kommagetrennte Liste der Wochentage Montag-Sonntag]“ formatiert. Beispiel für wöchentliche Zeitpläne sind: recurEvery: 3Wochen, recurEvery: Woche Samstag, Sonntag. Ein monatlicher Zeitplan wird als „recurEvery: [Rate als Ganzzahl]['Month(s)] [Kommagetrennte Liste von Monatstagen]“ oder „recurEvery: [Rate als Ganzzahl]['Month(s)] [Woche des Monats (First, Second, Third, Fourth, Last)] [Wochentag Monday-Sunday]“ formatiert. Beispiel für monatliche Zeitpläne sind: recurEvery: Monat, recurEvery: 2Monate, recurEvery: Monat Tag23, Tag24, recurEvery: Monat letzter Sonntag, recurEvery: Monat vierter Montag.
properties.maintenanceWindow.startDateTime Effektives Startdatum des Wartungsfensters im JJJJ-MM-TT hh:mm-Format. Sie können das Startdatum entweder auf das aktuelle oder ein zukünftiges Datum festlegen. Das Fenster wird in der angegebenen Zeitzone erstellt und an die entsprechende Sommerzeit dieser Zeitzone angepasst.
properties.maintenanceWindow.timeZone Name der Zeitzone. Die Liste der Zeitzonen kann durch Ausführen von „[System.TimeZoneInfo]:GetSystemTimeZones()“ in PowerShell abgerufen werden. Beispiel: Pacific Normalzeit, UTC, Mitteleuropäische Zeit, Koreanische Normalzeit, Zentralaustralische Normalzeit.
properties.namespace Namespace der Ressource abrufen oder festlegen
properties.visibility Sichtbarkeit der Konfiguration abrufen oder festlegen. Der Standardwert lautet „Custom“.
systemData Azure Resource Manager-Metadaten mit createdBy- und modifiedBy-Informationen.
tags Tags der Ressource abrufen oder festlegen
type Typ der Ressource

Um die POST-Anforderung anzugeben, können Sie den folgenden Azure REST-API-Aufruf mit gültigen Parametern und Werten verwenden.

PUT on '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestAdv2?api-version=2021-09-01-preview

{
  "location": "eastus2euap",
  "properties": {
    "namespace": null,
    "extensionProperties": {
      "InGuestPatchMode" : "User"
    },
    "maintenanceScope": "InGuestPatch",
    "maintenanceWindow": {
      "startDateTime": "2021-08-21 01:18",
      "expirationDateTime": "2221-05-19 03:30",
      "duration": "01:30",
      "timeZone": "India Standard Time",
      "recurEvery": "Day"
    },
    "visibility": "Custom",
    "installPatches": {
      "rebootSetting": "IfRequired",
      "windowsParameters": {
        "classificationsToInclude": [
          "Security",
          "Critical",
          "UpdateRollup"
        ]
      },
      "linuxParameters": {
        "classificationsToInclude": [
          "Other"
        ]
      }
    }
  }
}'

Verknüpfen einer VM mit einem Zeitplan

Um eine VM mit einem Wartungskonfigurationsplan zu verknüpfen, geben Sie die folgende PUT-Anforderung an:

PUT on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

Um die PUT-Anforderung anzugeben, können Sie den folgenden Azure REST-API-Aufruf mit gültigen Parametern und Werten verwenden.

PUT on '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/atscalepatching/providers/Microsoft.Compute/virtualMachines/win-atscalepatching-1/providers/Microsoft.Maintenance/configurationAssignments/TestAzureInGuestAdv?api-version=2021-09-01-preview

{
  "properties": {
    "maintenanceConfigurationId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestIntermediate2"
  },
  "location": "eastus2euap"
}'

Entfernen des Computers aus dem Zeitplan

Um einen Computer aus dem Zeitplan zu entfernen, rufen Sie alle Konfigurationszuweisungsnamen für den Computer, die erstellt wurden, um den Computer dem aktuellen Zeitplan zuzuordnen, aus Azure Resource Graph ab, wie aufgeführt:

maintenanceresources
| where type =~ "microsoft.maintenance/configurationassignments"
| where properties.maintenanceConfigurationId =~ "<maintenance configuration Resource ID>"
| where properties.resourceId =~ "<Machine Resource Id>"
| project name, id

Nachdem Sie den Namen von oben abgerufen haben, löschen Sie die Konfigurationszuweisung, indem Sie der DELETE-Anforderung folgen -

DELETE on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

Nächste Schritte