Udostępnij przez


Azure Metadata Service: zaplanowane zdarzenia dla maszyn wirtualnych z systemem Windows

Dotyczy: ✔️ Maszyny wirtualne z systemem Windows ✔️ Elastyczne zestawy skalowania ✔️ Jednolite zestawy skalowania

Usługa Scheduled Events to usługa podrzędna usługi Azure Metadata Service, która zapewnia aplikacji czas na przygotowanie się do konserwacji maszyny wirtualnej. Udostępnia informacje o nadchodzących zdarzeniach konserwacji (na przykład ponownym rozruchu), dzięki czemu aplikacja może przygotować się do nich i ograniczyć przerwy w działaniu. Jest dostępna dla wszystkich typów usługi Azure Virtual Machines, w tym PaaS i IaaS, zarówno w systemie Windows, jak i Linux.

Aby uzyskać informacje o zaplanowanych zdarzeniach w systemie Linux, zobacz Zaplanowane zdarzenia dla maszyn wirtualnych z systemem Linux.

Zaplanowane zdarzenia zapewniają proaktywne powiadomienia dotyczące nadchodzących zdarzeń, aby uzyskać reaktywne informacje o zdarzeniach, które wystąpiły w przeszłości, zobacz Informacje o dostępności maszyny wirtualnej w usłudze Azure Resource Graph i Tworzenie reguły alertu dotyczącego dostępności dla maszyny wirtualnej platformy Azure.

Uwaga / Notatka

Zaplanowane zdarzenia są ogólnie dostępne we wszystkich regionach świadczenia usługi Azure. Zobacz Dostępność wersji i regionu , aby uzyskać najnowsze informacje o wersji.

Dlaczego warto używać zaplanowanych zdarzeń?

Wiele aplikacji może skorzystać z czasu na przygotowanie się do konserwacji maszyny wirtualnej. Czas może służyć do wykonywania zadań specyficznych dla aplikacji, które zwiększają dostępność, niezawodność i możliwości obsługi, w tym:

  • Punkt kontrolny i przywracanie.
  • Opróżnianie połączenia.
  • Przełączenie awaryjne repliki podstawowej.
  • Usuwanie z puli modułu równoważenia obciążenia.
  • Rejestrowanie zdarzeń.
  • Łagodne zamknięcie.

Dzięki zaplanowanym zdarzeniom twoja aplikacja może rozpoznać, kiedy nastąpi konserwacja, i wyzwolić zadania w celu ograniczenia ich wpływu.

Zdarzenia zaplanowane udostępniają zdarzenia w następujących przypadkach użycia:

Podstawy

Usługa Metadata Service udostępnia informacje o uruchamianiu maszyn wirtualnych przy użyciu punktu końcowego REST dostępnego z poziomu maszyny wirtualnej. Te informacje są dostępne za pośrednictwem nieroutowalnego adresu IP i nie są widoczne poza maszyną wirtualnej.

Zakres

Zaplanowane zdarzenia są dostarczane i mogą być potwierdzane przez:

Zaplanowane zdarzenia dla wszystkich maszyn wirtualnych w całym zestawie dostępności lub grupie umieszczania w zestawie skalowania maszyn wirtualnych są przekazywane do wszystkich pozostałych maszyn wirtualnych w tej samej grupie lub zestawie, niezależnie od tego, czy strefa dostępności jest używana.

W związku z tym sprawdź Resources pole w zdarzeniu, w celu określenia, które maszyny wirtualne są dotknięte.

Uwaga / Notatka

Maszyny wirtualne przyspieszone przez procesor GPU w zestawie skalowania przy użyciu jednej domeny błędów (FD = 1) odbierają tylko zaplanowane zdarzenia dla zasobu, którego dotyczy problem. Zdarzenia nie będą przesyłane do wszystkich maszyn wirtualnych w jednej grupie lokalizacyjnej.

Odnajdywanie punktów końcowych

W przypadku maszyn wirtualnych z włączoną siecią wirtualną, usługa metadanych jest dostępna na podstawie statycznego nieroutowalnego adresu IP, 169.254.169.254. Pełny punkt końcowy dla najnowszej wersji zaplanowanych zdarzeń to:

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

Jeśli maszyna wirtualna nie została utworzona w ramach sieci wirtualnej, domyślne przypadki usług w chmurze i klasycznych maszyn wirtualnych wymagają innej logiki, aby odnaleźć adres IP do użycia. Aby dowiedzieć się, jak odnaleźć punkt końcowy hosta, zobacz ten przykład.

Dostępność wersji i regionu

Usługa Zaplanowane zdarzenia jest wersjonowana. Wersje są obowiązkowe; bieżąca wersja to 2020-07-01.

wersja Typ wydania Regionów Notatki o wydaniu
2020-07-01 Ogólna dostępność Wszystko
  • Dodano obsługę czasu trwania zdarzenia
  • 2019-08-01 Ogólna dostępność Wszystko
  • Dodano obsługę EventSource
  • 2019-04-01 Ogólna dostępność Wszystko
  • Dodano obsługę opisu zdarzenia
  • 2019-01-01 Ogólna dostępność Wszystko
  • Dodano obsługę typu zdarzenia "Zakończ" dla zestawów skalowania maszyn wirtualnych.
  • 2017-11-01 Ogólna dostępność Wszystko
  • Dodano obsługę eksmisji maszyn wirtualnych Spot dla zdarzenia typu "Preempt"
  • 2017-08-01 Ogólna dostępność Wszystko
  • Usunięto wstępne podkreślenie z nazw zasobów dla maszyn wirtualnych IaaS
  • Wymaganie nagłówka metadanych wymuszone dla wszystkich żądań
  • 2017-03-01 Prapremiera Wszystko
  • Wydanie początkowe
  • Uwaga / Notatka

    Poprzednie wersje zapoznawcze Zdarzeń Zaplanowanych obsługiwały {latest} dla wersji API. Ten format nie jest już obsługiwany i będzie przestarzały w przyszłości.

    Włączanie i wyłączanie zaplanowanych zdarzeń

    Funkcja planowania zdarzeń jest włączana dla twojej usługi przy pierwszym zapytaniu o zdarzenia. Należy oczekiwać opóźnienia odpowiedzi podczas pierwszego wywołania do dwóch minut i rozpoczniesz odbieranie zdarzeń w ciągu 5 minut. Zaplanowane zdarzenia są wyłączone dla usługi, jeśli nie wysyła żądania do punktu końcowego przez 24 godziny.

    Konserwacja inicjowana przez użytkownika

    Konserwacja maszyny wirtualnej zainicjowana przez użytkownika za pośrednictwem witryny Azure Portal, interfejsu API, interfejsu wiersza polecenia lub programu PowerShell powoduje wystąpienie zaplanowanego zdarzenia. Następnie można przetestować logikę przygotowywania konserwacji w aplikacji, a aplikacja może przygotować się do konserwacji zainicjowanej przez użytkownika.

    Jeśli uruchomisz ponownie maszynę wirtualną, zaplanowane jest zdarzenie o typie Reboot . Jeśli ponownie wdrożysz maszynę wirtualną, zaplanowane jest zdarzenie o typie Redeploy . Zazwyczaj zdarzenia ze źródłem zdarzeń użytkownika można natychmiast zatwierdzić, aby uniknąć opóźnień w akcjach inicjowanych przez użytkownika. Zalecamy komunikację podstawowej i pomocniczej maszyny wirtualnej oraz zatwierdzanie zaplanowanych zdarzeń generowanych przez użytkownika w przypadku, gdy podstawowa maszyna wirtualna przestanie odpowiadać. Natychmiastowe zatwierdzanie zdarzeń zapobiega opóźnieniom przywracania aplikacji do właściwego stanu.

    Zaplanowane zdarzenia dla uaktualnień lub tworzenia obrazów systemu operacyjnego gościa skalowanych zestawów maszyn wirtualnych są obsługiwane tylko dla rozmiarów maszyn wirtualnych ogólnego przeznaczenia, które obsługują jedynie aktualizacje z zachowaniem danych w pamięci. Nie działa w przypadku serii G, M, N i H. Zaplanowane zdarzenia dotyczące uaktualnień systemu operacyjnego gościa oraz przywracania obrazów w zestawach skalowania maszyn wirtualnych są domyślnie wyłączone. Aby włączyć zaplanowane zdarzenia dla tych operacji na obsługiwanych rozmiarach maszyn wirtualnych, najpierw włącz je, używając OSImageNotificationProfile.

    Użyj interfejsu API

    Przegląd ogólny

    Istnieją dwa główne elementy w obsłudze zaplanowanych zdarzeń: przygotowanie i odzyskiwanie. Wszystkie bieżące zaplanowane zdarzenia wpływające na maszynę wirtualną są dostępne do odczytu za pośrednictwem punktu końcowego zaplanowanych zdarzeń usługi IMDS. Gdy zdarzenie osiągnie stan końcowy, zostanie usunięte z listy zdarzeń. Na poniższym diagramie przedstawiono różne zmiany stanu, które może przechodzić pojedyncze zaplanowane zdarzenie.

    Diagram stanu przedstawiający różne przejścia, które może zająć zaplanowane zdarzenie.

    W przypadku zdarzeń w stanie EventStatus:"Scheduled" należy wykonać kroki, aby przygotować swoje obciążenie. Po zakończeniu przygotowania należy zatwierdzić zdarzenie przy użyciu interfejsu API zaplanowanego zdarzenia. W przeciwnym razie zdarzenie zostanie automatycznie zatwierdzone, gdy zostanie osiągnięty czas NotBefore. Jeśli maszyna wirtualna znajduje się w udostępnionej infrastrukturze, system będzie czekać na wszystkich innych dzierżawców na tym samym sprzęcie, aby również zatwierdzić zadanie lub przekroczenie limitu czasu. Po zebraniu zatwierdzeń ze wszystkich maszyn wirtualnych, których to dotyczy, lub gdy osiągnięto czas NotBefore, platforma Azure generuje nowy zaplanowany ładunek zdarzenia ze statusem eventu: "Started" i rozpoczyna zdarzenie konserwacji. Gdy zdarzenie osiągnie stan końcowy, zostanie usunięte z listy zdarzeń. Służy to jako sygnał dla klienta w celu odzyskania maszyn wirtualnych.

    Kod psudeo demonstruje proces odczytywania zaplanowanych zdarzeń w aplikacji i zarządzania nimi:

    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
    

    Ponieważ zaplanowane zdarzenia są często używane dla aplikacji z wymaganiami dotyczącymi wysokiej dostępności, istnieje kilka wyjątkowych przypadków, które należy wziąć pod uwagę:

    1. Po zakończeniu zaplanowanego zdarzenia i jego usunięciu z tablicy, nie będzie żadnych dalszych skutków, chyba że pojawi się nowe zdarzenie, które będzie miało status "Scheduled".
    2. Platforma Azure monitoruje operacje konserwacyjne całej infrastruktury i w rzadkich okolicznościach stwierdza, że operacja konserwacyjna jest zbyt ryzykowna, aby ją przeprowadzić. W takim przypadku zaplanowane zdarzenie przechodzi bezpośrednio z "Zaplanowane" do usunięcia z tablicy zdarzeń
    3. Jeśli wystąpi awaria sprzętowa, platforma Azure pomija stan "Zaplanowane" i natychmiast przechodzi do stanu EventStatus:"Started".
    4. Mimo że zdarzenie jest nadal w stanie EventStatus:"Started", może wystąpić inny wpływ o krótszym czasie trwania niż było to zapowiedziane w zaplanowanym zdarzeniu.

    W ramach gwarancji dostępności platformy Azure maszyny wirtualne w różnych domenach błędów nie będą mieć wpływu na rutynowe operacje konserwacji w tym samym czasie. Jednak mogą one mieć operacje serializowane jedna po drugiej. Maszyny wirtualne w jednej domenie błędów mogą odbierać zaplanowane zdarzenia o statusie "Scheduled" wkrótce po zakończeniu konserwacji w innej domenie błędów. Niezależnie od wybranej architektury zawsze sprawdzaj, czy nowe zdarzenia oczekują na Twoje maszyny wirtualne.

    Mimo że dokładne chronometraż zdarzeń różnią się, na poniższym diagramie przedstawiono przybliżone wskazówki dotyczące tego, jak przebiega typowa operacja konserwacji:

    • StatusWydarzenia:"Zaplanowany" do momentu upływu limitu czasu na zatwierdzenie: 15 minut
    • Czas trwania wpływu: 7 sekund
    • Status zdarzenia: "Rozpoczęto" do Ukończono (zdarzenie usunięte z tablicy Zdarzeń): 10 minut

    Diagram osi czasu przedstawiający przepływ zaplanowanego zdarzenia.

    Wszystkie operacje wpływające na dostępność maszyny wirtualnej tworzą zaplanowane zdarzenie, jednak nie wszystkie zaplanowane zdarzenia są wyświetlane na innych powierzchniach platformy Azure, takich jak dzienniki aktywności platformy Azure lub kondycja zasobów. Regularne sprawdzanie harmonogramu wydarzeń gwarantuje, że masz najbardziej up-to-aktualne informacje o przyszłych wpływach na Twoje maszyny wirtualne.

    Nagłówki

    Podczas wykonywania zapytania w usłudze Metadata Service należy podać nagłówek Metadata:true , aby upewnić się, że żądanie nie zostało przypadkowo przekierowane. Nagłówek Metadata:true jest wymagany dla wszystkich żądań zaplanowanych zdarzeń. Niepowodzenie uwzględnienia nagłówka w żądaniu spowoduje odpowiedź "Nieprawidłowe żądanie" z usługi Metadata Service.

    Wykonywanie zapytań dotyczących zdarzeń

    Możesz wykonywać zapytania dotyczące zaplanowanych zdarzeń, wykonując następujące wywołanie:

    Przykład Bash

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

    Przykładowy skrypt programu 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
    

    Przykład języka Python

    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
    
    

    Odpowiedź zawiera tablicę zaplanowanych zdarzeń. Pusta tablica oznacza, że obecnie nie zaplanowano żadnych zdarzeń. W przypadku wystąpienia zaplanowanych zdarzeń odpowiedź zawiera tablicę zdarzeń.

    {
        "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},
            }
        ]
    }
    

    Właściwości zdarzenia

    Majątek Opis
    Wcielenie dokumentu Liczba całkowita, która zwiększa się, gdy tablica zdarzeń zmienia się. Dokumenty z tym samym wcieleniem zawierają te same informacje o zdarzeniu, a wcielenie jest zwiększane po zmianie zdarzenia.
    Id zdarzenia Unikatowy identyfikator globalny dla tego zdarzenia.

    Przykład:
    • 602d944-d2cd-49c7-8624-8643e7171297
    Typ Wydarzenia Oczekiwany wpływ, jaki to wydarzenie spowoduje.

    Wartości:
    • Freeze: Maszyna wirtualna ma zostać wstrzymana przez kilka sekund. Procesor CPU i łączność sieciowa mogą zostać zawieszone, ale nie ma to wpływu na pamięć ani otwarte pliki.
    • Reboot: Maszyna wirtualna jest zaplanowana na ponowny rozruch (pamięć nietrwała zostanie utracona). W rzadkich przypadkach maszyna wirtualna zaplanowana dla zdarzenia EventType:"Reboot" może doświadczyć zawieszenia zamiast ponownego uruchomienia. Postępuj zgodnie z powyższymi instrukcjami, aby dowiedzieć się, czy zdarzenie zostało ukończone i można bezpiecznie przywrócić zasób roboczy.
    • Redeploy: Maszyna wirtualna ma zostać przeniesiona do innego węzła (efemeryczne dyski zostaną utracone).
    • Preempt: Maszyna wirtualna typu spot jest usuwana (efemeryczne dyski zostaną utracone). To wydarzenie jest udostępniane w miarę możliwości.
    • Terminate: Maszyna wirtualna ma zostać usunięta.
    Typ Zasobu Typ zasobu, na który wpływa to zdarzenie.

    Wartości:
    • VirtualMachine
    Zasoby Lista zasobów, na które wpływa to zdarzenie.

    Przykład:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    Status Wydarzenia Stan tego zdarzenia.

    Wartości:
    • Scheduled: To zdarzenie ma zostać uruchomione po czasie określonym we właściwości NotBefore.
    • Started: To wydarzenie się rozpoczęło.
    Nigdy nie podano żadnego stanu Completed ani podobnego. Zdarzenie nie jest zwracane, gdy już się zakończy.
    Nie wcześniej niż Godzina rozpoczęcia tego zdarzenia. Zdarzenie na pewno nie rozpocznie się przed tą godziną. Wartość będzie pusta, jeśli zdarzenie zacznie się po rozpoczęciu wydarzenia.

    Przykład:
    • Pon, 19 wrz 2016 18:29:47 GMT
    Opis Opis tego zdarzenia.

    Przykład:
    • Trwa konserwacja serwera hosta.
    • Infrastruktura serwera hosta jest w trakcie konserwacji.
    • Maszyna wirtualna jest wstrzymana z powodu operacji migracji na żywo zachowującej pamięć.
    • Maszyna wirtualna zostanie ponownie uruchomiona zgodnie z żądaniem autoryzowanego użytkownika.
    • Serwer hosta jest w trakcie naprawy awaryjnej.
    Źródło Zdarzeń Inicjator zdarzenia.

    Przykład:
    • Platform: Platforma zainicjowała to zdarzenie.
    • User: Użytkownik zainicjował to zdarzenie.
    CzasWTrybieSekundowym Oczekiwany czas trwania przerwy spowodowanej przez zdarzenie. Mogą wystąpić wtórne wpływy o krótszym okresie w oknie oddziaływania.

    Przykład:
    • 9: Przerwa spowodowana przez zdarzenie trwa 9 sekund.
    • 0: Zdarzenie nie przerwie maszyny wirtualnej ani nie wpłynie na jej dostępność (na przykład aktualizacja do sieci)
    • -1: wartość domyślna używana, jeśli czas trwania wpływu jest nieznany lub nie dotyczy.

    Planowanie zdarzeń

    Każde zdarzenie jest zaplanowane przez minimalny czas w przyszłości na podstawie typu zdarzenia. Tym razem jest odzwierciedlony we właściwości zdarzenia NotBefore.

    Typ Wydarzenia Powiadomienie minimalne
    Zamarzać 15 minut
    Ponowny rozruch 15 minut
    Ponownie wdroż 10 minut
    Wywłaszcza 30 sekund
    Zakończyć Konfigurowalny przez użytkownika: od 5 do 15 minut

    Oznacza to, że można wykryć przyszły harmonogram zdarzenia co najmniej o minimalny czas powiadomienia przed wystąpieniem zdarzenia. Po zaplanowaniu zdarzenia zostanie ono przeniesione do Started stanu po jego zatwierdzeniu lub upływie NotBefore czasu. Jednak w rzadkich przypadkach operacja jest anulowana przez platformę Azure przed rozpoczęciem. W takim przypadku zdarzenie zostanie usunięte z tablicy Zdarzenia, a wpływ nie wystąpi zgodnie z wcześniejszym harmonogramem.

    Uwaga / Notatka

    W niektórych przypadkach platforma Azure może przewidzieć awarię hosta z powodu obniżonej wydajności sprzętu i próbuje ograniczyć zakłócenia w usłudze przez zaplanowanie migracji. Maszyny wirtualne, których dotyczy problem, otrzymają zaplanowane zdarzenie z NotBefore, które zazwyczaj zaplanowane jest na kilka dni do przodu. Rzeczywisty czas różni się w zależności od przewidywanej oceny ryzyka awarii. Gdy jest to możliwe, platforma Azure próbuje powiadomić o 7 dniach z wyprzedzeniem. Rzeczywisty czas powiadomienia różni się i może być krótszy, jeśli wystąpi duże prawdopodobieństwo nieuchronnego awarii sprzętu. Aby zminimalizować ryzyko związane z usługą w przypadku awarii sprzętu przed migracją zainicjowaną przez system, zalecamy jak najszybsze ponowne wdrożenie maszyny wirtualnej.

    Uwaga / Notatka

    W przypadku awarii węzła hosta platforma Azure pomija minimalny okres powiadomienia i natychmiast rozpoczyna proces odzyskiwania dla maszyn wirtualnych, których dotyczy problem. Skraca to czas odzyskiwania w przypadku, gdy maszyny wirtualne, których dotyczy problem, nie mogą odpowiedzieć. Podczas procesu odzyskiwania tworzone jest zdarzenie dla wszystkich dotkniętych maszyn wirtualnych z EventType = Reboot i EventStatus = Started.

    Częstotliwość sondowania

    Możesz sprawdzać punkt końcowy pod kątem aktualizacji tak często lub rzadko, jak sobie życzysz. Jednak im dłuższy czas mija między żądaniami, tym więcej czasu potencjalnie tracisz na reakcję na nadchodzące zdarzenie. Większość zdarzeń ma od 5 do 15 minut powiadomienia, chociaż w niektórych przypadkach powiadomienie może wynosić zaledwie 30 sekund. Aby upewnić się, że masz jak najwięcej czasu na podjęcie działań zapobiegawczych, zalecamy sondowanie usługi co sekundę.

    Uruchamianie zdarzenia

    Po zapoznaniu się z nadchodzącym wydarzeniem i zakończeniu logiki bezpiecznego zamykania możesz zatwierdzić zaległe zdarzenie, wywołując usługę POST Metadata Service za pomocą polecenia EventId. To wywołanie wskazuje na platformę Azure, że może skrócić minimalny czas powiadomienia (jeśli to możliwe). Zdarzenie może nie zostać uruchomione natychmiast po zatwierdzeniu. W niektórych przypadkach platforma Azure wymaga zatwierdzenia wszystkich maszyn wirtualnych hostowanych w węźle przed kontynuowaniem zdarzenia.

    W treści żądania oczekuje się następującego przykładu JSON POST. Żądanie powinno zawierać listę StartRequests. Każda StartRequest zawiera EventId związane z wydarzeniem, które chcesz przyspieszyć.

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

    Usługa zawsze zwraca kod powodzenia 200, jeśli został przekazany prawidłowy identyfikator zdarzenia, nawet jeśli inna maszyna wirtualna już zatwierdziła zdarzenie. Kod błędu 400 wskazuje, że nagłówek lub ładunek żądania został źle sformułowany.

    Uwaga / Notatka

    Zdarzenia nie będą kontynuowane, chyba że zostaną zatwierdzone za pośrednictwem komunikatu POST lub nie upłynął czas NotBefore. Obejmuje to zdarzenia wyzwalane przez użytkownika, takie jak ponowne uruchomienia maszyny wirtualnej w witrynie Azure Portal.

    Przykład Bash

    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
    

    Przykładowy skrypt programu 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
    

    Przykład języka Python

    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
    

    Uwaga / Notatka

    Potwierdzenie zdarzenia umożliwia kontynuowanie zdarzenia dla wszystkich Resources wchodzących w skład zdarzenia, a nie tylko dla maszyny wirtualnej, która potwierdziła zdarzenie. W związku z tym możesz wybrać lidera, aby koordynować potwierdzenie, co może być tak proste, jak pierwsza maszyna w Resources polu.

    Przykładowe odpowiedzi

    Następujące zdarzenia to przykład z dwóch maszyn wirtualnych, które zostały zmigrowane na żywo do innego węzła.

    DocumentIncarnation zmienia się za każdym razem, gdy w Events pojawia się nowa informacja. Zatwierdzenie zdarzenia pozwoliłoby na kontynuowanie blokowania zarówno dla WestNO_0, jak i WestNO_1.

    {
        "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":  [
                   ]
    }
    
    

    Przykład języka Python

    Przykład korzysta z usługi Metadata Service do wyszukiwania zaplanowanych zdarzeń i zatwierdza każde niezatwierdzone zdarzenie. Kod można znaleźć w repozytorium vm-scheduled-events-mock-server w pliku Listener.py.

    #!/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 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()
    

    Testowanie zaplanowanych zdarzeń

    Dwa typowe sposoby testowania odpowiedzi aplikacji na zaplanowane zdarzenia to ręczne wyzwalanie zdarzeń naśladowanych przez użytkownika lub używanie pozorowanego serwera.

    Możesz ręcznie wyzwalać zdarzenia ponownego wdrażania i ponownego uruchamiania poprzez witrynę Azure Portal lub Interfejs wiersza polecenia Azure, wybierając opcję "reboot" lub "redeploy" maszyny wirtualnej na panelu maszyny wirtualnej. Spowoduje to utworzenie wydarzenia i wysłanie go do twojego zadania.

    Operacje, które mają wpływ na wiele maszyn wirtualnych, takich jak aktualizacje hosta, nie mogą być wyzwalane na żądanie, aby zamiast tego można było użyć pozorowanego serwera. Serwer vm-scheduled-events-mock-server udostępnia platformę do testowania odpowiedzi aplikacji na różne scenariusze przez ponowne odtworzenie rzeczywistych przepływów zdarzeń na potrzeby programowania i testowania. Domyślnie serwer obsługuje 9 różnych scenariuszy, wszystkie przechwycone z maszyn wirtualnych działających na platformie Azure i reprezentujące najbardziej typowe przypadki. Scenariusze można rozszerzyć w celu uwzględnienia większej liczby opcji w zależności od określonych cech aplikacji.

    Dalsze kroki