Avsluta meddelande för Azure Virtual Machine Scale Set-instanser

Skalningsuppsättningsinstanser kan välja att ta emot meddelanden om instansavslut och ange en fördefinierad tidsgräns för fördröjning till avsluta-åtgärden. Avslutningsmeddelandet skickas via Azure Metadata Service – Schemalagda händelser, som ger meddelanden om och fördröjningar av effektfulla åtgärder, till exempel omstarter och omdistribution. Lösningen lägger till en annan händelse – Avsluta – i listan över schemalagda händelser, och den associerade fördröjningen av avslutshändelsen beror på fördröjningsgränsen som anges av användarna i deras modellkonfigurationer för skalningsuppsättningar.

När du har registrerat dig för Schemalagda händelser genom att anropa lämplig metadatatjänstslutpunkt behöver skalningsuppsättningsinstanser inte vänta tills den angivna tidsgränsen upphör att gälla innan instansen tas bort. När du har fått ett Avsluta-meddelande kan instansen välja att tas bort när som helst innan tidsgränsen för uppsägning upphör att gälla. Det går inte att aktivera aviseringar för avbrutna meddelanden på instanser av oanvänd kapacitet. Mer information om instanser av oanvänd kapacitet finns i Azure Spot Virtual Machines for Virtual Machine Scale Sets

Aktivera aviseringar om att avsluta

Det finns flera sätt att aktivera avslutningsmeddelanden på dina skalningsuppsättningsinstanser, enligt beskrivningen i exemplen nedan.

Azure Portal

Följande steg aktiverar aviseringar om att avsluta när du skapar en ny skalningsuppsättning.

  1. Gå till Vm-skalningsuppsättningar.
  2. Välj + Lägg till för att skapa en ny skalningsuppsättning.
  3. Gå till fliken Hantering .
  4. Leta upp avsnittet Instansavslut.
  5. För Instansavslutsmeddelande väljer du .
  6. För Avslutningsfördröjning (minuter)anger du önskad standardtimeout.
  7. När du är klar med att skapa den nya skalningsuppsättningen väljer du knappen Granska + skapa .

Du kan också aktivera avsluta meddelanden på en befintlig skalningsuppsättning.

  1. Navigera till önskad skalningsuppsättning
  2. Gå till fliken Konfiguration
  3. För Aktivera meddelande om instansavslut väljer du .
  4. För Avslutningsfördröjning (minuter)anger du önskad standardtimeout.
  5. Välj knappen Spara .

REST-API

I följande exempel aktiveras aviseringar om att avsluta skalningsuppsättningen.

PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2019-03-01`
{
  "properties": {
    "virtualMachineProfile": {
            "scheduledEventsProfile": {
                "terminateNotificationProfile": {
                    "notBeforeTimeout":"PT5M",
                    "enable":true
                }
            }
        }
    }        
}

Ovanstående block anger en timeout-fördröjning på 5 minuter (vilket anges av PT5M) för en avslutad åtgärd på alla instanser i skalningsuppsättningen. Fältet notBeforeTimeout kan ta valfritt värde mellan 5 och 15 minuter i ISO 8601-format. Du kan ändra standardtimeouten för åtgärden avsluta genom att ändra egenskapen notBeforeTimeout under terminateNotificationProfile som beskrivs ovan.

När du har aktiverat scheduledEventsProfile på skalningsuppsättningsmodellen och angett notBeforeTimeout uppdaterar du de enskilda instanserna till den senaste modellen för att återspegla ändringarna.

Kommentar

Avsluta meddelanden på skalningsuppsättningsinstanser kan bara aktiveras med API-version 2019-03-01 och senare

Azure PowerShell

När du skapar en ny skalningsuppsättning kan du aktivera avslutningsmeddelanden i skalningsuppsättningen med hjälp av cmdleten New-AzVmssConfig .

Det här exempelskriptet går igenom skapandet av en skalningsuppsättning och associerade resurser med hjälp av konfigurationsfilen: Skapa en fullständig vm-skalningsuppsättning. Du kan ange "konfigurera avsluta"-meddelanden genom att lägga till parametrarna TerminateScheduledEvents och TerminateScheduledEventNotBeforeTimeoutInMinutes i konfigurationsobjektet för att skapa skalningsuppsättningen . I följande exempel aktiveras funktionen med en tidsgräns på 10 minuter.

Viktigt!

Från och med november 2023 kommer VM-skalningsuppsättningar som skapats med PowerShell och Azure CLI som standard att vara flexibla orkestreringsläge om inget orkestreringsläge har angetts. Mer information om den här ändringen och vilka åtgärder du bör vidta finns i Icke-bakåtkompatibla ändringar för VMSS PowerShell/CLI-kunder – Microsoft Community Hub

New-AzVmssConfig `
  -Location "VMSSLocation" `
  -SkuCapacity 2 `
  -OrchestrationMode "Flexible" `
  -SkuName "Standard_DS2" `
  -TerminateScheduledEvents $true `
  -TerminateScheduledEventNotBeforeTimeoutInMinutes 10

Använd cmdleten Update-AzVmss för att aktivera avslutningsmeddelanden i en befintlig skalningsuppsättning.

Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -TerminateScheduledEvents $true `
  -TerminateScheduledEventNotBeforeTimeoutInMinutes 15

Exemplet ovan aktiverar avsluta meddelanden på en befintlig skalningsuppsättning och anger en tidsgräns på 15 minuter för avsluta-händelsen.

När du har aktiverat schemalagda händelser i skalningsuppsättningsmodellen och angett tidsgränsen uppdaterar du de enskilda instanserna till den senaste modellen för att återspegla ändringarna.

Azure CLI 2.0

Följande exempel är för att aktivera avslutningsmeddelande när du skapar en ny skalningsuppsättning.

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --image Ubuntu2204 \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --terminate-notification-time 10

Exemplet ovan skapar först en resursgrupp och skapar sedan en ny skalningsuppsättning med avsluta meddelanden aktiverade för en 10-minuters standardtimeout.

Följande exempel är för att aktivera avslutningsmeddelande i en befintlig skalningsuppsättning.

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --enable-terminate-notification true \
  --terminate-notification-time 10

Få aviseringar om att avsluta

Avslutsmeddelanden levereras via schemalagda händelser, vilket är en Azure Metadata Service. Tjänsten Azure Metadata visar information om hur du kör virtuella datorer med hjälp av en REST-slutpunkt som är tillgänglig från den virtuella datorn. Informationen är tillgänglig via en icke-dirigerbar IP-adress så att den inte exponeras utanför den virtuella datorn.

Schemalagda händelser aktiveras för din skalningsuppsättning första gången du begär händelser. Du kan förvänta dig ett fördröjt svar under ditt första samtal på upp till två minuter. Fråga slutpunkten regelbundet för att identifiera kommande underhållshändelser och status för pågående underhållsaktiviteter.

Schemalagda händelser inaktiveras för din skalningsuppsättning om skalningsuppsättningsinstanserna inte gör en begäran på 24 timmar.

Slutpunktsidentifiering

För VNET-aktiverade virtuella datorer är metadatatjänsten tillgänglig från en statisk ip-adress som inte kan dirigeras, 169.254.169.254.

Den fullständiga slutpunkten för den senaste versionen av Schemalagda händelser är:

'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'

Frågesvar

Ett svar innehåller en matris med schemalagda händelser. En tom matris innebär att det för närvarande inte finns några schemalagda händelser.

Om det finns schemalagda händelser innehåller svaret en matris med händelser. För en "Avsluta"-händelse ser svaret ut så här:

{
    "DocumentIncarnation": {IncarnationID},
    "Events": [
        {
            "EventId": {eventID},
            "EventType": "Terminate",
            "ResourceType": "VirtualMachine",
            "Resources": [{resourceName}],
            "EventStatus": "Scheduled",
            "NotBefore": {timeInUTC},
        }
    ]
}

DocumentInkarnation är en ETag och ger ett enkelt sätt att kontrollera om nyttolasten Händelser har ändrats sedan den senaste frågan.

Mer information om vart och ett av fälten ovan finns i dokumentationen om schemalagda händelser för Windows och Linux.

Svara på händelser

När du har lärt dig om en kommande händelse och slutfört logiken för en korrekt avstängning kan du godkänna den utestående händelsen genom att göra ett POST-anrop till metadatatjänsten med EventId. POST-anropet anger för Azure att det kan fortsätta med borttagningen av den virtuella datorn.

Nedan visas den json som förväntas i POST-begärandetexten. Begäran bör innehålla en lista över StartRequests. Varje StartRequest innehåller EventId för händelsen som du vill påskynda:

{
	"StartRequests" : [
		{
			"EventId": {EventId}
		}
	]
}

Se till att varje virtuell dator i skalningsuppsättningen endast godkänner EventID som är relevant för den virtuella datorn. En virtuell dator kan hämta sitt eget vm-namn via instansmetadata. Det här namnet har formatet "{scale-set-name}_{instance-id}" och visas i avsnittet Resurser i frågesvaret som beskrivs ovan.

Du kan också referera till exempelskript för att fråga och svara på händelser i Python.

Tips och regelverk

  • Avsluta endast meddelanden om borttagningsåtgärder – Alla borttagningsåtgärder (manuell borttagning eller autoskalningsinitierad inskalning) genererar Avsluta händelser om skalningsuppsättningen har scheduledEventsProfile aktiverat. Andra åtgärder som omstart, omimering, omdistribution och stopp/frigöring genererar inte Avsluta händelser.
  • Ingen obligatorisk väntan på timeout – Du kan starta avsluta-åtgärden när som helst efter att händelsen har tagits emot och innan händelsens NotBefore-tid upphör att gälla.
  • Obligatorisk borttagning vid timeout – Det finns ingen möjlighet att utöka tidsgränsvärdet efter att en händelse har genererats. När tidsgränsen upphör att gälla bearbetas den väntande avsluta-händelsen och den virtuella datorn tas bort.
  • Ändringsbart timeout-värde – Du kan ändra timeout-värdet när som helst innan en instans tas bort genom att ändra egenskapen notBeforeTimeout i skalningsuppsättningsmodellen och uppdatera de virtuella datorinstanserna till den senaste modellen.
  • Godkänn alla väntande borttagningar – Om det finns en väntande borttagning på VM_1 som inte har godkänts och du har godkänt en annan avsluta-händelse på VM_2, tas VM_2 inte bort förrän avslutshändelsen för VM_1 har godkänts eller tidsgränsen har förflutit. När du har godkänt avsluta-händelsen för VM_1 tas både VM_1 och VM_2 bort.
  • Godkänn alla samtidiga borttagningar – Om du utökar exemplet ovan, om VM_1 och VM_2 har samma NotBefore-tid , måste båda avsluta händelserna godkännas eller så tas ingen av de virtuella datorerna bort innan tidsgränsen går ut.

Felsöka

Det gick inte att aktivera scheduledEventsProfile

Om du får ett "BadRequest"-fel med ett felmeddelande som anger "Det gick inte att hitta medlemmen 'scheduledEventsProfile' på objektet av typen 'VirtualMachineProfile'", kontrollerar du DEN API-version som används för skalningsuppsättningsåtgärderna. Compute API version 2019-03-01 eller senare krävs.

Det gick inte att hämta avsluta händelser

Om du inte får några Avsluta händelser via schemalagda händelser kontrollerar du den API-version som används för att hämta händelserna. Metadata Service API version 2019-01-01 eller senare krävs för Avsluta händelser.

'http://169.254.169.254/metadata/scheduledevents?api-version=2019-01-01'

Hämta avsluta händelse med felaktig NotBefore-tid

När du har aktiverat scheduledEventsProfile på skalningsuppsättningsmodellen och angett notBeforeTimeout uppdaterar du de enskilda instanserna till den senaste modellen för att återspegla ändringarna.

Nästa steg

Lär dig hur du distribuerar ditt program på VM-skalningsuppsättningar.