Azure Metadata Service: Geplande gebeurtenissen voor Linux-VM’s

Van toepassing op: ✔️ Flexibele schaalsets ✔️ voor Linux-VM's ✔️ Uniform-schaalsets

Geplande gebeurtenissen is een Azure Metadata Service die uw toepassing tijd geeft om het onderhoud van virtuele machines (VM' s) voor te bereiden. Het bevat informatie over geplande onderhoudsevenementen (bijvoorbeeld opnieuw opstarten), zodat uw toepassing zich hierop kan voorbereiden en onderbrekingen kan beperken. Deze is beschikbaar voor alle typen Azure Virtual Machines, waaronder PaaS en IaaS op zowel Windows als Linux.

Zie Geplande gebeurtenissen voor Windows-VM's voor meer informatie over geplande gebeurtenissen in Windows.

Geplande gebeurtenissen bieden proactieve meldingen over aanstaande gebeurtenissen, voor reactieve informatie over gebeurtenissen die al zijn gebeurd, zie beschikbaarheidsinformatie voor VM's in Azure Resource Graph en regel voor beschikbaarheidswaarschuwingen maken voor virtuele Azure-machines.

Notitie

Geplande gebeurtenissen zijn algemeen beschikbaar in alle Azure-regio's. Zie De beschikbaarheid van versie en regio voor de meest recente release-informatie.

Waarom geplande gebeurtenissen gebruiken?

Veel toepassingen kunnen profiteren van tijd om het VM-onderhoud voor te bereiden. De tijd kan worden gebruikt om toepassingsspecifieke taken uit te voeren die de beschikbaarheid, betrouwbaarheid en servicebaarheid verbeteren, waaronder:

  • Controlepunt en herstel.
  • Verwerkingsstop voor verbindingen.
  • Failover van primaire replica.
  • Verwijderen uit een load balancer-pool.
  • Gebeurtenislogboeken.
  • Probleemloos afsluiten.

Met geplande gebeurtenissen kan uw toepassing detecteren wanneer onderhoud plaatsvindt en taken activeren om de impact ervan te beperken.

Geplande gebeurtenissen bieden gebeurtenissen in de volgende use cases:

De basisbeginselen

Metadata Service toont informatie over het uitvoeren van VM's met behulp van een REST-eindpunt dat toegankelijk is vanuit de VIRTUELE machine. De informatie is beschikbaar via een niet-routable IP en wordt niet weergegeven buiten de VIRTUELE machine.

Bereik

Geplande gebeurtenissen worden geleverd aan en kunnen worden bevestigd door:

  • Zelfstandige virtuele machines.
  • Alle VM's in een Azure-cloudservice (klassiek).
  • Alle VM's in een beschikbaarheidsset.
  • Alle VM's in een plaatsingsgroep van een schaalset.

Notitie

Geplande gebeurtenissen voor alle virtuele machines (VM's) in een volledige beschikbaarheidsset of een plaatsingsgroep voor een virtuele-machineschaalset worden geleverd aan alle andere VM's in dezelfde groep of set, ongeacht het gebruik van beschikbaarheidszones.

Als gevolg hiervan controleert u het Resources veld in de gebeurtenis om te bepalen welke VM's worden beïnvloed.

Eindpuntdetectie

Voor vm's met VNET is Metadata Service beschikbaar vanaf een statisch niet-routable IP-adres. 169.254.169.254 Het volledige eindpunt voor de nieuwste versie van Geplande gebeurtenissen is:

http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01

Als de VIRTUELE machine niet in een virtueel netwerk is gemaakt, zijn de standaardcases voor cloudservices en klassieke VM's extra logica vereist om het IP-adres te detecteren dat moet worden gebruikt. Zie dit voorbeeld voor meer informatie over het detecteren van het hosteindpunt.

Beschikbaarheid van versies en regio's

De service Geplande gebeurtenissen is geversied. Versies zijn verplicht; de huidige versie is 2020-07-01.

Versie Uitgavetypen Regio's Opmerkingen bij de release
2020-07-01 Algemene beschikbaarheid Alle
  • Ondersteuning toegevoegd voor gebeurtenisduur
  • 2019-08-01 Algemene beschikbaarheid Alle
  • Ondersteuning toegevoegd voor EventSource
  • 01-04-2019 Algemene beschikbaarheid Alle
  • Ondersteuning toegevoegd voor gebeurtenisbeschrijving
  • 2019-01-01 Algemene beschikbaarheid Alle
  • Er is ondersteuning toegevoegd voor Virtual Machine Scale Sets EventType 'Terminate'
  • 2017-11-01 Algemene beschikbaarheid Alle
  • Er is ondersteuning toegevoegd voor het verwijderen van Spot VM EventType 'Preempt'
  • 2017-08-01 Algemene beschikbaarheid Alle
  • Voorlopig onderstrepingsteken verwijderd uit resourcenamen voor IaaS-VM's
  • Vereiste voor metagegevensheaders afgedwongen voor alle aanvragen
  • 2017-03-01 Preview Alle
  • Eerste release
  • Notitie

    Vorige preview-versies van geplande gebeurtenissen ondersteunden {latest} als api-versie. Deze indeling wordt niet meer ondersteund en wordt in de toekomst afgeschaft.

    Geplande gebeurtenissen in- en uitschakelen

    Geplande gebeurtenissen worden ingeschakeld voor uw service wanneer u de eerste keer een aanvraag voor gebeurtenissen indient. U kunt een vertraagd antwoord verwachten in uw eerste oproep van maximaal twee minuten. Geplande gebeurtenissen zijn uitgeschakeld voor uw service als er gedurende 24 uur geen aanvraag naar het eindpunt wordt ingediend.

    Door de gebruiker geïnitieerd onderhoud

    Door de gebruiker geïnitieerd VM-onderhoud via Azure Portal, API, CLI of PowerShell resulteert in een geplande gebeurtenis. Vervolgens kunt u de logica voor onderhoudsvoorbereiding in uw toepassing testen en uw toepassing kan zich voorbereiden op door de gebruiker geïnitieerd onderhoud.

    Als u een virtuele machine opnieuw opstart, wordt een gebeurtenis met het type Reboot gepland. Als u een VIRTUELE machine opnieuw implementeert, wordt een gebeurtenis met het type Redeploy gepland. Gebeurtenissen met een gebruikersgebeurtenisbron kunnen doorgaans onmiddellijk worden goedgekeurd om een vertraging bij door de gebruiker geïnitieerde acties te voorkomen. We raden u aan om een primaire en secundaire VM te laten communiceren en door de gebruiker gegenereerde geplande gebeurtenissen te goedkeuren voor het geval de primaire VM niet meer reageert. Het onmiddellijk goedkeuren van gebeurtenissen voorkomt vertragingen bij het terugzetten van uw toepassing naar een goede status.

    Geplande gebeurtenissen voor upgrades van VMSS-gastbesturingssystemen of -installatiekopieën worden ondersteund voor VM-grootten voor algemeen gebruik die alleen updates met geheugenbehoud ondersteunen. Het werkt niet voor de G-, M-, N- en H-serie. Geplande gebeurtenissen voor upgrades van VMSS-gastbesturingssystemen en -installatiekopieën zijn standaard uitgeschakeld. Als u geplande gebeurtenissen wilt inschakelen voor deze bewerkingen op ondersteunde VM-grootten, moet u ze eerst inschakelen met osImageNotificationProfile.

    De API gebruiken

    Overzicht op hoog niveau

    Er zijn twee belangrijke onderdelen voor het verwerken van geplande gebeurtenissen, voorbereiding en herstel. Alle huidige geplande gebeurtenissen die van invloed zijn op een virtuele machine, zijn beschikbaar om te lezen via het eindpunt voor geplande IMDS-gebeurtenissen. Wanneer de gebeurtenis een terminalstatus heeft bereikt, wordt deze verwijderd uit de lijst met gebeurtenissen. In het volgende diagram ziet u de verschillende statusovergangen die een enkele geplande gebeurtenis kan ervaren:

    State diagram showing the various transitions a scheduled event can take.

    Voor gebeurtenissen met de status EventStatus:"Gepland" moet u stappen uitvoeren om uw workload voor te bereiden. Zodra de voorbereiding is voltooid, moet u de gebeurtenis goedkeuren met behulp van de geplande gebeurtenis-API. Anders wordt de gebeurtenis automatisch goedgekeurd wanneer de NotBefore-tijd is bereikt. Als de VIRTUELE machine zich in een gedeelde infrastructuur bevindt, wacht het systeem tot alle andere tenants op dezelfde hardware ook de taak of time-out goedkeuren. Zodra goedkeuringen zijn verzameld van alle betrokken VM's of de NotBefore-tijd is bereikt, genereert Azure een nieuwe nettolading voor geplande gebeurtenissen met EventStatus:'Gestart' en wordt het begin van de onderhoudsgebeurtenis geactiveerd. Wanneer de gebeurtenis een terminalstatus heeft bereikt, wordt deze verwijderd uit de lijst met gebeurtenissen. Dat fungeert als het signaal voor de klant om hun VM's te herstellen.

    Hieronder ziet u psudeo-code waarmee een proces wordt gedemonstreerd voor het lezen en beheren van geplande gebeurtenissen in uw toepassing:

    current_list_of_scheduled_events = get_latest_from_se_endpoint()
    #prepare for new events
    for each event in current_list_of_scheduled_events:
      if event not in previous_list_of_scheduled_events:
        prepare_for_event(event)
    #recover from completed events
    for each event in previous_list_of_scheduled_events:
      if event not in current_list_of_scheduled_events:
        receover_from_event(event)
    #prepare for future jobs
    previous_list_of_scheduled_events = current_list_of_scheduled_events
    

    Aangezien geplande gebeurtenissen vaak worden gebruikt voor toepassingen met vereisten voor hoge beschikbaarheid, zijn er enkele uitzonderlijke gevallen die in overweging moeten worden genomen:

    1. Zodra een geplande gebeurtenis is voltooid en verwijderd uit de matrix, zijn er geen verdere gevolgen zonder een nieuwe gebeurtenis met inbegrip van een andere EventStatus:"Scheduled" gebeurtenis
    2. Azure bewaakt onderhoudsbewerkingen in de hele vloot en in zeldzame omstandigheden bepaalt dat een onderhoudsbewerking te hoog risico heeft om toe te passen. In dat geval wordt de geplande gebeurtenis rechtstreeks van Gepland naar verwijderd uit de matrix met gebeurtenissen
    3. In het geval van een hardwarefout wordt de status Gepland overgeslagen en wordt de status 'Gestart' onmiddellijk verplaatst naar de status EventStatus: 'Gestart'.
    4. Hoewel de gebeurtenis nog steeds de status EventStatus:"Gestart" heeft, kan er een andere impact zijn van een kortere duur dan wat is geadverteerd in de geplande gebeurtenis.

    Als onderdeel van de beschikbaarheidsgarantie van Azure worden VM's in verschillende foutdomeinen niet tegelijkertijd beïnvloed door routineonderhoudsbewerkingen. Ze kunnen echter bewerkingen na elkaar hebben geserialiseerd. VM's in het ene foutdomein kunnen geplande gebeurtenissen ontvangen met EventStatus:"Gepland" kort nadat het onderhoud van een ander foutdomein is voltooid. Ongeacht de architectuur die u hebt gekozen, moet u altijd controleren op nieuwe gebeurtenissen die in behandeling zijn voor uw VM's.

    Hoewel de exacte tijdsinstellingen van gebeurtenissen variëren, biedt het volgende diagram een ruwe richtlijn voor hoe een typische onderhoudsbewerking verloopt:

    • EventStatus:"Scheduled" to Approval Timeout: 15 minuten
    • Impactduur: 7 seconden
    • EventStatus:"Gestart" naar Voltooid (gebeurtenis verwijderd uit matrix gebeurtenissen): 10 minuten

    Diagram of a timeline showing the flow of a scheduled event.

    Headers

    Wanneer u metagegevensservice opvraagt, moet u de header Metadata:true opgeven om ervoor te zorgen dat de aanvraag niet onbedoeld is omgeleid. De Metadata:true header is vereist voor alle geplande gebeurtenissenaanvragen. Het niet opnemen van de header in de aanvraag resulteert in een 'Ongeldige aanvraag' reactie van de Metagegevensservice.

    Query uitvoeren op gebeurtenissen

    U kunt een query uitvoeren op geplande gebeurtenissen door de volgende aanroep uit te voeren:

    Bash-voorbeeld

    curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Voorbeeld van PowerShell

    Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01" | ConvertTo-Json -Depth 64
    

    Python-voorbeeld

    import json
    import requests
    
    metadata_url ="http://169.254.169.254/metadata/scheduledevents"
    header = {'Metadata' : 'true'}
    query_params = {'api-version':'2020-07-01'}
    
    def get_scheduled_events():           
        resp = requests.get(metadata_url, headers = header, params = query_params)
        data = resp.json()
        return data
    
    

    Een antwoord bevat een matrix met geplande gebeurtenissen. Een lege matrix betekent dat er momenteel geen gebeurtenissen worden gepland. In het geval dat er geplande gebeurtenissen zijn, bevat het antwoord een matrix met gebeurtenissen.

    {
        "DocumentIncarnation": {IncarnationID},
        "Events": [
            {
                "EventId": {eventID},
                "EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
                "ResourceType": "VirtualMachine",
                "Resources": [{resourceName}],
                "EventStatus": "Scheduled" | "Started",
                "NotBefore": {timeInUTC},       
                "Description": {eventDescription},
                "EventSource" : "Platform" | "User",
                "DurationInSeconds" : {timeInSeconds},
            }
        ]
    }
    

    Eigenschappen van gebeurtenis

    Eigenschappen Beschrijving
    Document incarnatie Geheel getal dat toeneemt wanneer de gebeurtenissenmatrix wordt gewijzigd. Documenten met dezelfde incarnatie bevatten dezelfde gebeurtenisgegevens en de incarnatie wordt verhoogd wanneer een gebeurtenis wordt gewijzigd.
    EventId Globally unique identifier for this event.

    Voorbeeld:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    EventType Impact op deze gebeurtenisoorzaken.

    Waarden:
    • Freeze: De virtuele machine is gepland om een paar seconden te onderbreken. CPU- en netwerkconnectiviteit kunnen worden onderbroken, maar er is geen invloed op het geheugen of geopende bestanden.
    • Reboot: De virtuele machine is gepland voor opnieuw opstarten (niet-permanent geheugen gaat verloren). In zeldzame gevallen kan een vm die is gepland voor EventType:'Reboot' een blokkerende gebeurtenis ervaren in plaats van opnieuw opstarten. Volg de bovenstaande instructies voor het weten of de gebeurtenis is voltooid en het is veilig om uw workload te herstellen.
    • Redeploy: De virtuele machine is gepland om naar een ander knooppunt te gaan (tijdelijke schijven gaan verloren).
    • Preempt: De virtuele spot-machine wordt verwijderd (tijdelijke schijven gaan verloren). Deze gebeurtenis wordt beschikbaar gesteld op basis van best effort
    • Terminate: De virtuele machine wordt gepland om te worden verwijderd.
    ResourceType Het type resource dat deze gebeurtenis beïnvloedt.

    Waarden:
    • VirtualMachine
    Resources Lijst met resources die deze gebeurtenis beïnvloedt.

    Voorbeeld:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Status van deze gebeurtenis.

    Waarden:
    • Scheduled: Deze gebeurtenis wordt gepland om te beginnen na de tijd die is opgegeven in de NotBefore eigenschap.
    • Started: Deze gebeurtenis is gestart.
    Er wordt ooit geen Completed of vergelijkbare status opgegeven. De gebeurtenis wordt niet meer geretourneerd wanneer de gebeurtenis is voltooid.
    NotBefore Tijd waarna deze gebeurtenis kan worden gestart. De gebeurtenis wordt gegarandeerd niet voor deze tijd gestart. Is leeg als de gebeurtenis al is gestart

    Voorbeeld:
    • Ma, 19 sep 2016 18:29:47 GMT
    Beschrijving Beschrijving van deze gebeurtenis.

    Voorbeeld:
    • De hostserver ondergaat onderhoud.
    EventSource Initiator van de gebeurtenis.

    Voorbeeld:
    • Platform: Deze gebeurtenis wordt gestart door het platform.
    • User: deze gebeurtenis wordt gestart door de gebruiker.
    DurationInSeconds De verwachte duur van de onderbreking die wordt veroorzaakt door de gebeurtenis.

    Voorbeeld:
    • 9: De onderbreking die wordt veroorzaakt door de gebeurtenis duurt 9 seconden.
    • 0: De gebeurtenis onderbreekt de VM niet of heeft invloed op de beschikbaarheid ervan (bijvoorbeeld bijwerken naar het netwerk)
    • -1: De standaardwaarde die wordt gebruikt als de impactduur onbekend is of niet van toepassing is.

    Gebeurtenisplanning

    Elke gebeurtenis wordt een minimale tijd in de toekomst gepland op basis van het gebeurtenistype. Deze keer wordt weergegeven in de eigenschap van NotBefore een gebeurtenis.

    EventType Minimale kennisgeving
    Vergrendeling 15 minuten
    Opnieuw opstarten 15 minuten
    Opnieuw implementeren 10 minuten
    Beëindigen Configureerbare gebruiker: 5 tot 15 minuten

    Dit betekent dat u een toekomstig schema van de gebeurtenis ten minste kunt detecteren op basis van de minimale kennisgevingstijd voordat de gebeurtenis plaatsvindt. Zodra een gebeurtenis is gepland, wordt deze verplaatst naar de Started status nadat deze is goedgekeurd of de NotBefore tijd is verstreken. In zeldzame gevallen wordt de bewerking echter geannuleerd door Azure voordat deze wordt gestart. In dat geval wordt de gebeurtenis verwijderd uit de matrix Gebeurtenissen en vindt de impact niet plaats zoals eerder gepland.

    Notitie

    In sommige gevallen kan Azure een hostfout voorspellen vanwege gedegradeerde hardware en probeert de onderbreking van uw service te beperken door een migratie te plannen. Betrokken virtuele machines ontvangen een geplande gebeurtenis met een gebeurtenis NotBefore die doorgaans een paar dagen in de toekomst is. De werkelijke tijd varieert, afhankelijk van de voorspelde risicobeoordeling van fouten. Azure probeert 7 dagen van tevoren op de hoogte te stellen, maar de werkelijke tijd varieert en kan kleiner zijn als de voorspelling is dat er een hoge kans is dat de hardware binnenkort mislukt. Om het risico voor uw service te minimaliseren voor het geval de hardware uitvalt vóór de door het systeem geïnitieerde migratie, raden we u aan uw virtuele machine zo snel mogelijk zelf opnieuw te implementeren.

    Notitie

    In het geval dat het hostknooppunt een hardwarefout ondervindt, wordt de minimale kennisgevingsperiode omzeild, waarbij het herstelproces voor betrokken virtuele machines onmiddellijk wordt gestart. Dit vermindert de hersteltijd in het geval dat de betrokken VM's niet kunnen reageren. Tijdens het herstelproces wordt een gebeurtenis gemaakt voor alle betrokken VM's met EventType = Reboot en EventStatus = Started.

    Pollingfrequentie

    U kunt het eindpunt zo vaak of zelden als u wilt peilen naar updates. Hoe langer de tijd tussen aanvragen, hoe langer de tijd die u mogelijk verliest om te reageren op een aanstaande gebeurtenis. De meeste gebeurtenissen hebben 5 tot 15 minuten van tevoren kennisgeving, hoewel in sommige gevallen voorafgaande kennisgeving mogelijk zo klein is als 30 seconden. Om ervoor te zorgen dat u zoveel mogelijk tijd hebt om beperkende acties uit te voeren, raden we u aan om de service één keer per seconde te peilen.

    Een gebeurtenis starten

    Nadat u een geplande gebeurtenis hebt geleerd en uw logica hebt voltooid voor een probleemloos afsluiten, kunt u de openstaande gebeurtenis goedkeuren door een POST aanroep naar de Metadata Service met EventIdte voeren. Deze aanroep geeft aan dat azure de minimale meldingstijd (indien mogelijk) kan verkorten. De gebeurtenis wordt mogelijk niet onmiddellijk gestart na goedkeuring. In sommige gevallen vereist Azure de goedkeuring van alle VM's die op het knooppunt worden gehost voordat u doorgaat met de gebeurtenis.

    Het volgende JSON-voorbeeld wordt verwacht in de POST aanvraagbody. De aanvraag moet een lijst met StartRequests. Elk StartRequest bevat EventId voor de gebeurtenis die u wilt versnellen:

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

    De service retourneert altijd een succescode van 200 als deze een geldige gebeurtenis-id heeft doorgegeven, zelfs als een andere VIRTUELE machine de gebeurtenis al heeft goedgekeurd. Een 400-foutcode geeft aan dat de aanvraagheader of nettolading onjuist is ingedeeld.

    Notitie

    Gebeurtenissen worden pas voortgezet als ze zijn goedgekeurd via een POST-bericht of de verstreken NotBefore-tijd. Dit omvat door de gebruiker geactiveerde gebeurtenissen, zoals het opnieuw opstarten van de VIRTUELE machine vanuit Azure Portal.

    Bash-voorbeeld

    curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Voorbeeld van PowerShell

    Invoke-RestMethod -Headers @{"Metadata" = "true"} -Method POST -body '{"StartRequests": [{"EventId": "5DD55B64-45AD-49D3-BBC9-F57D4EA97BD7"}]}' -Uri http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01 | ConvertTo-Json -Depth 64
    

    Python-voorbeeld

    import json
    import requests
    
    def confirm_scheduled_event(event_id):  
       # This payload confirms a single event with id event_id
       payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
       response = requests.post("http://169.254.169.254/metadata/scheduledevents", 
                                headers =  {'Metadata' : 'true'}, 
                                params = {'api-version':'2020-07-01'}, 
                                data = payload)    
       return response.status_code
    

    Notitie

    Als u een gebeurtenis bevestigt, kan de gebeurtenis doorgaan voor alles Resources in de gebeurtenis, niet alleen de VIRTUELE machine die de gebeurtenis bevestigt. Daarom kunt u ervoor kiezen om een leider te kiezen om de bevestiging te coördineren, wat net zo eenvoudig kan zijn als de eerste machine in het Resources veld.

    Voorbeeldantwoorden

    De volgende gebeurtenissen zijn een voorbeeld dat is gezien door twee virtuele machines die live zijn gemigreerd naar een ander knooppunt.

    De DocumentIncarnation wijziging verandert telkens wanneer er nieuwe informatie in Eventsstaat. Door een goedkeuring van de gebeurtenis kan de blokkering worden voortgezet voor zowel WestNO_0 als WestNO_1. De DurationInSeconds waarde -1 geeft aan dat het platform niet weet hoe lang de bewerking duurt.

    {
        "DocumentIncarnation":  1,
        "Events":  [
                   ]
    }
    
    {
        "DocumentIncarnation":  2,
        "Events":  [
                       {
                           "EventId":  "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
                           "EventStatus":  "Scheduled",
                           "EventType":  "Freeze",
                           "ResourceType":  "VirtualMachine",
                           "Resources":  [
                                             "WestNO_0",
                                             "WestNO_1"
                                         ],
                           "NotBefore":  "Mon, 11 Apr 2022 22:26:58 GMT",
                           "Description":  "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
                           "EventSource":  "Platform",
                           "DurationInSeconds":  5
                       }
                   ]
    }
    
    {
        "DocumentIncarnation":  3,
        "Events":  [
                       {
                           "EventId":  "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
                           "EventStatus":  "Started",
                           "EventType":  "Freeze",
                           "ResourceType":  "VirtualMachine",
                           "Resources":  [
                                             "WestNO_0",
                                             "WestNO_1"
                                         ],
                           "NotBefore":  "",
                           "Description":  "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
                           "EventSource":  "Platform",
                           "DurationInSeconds":  5
                       }
                   ]
    }
    
    {
        "DocumentIncarnation":  4,
        "Events":  [
                   ]
    }
    
    

    Python-voorbeeld

    In het volgende voorbeeld wordt metagegevensservice voor geplande gebeurtenissen opgevraagd en wordt elke openstaande gebeurtenis goedgekeurd:

    #!/usr/bin/python
    import json
    import requests
    from time import sleep
    
    # The URL to access the metadata service
    metadata_url ="http://169.254.169.254/metadata/scheduledevents"
    # This must be sent otherwise the request will be ignored
    header = {'Metadata' : 'true'}
    # Current version of the API
    query_params = {'api-version':'2020-07-01'}
    
    def get_scheduled_events():           
        resp = requests.get(metadata_url, headers = header, params = query_params)
        data = resp.json()
        return data
    
    def confirm_scheduled_event(event_id):  
        # This payload confirms a single event with id event_id
        # You can confirm multiple events in a single request if needed      
        payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
        response = requests.post(metadata_url, 
                                headers= header,
                                params = query_params, 
                                data = payload)    
        return response.status_code
    
    def log(event): 
        # This is an optional placeholder for logging events to your system 
        print(event["Description"])
        return
    
    def advanced_sample(last_document_incarnation): 
        # Poll every second to see if there are new scheduled events to process
        # Since some events may have necessarily short warning periods, it is 
        # recommended to poll frequently
        found_document_incarnation = last_document_incarnation
        while (last_document_incarnation == found_document_incarnation):
            sleep(1)
            payload = get_scheduled_events()    
            found_document_incarnation = payload["DocumentIncarnation"]        
            
        # We recommend processing all events in a document together, 
        # even if you won't be actioning on them right away
        for event in payload["Events"]:
    
            # Events that have already started, logged for tracking
            if (event["EventStatus"] == "Started"):
                log(event)
                
            # Approve all user initiated events. These are typically created by an 
            # administrator and approving them immediately can help to avoid delays 
            # in admin actions
            elif (event["EventSource"] == "User"):
                confirm_scheduled_event(event["EventId"])            
                
            # For this application, freeze events less that 9 seconds are considered
            # no impact. This will immediately approve them
            elif (event["EventType"] == "Freeze" and 
                int(event["DurationInSeconds"]) >= 0  and 
                int(event["DurationInSeconds"]) < 9):
                confirm_scheduled_event(event["EventId"])
                
            # Events that may be impactful (for example, reboot or redeploy) may need custom 
            # handling for your application
            else: 
                #TODO Custom handling for impactful events
                log(event)
        print("Processed events from document: " + str(found_document_incarnation))
        return found_document_incarnation
    
    def main():
        # This will track the last set of events seen 
        last_document_incarnation = "-1"
    
        input_text = "\
            Press 1 to poll for new events \n\
            Press 2 to exit \n "
        program_exit = False 
    
        while program_exit == False:
            user_input = input(input_text)    
            if (user_input == "1"):                        
                last_document_incarnation = advanced_sample(last_document_incarnation)
            elif (user_input == "2"):
                program_exit = True       
    
    if __name__ == '__main__':
        main()
    

    Volgende stappen