Azure Metadata Service: Linux VM'ler için Zamanlanan Olaylar

Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ölçek kümeleri ✔️ Tekdüzen ölçek kümeleri

Zamanlanan Olaylar, uygulamanıza sanal makine (VM) bakımına hazırlanma süresi veren bir Azure Meta Veri Hizmetidir. Uygulamanızın bunlara hazırlanabilmesi ve kesintileri sınırlandırabilmesi için yaklaşan bakım olayları (örneğin, yeniden başlatma) hakkında bilgi sağlar. Hem Windows hem de Linux'ta PaaS ve IaaS dahil olmak üzere tüm Azure Sanal Makine türleri için kullanılabilir.

Windows'ta Zamanlanmış Olaylar hakkında bilgi için bkz . Windows VM'leri için Zamanlanmış Olaylar.

Zamanlanmış olaylar yaklaşan olaylar hakkında proaktif bildirimler sağlar. Önceden gerçekleşen olaylar hakkında reaktif bilgiler için bkz. Azure Kaynak Grafı'da VM kullanılabilirliği bilgileri ve Azure sanal makinesi için kullanılabilirlik uyarı kuralı oluşturma.

Dekont

Zamanlanmış Olaylar genel olarak tüm Azure Bölgelerinde kullanılabilir. En son sürüm bilgileri için bkz . Sürüm ve Bölge Kullanılabilirliği .

Zamanlanmış Olaylar neden kullanılır?

Birçok uygulama, VM bakımına hazırlanmak için zamandan yararlanabilir. Zaman, kullanılabilirliği, güvenilirliği ve servis verilebilirliği artıran uygulamaya özel görevleri gerçekleştirmek için kullanılabilir, örneğin:

  • Denetim noktası ve geri yükleme.
  • Bağlantı boşaltma.
  • Birincil çoğaltma yük devretmesi.
  • Bir yük dengeleyici havuzundan kaldırma.
  • Olay günlüğüne kaydetme.
  • Düzgün kapatma.

Zamanlanan Olaylar ile uygulamanız bakımın ne zaman gerçekleşeceğini keşfedebilir ve etkisini sınırlamak için görevleri tetikleyebilir.

Zamanlanan Olaylar aşağıdaki kullanım örneklerinde olaylar sağlar:

  • Platform tarafından başlatılan bakım (örneğin, VM yeniden başlatma, dinamik geçiş veya konak için bellek koruma güncelleştirmeleri).
  • Sanal makine, yakında başarısız olduğu tahmin edilen düzeyi düşürülmüş konak donanımında çalışıyor.
  • Sanal makine, donanım hatası yaşayan bir konakta çalışıyordu.
  • Kullanıcı tarafından başlatılan bakım (örneğin, bir kullanıcı vm'yi yeniden başlatır veya yeniden dağıtılır).
  • Spot VM ve Spot ölçek kümesi örneği çıkarmaları.

Temeller

Meta Veri Hizmeti, VM'lerin içinden erişilebilen bir REST uç noktası kullanarak VM'leri çalıştırma hakkındaki bilgileri kullanıma sunar. Bilgiler yönlendirilemez bir IP üzerinden sağlanır ve VM dışında gösterilmez.

Kapsam

Zamanlanan olaylar'a teslim edilir ve aşağıdakiler tarafından onaylanabilir:

  • Tek başına Sanal Makineler.
  • Azure bulut hizmetindeki (klasik) tüm VM'ler.
  • Kullanılabilirlik kümesindeki tüm VM'ler.
  • Ölçek kümesi yerleştirme grubundaki tüm VM'ler.

Dekont

Tüm Kullanılabilirlik Kümesindeki tüm sanal makineler (VM'ler) veya Sanal Makine Ölçek Kümesi için Yerleştirme Grubu için Zamanlanmış Olaylar, Kullanılabilirlik Alanı kullanımına bakılmaksızın aynı gruptaki veya ayarlanan diğer tüm VM'lere teslim edilir.

Sonuç olarak, hangi VM'lerin etkilendiğini belirlemek için olaydaki alanı denetleyin Resources .

Uç nokta bulma

Sanal ağ özellikli VM'ler için Meta Veri Hizmeti, statik, yönlendirilemez bir IP'den 169.254.169.254kullanılabilir. Zamanlanmış Olayların en son sürümü için tam uç nokta:

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

VM, bulut hizmetleri ve klasik VM'ler için varsayılan durumlar olan bir Sanal Ağ içinde oluşturulmadıysa, kullanılacak IP adresini bulmak için ek mantık gerekir. Konak uç noktasını bulmayı öğrenmek için bu örneğe bakın.

Sürüm ve bölge kullanılabilirliği

Zamanlanmış Olaylar hizmeti sürümü oluşturulur. Sürümler zorunlu; geçerli sürüm şeklindedir 2020-07-01.

Sürüm Yayın Türü Bölgeler Release Notes (Sürüm Notları)
2020-07-01 Genel Kullanılabilirlik Tümünü
  • Olay Süresi desteği eklendi
  • 2019-08-01 Genel Kullanılabilirlik Tümünü
  • EventSource desteği eklendi
  • 01.04.2019 Genel Kullanılabilirlik Tümünü
  • Olay Açıklaması desteği eklendi
  • 2019-01-01 Genel Kullanılabilirlik Tümünü
  • Sanal Makine Ölçek Kümeleri EventType 'Terminate' desteği eklendi
  • 2017-11-01 Genel Kullanılabilirlik Tümünü
  • Spot VM çıkarma EventType 'Preempt' desteği eklendi
  • 2017-08-01 Genel Kullanılabilirlik Tümünü
  • IaaS VM'leri için kaynak adlarından önceden ekli alt çizgi kaldırıldı
  • Tüm istekler için meta veri üst bilgisi gereksinimi zorunlu kılındı
  • 2017-03-01 Önizle Tümünü
  • İlk yayın
  • Dekont

    Api sürümü olarak {latest} tarafından desteklenen Zamanlanmış Olaylar'ın önceki önizleme sürümleri. Bu biçim artık desteklenmiyor ve gelecekte kullanımdan kaldırılacak.

    Zamanlanmış Olayları etkinleştirme ve devre dışı bırakma

    Zamanlanmış Olaylar, olaylar için ilk istekte bulunurken hizmetiniz için etkinleştirilir. İki dakikaya kadar ilk çağrınızda gecikmeli yanıt beklemeniz gerekir. Zamanlanmış Olaylar, uç noktaya 24 saat boyunca istekte bulunmazsa hizmetiniz için devre dışı bırakılır.

    Kullanıcı tarafından başlatılan bakım

    Azure portalı, API, CLI veya PowerShell aracılığıyla kullanıcı tarafından başlatılan VM bakımı zamanlanmış bir olaya neden olur. Daha sonra uygulamanızda bakım hazırlama mantığını test edebilirsiniz ve uygulamanız kullanıcı tarafından başlatılan bakım için hazırlanabilir.

    Bir VM'yi yeniden başlatırsanız, türüne Reboot sahip bir olay zamanlanır. Bir VM'yi yeniden dağıtırsanız, türüne Redeploy sahip bir olay zamanlanır. Genellikle kullanıcı olay kaynağı olan olaylar, kullanıcı tarafından başlatılan eylemlerde gecikme yaşanmasını önlemek için hemen onaylanabilir. Birincil VM'nin yanıt vermemeye başlaması durumunda kullanıcı tarafından oluşturulan zamanlanmış olayları iletişim kurarak onaylayan birincil ve ikincil bir VM'nin olmasını öneririz. Olayların hemen onaylanması, uygulamanızın iyi bir duruma geri döndürülmesindeki gecikmeleri önler.

    VMSS Konuk İşletim Sistemi yükseltmeleri veya yeniden tahminleri için zamanlanmış olaylar, yalnızca bellek koruma güncelleştirmelerini destekleyen genel amaçlı VM boyutları için desteklenir. G, M, N ve H serileri için çalışmaz. VMSS Konuk İşletim Sistemi yükseltmeleri ve yeniden tahminleri için zamanlanmış olaylar varsayılan olarak devre dışı bırakılır. Desteklenen VM boyutlarında bu işlemler için zamanlanmış olayları etkinleştirmek için önce OSImageNotificationProfile kullanarak bunları etkinleştirin.

    API’yi kullanma

    Üst düzey genel bakış

    Zamanlanmış Olayları işlemek için hazırlama ve kurtarma olmak üzere iki ana bileşen vardır. Vm'yi etkileyen geçerli zamanlanmış tüm olaylar I AVH Zamanlanmış Olaylar uç noktası aracılığıyla okunabilir. Olay bir terminal durumuna ulaştığında, olay listesinden kaldırılır. Aşağıdaki diyagramda, tek bir zamanlanmış olayın karşılaşabileceği çeşitli durum geçişleri gösterilmektedir:

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

    EventStatus:"Scheduled" durumundaki olaylar için iş yükünüzü hazırlamak için gerekli adımları uygulamanız gerekir. Hazırlık tamamlandıktan sonra zamanlanmış olay API'sini kullanarak olayı onaylamanız gerekir. Aksi takdirde, NotBefore zamanına ulaşıldığında olay otomatik olarak onaylanır. VM paylaşılan altyapıdaysa, sistem aynı donanımdaki diğer tüm kiracıların da işi veya zaman aşımını onaylamasını bekler. Tüm etkilenen VM'lerden onaylar toplandıktan veya NotBefore zamanına ulaşıldıktan sonra Azure, EventStatus:"Started" ile yeni bir zamanlanmış olay yükü oluşturur ve bakım olayının başlatılmasını tetikler. Olay bir terminal durumuna ulaştığında, olay listesinden kaldırılır. Bu, müşterinin VM'lerini kurtarması için bir sinyal görevi görür.

    Uygulamanızda zamanlanmış olayları okuma ve yönetme işlemini gösteren psudeo kodu aşağıdadır:

    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
    

    Zamanlanmış olaylar genellikle yüksek kullanılabilirlik gereksinimleri olan uygulamalar için kullanıldığından dikkate alınması gereken birkaç istisnai durum vardır:

    1. Zamanlanmış bir olay tamamlanıp diziden kaldırıldıktan sonra, başka bir EventStatus:"Scheduled" olayı da dahil olmak üzere yeni bir olay olmadan başka bir etki olmaz
    2. Azure, filonun tamamında bakım işlemlerini izler ve nadir durumlarda bakım işleminin uygulanamayacak kadar yüksek riskli olduğunu belirler. Bu durumda zamanlanan olay doğrudan "Zamanlanmış" durumundan olay dizisinden kaldırılacaktır
    3. Donanım hatası durumunda, Azure "Zamanlanmış" durumunu atlar ve hemen EventStatus:"Başlatıldı" durumuna geçer.
    4. Olay hala EventStatus:"Started" durumunda olsa da, zamanlanan olayda tanıtılandan daha kısa bir sürenin başka bir etkisi olabilir.

    Azure'ın kullanılabilirlik garantisi kapsamında, farklı hata etki alanlarındaki VM'ler aynı anda rutin bakım işlemlerinden etkilenmez. Ancak, işlemleri ardı ardına seri hale getirmiş olabilirler. Bir hata etki alanındaki VM'ler, başka bir hata etki alanının bakımı tamamlandıktan kısa süre sonra EventStatus:"Scheduled" ile zamanlanmış olayları alabilir. Hangi mimariyi seçtiğinizden bağımsız olarak, vm'lerinizde bekleyen yeni olayları her zaman denetlemeye devam edin.

    Olayların tam zamanlamaları farklılık gösterse de, aşağıdaki diyagram tipik bir bakım işleminin nasıl ilerleyebileceğine ilişkin kaba bir kılavuz sağlar:

    • EventStatus:"Scheduled" to Approval Timeout: 15 dakika
    • Etki Süresi: 7 saniye
    • EventStatus:"Started" to Completed (olay Olaylar dizisinden kaldırıldı): 10 dakika

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

    Üst Bilgiler

    Meta Veri Hizmeti'ni sorgularken, isteğin istemeden yeniden yönlendirilmediğinden emin olmak için üst bilgiyi Metadata:true sağlamanız gerekir. Tüm Metadata:true zamanlanmış olay istekleri için üst bilgi gereklidir. üst bilgisinin isteğe eklenememesi, Meta Veri Hizmeti'nden "Hatalı İstek" yanıtıyla sonuçlanır.

    Olayları sorgulama

    Aşağıdaki çağrıyı yaparak zamanlanmış olayları sorgulayabilirsiniz:

    Bash örneği

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

    PowerShell örneği

    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 örneği

    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
    
    

    Yanıt, zamanlanmış olaylar dizisi içerir. Boş bir dizi, şu anda hiçbir olayın zamanlanmış olmadığı anlamına gelir. Zamanlanmış olayların olduğu durumlarda, yanıt bir dizi olay içerir.

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

    Olay özellikleri

    Özellik Açıklama
    Belge Enkarnasyonu Olaylar dizisi değiştiğinde artan tamsayı. Aynı enkarnasyona sahip belgeler aynı olay bilgilerini içerir ve bir olay değiştiğinde enkarnasyon artırılır.
    EventId Bu olay için genel olarak benzersiz tanımlayıcı.

    Örnek:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    EventType Bu olayın neden olduğu etki.

    Değer:
    • Freeze: Sanal Makine birkaç saniye duraklatmak üzere zamanlanmıştır. CPU ve ağ bağlantısı askıya alınmış olabilir, ancak bellek veya açık dosyaları etkilemez.
    • Reboot: Sanal Makine yeniden başlatma için zamanlandı (kalıcı olmayan bellek kaybolur). Nadir durumlarda EventType:"Reboot" için zamanlanmış bir VM yeniden başlatma yerine bir dondurma olayıyla karşılaşabilir. Olayın tamamlanıp tamamlanmadiğini ve iş yükünüzü geri yüklemenin güvenli olup olmadığını öğrenmek için yukarıdaki yönergeleri izleyin.
    • Redeploy: Sanal Makine başka bir düğüme taşınacak şekilde zamanlanmıştır (kısa ömürlü diskler kaybolur).
    • Preempt: Spot Sanal Makinesi siliniyor (kısa ömürlü diskler kaybolur). Bu olay en iyi çaba temelinde kullanıma sunulur
    • Terminate: Sanal makine silinmek üzere zamanlandı.
    ResourceType Bu olayın etkilediği kaynak türü.

    Değer:
    • VirtualMachine
    Kaynaklar Bu olayın etkilediği kaynakların listesi.

    Örnek:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Bu olayın durumu.

    Değer:
    • Scheduled: Bu olay, özelliğinde NotBefore belirtilen süreden sonra başlayacak şekilde zamanlanmıştır.
    • Started: Bu olay başladı.
    Hiçbir zaman veya Completed benzer bir durum sağlanmadı. Olay bittiğinde olay artık döndürülmüyor.
    NotBefore Bu olayın başlatıldığı saat. Olayın bu saatten önce başlamaması garanti edilir. Olay zaten başlatıldıysa boş olur

    Örnek:
    • Pzt, 19 Eylül 2016 18:29:47 GMT
    Açıklama Bu olayın açıklaması.

    Örnek:
    • Konak sunucusu bakımdan geçiyor.
    EventSource Olayın başlatıcısı.

    Örnek:
    • Platform: Bu olay platform tarafından başlatılır.
    • User: Bu olay kullanıcı tarafından başlatılır.
    DurationInSeconds Olayın neden olduğu kesintinin beklenen süresi.

    Örnek:
    • 9: Olayın neden olduğu kesinti 9 saniye sürer.
    • 0: Olay VM'yi kesintiye uğratmaz veya kullanılabilirliğini etkilemez (örn. ağa güncelleştirme)
    • -1: Etki süresi bilinmiyorsa veya uygulanmıyorsa kullanılan varsayılan değer.

    Olay zamanlama

    Her olay, gelecekte olay türüne göre en az bir süre zamanlanır. Bu süre bir olayın NotBefore özelliğine yansıtılır.

    EventType En düşük bildirim
    Dondur 15 dakika
    Yeniden başlatma 15 dakika
    Yeniden dağıtım 10 dakika
    Sonlandır Kullanıcı Yapılandırılabilir: 5 - 15 dakika

    Bu, gelecekteki bir olay zamanlamasını, olay gerçekleşmeden önce en az bildirim zamanına kadar algılayabileceğiniz anlamına gelir. Bir olay zamanlandıktan sonra onaylandıktan veya zaman geçtikten NotBefore sonra duruma geçerStarted. Ancak nadir durumlarda işlem başlamadan önce Azure tarafından iptal edilir. Bu durumda olay Olaylar dizisinden kaldırılır ve etki daha önce zamanlandığı gibi gerçekleşmez.

    Dekont

    Bazı durumlarda Azure, donanımın düşmesi nedeniyle konak hatasını tahmin edebilir ve bir geçiş zamanlayarak hizmetinizdeki kesintiyi azaltmaya çalışır. Etkilenen sanal makineler genellikle gelecekte birkaç gün olan zamanlanmış bir NotBefore olay alır. Gerçek süre, tahmin edilen hata riski değerlendirmesine bağlı olarak değişir. Azure mümkün olduğunda 7 gün önceden bildirimde bulunmaya çalışır, ancak tahmin, donanımın yakın zamanda başarısız olma olasılığının yüksek olması durumunda gerçek süre değişir ve daha küçük olabilir. Sistem tarafından başlatılan geçiş öncesinde donanımın başarısız olması durumunda hizmetinizin riskini en aza indirmek için, sanal makinenizi en kısa sürede kendi kendine yeniden dağıtmanızı öneririz.

    Dekont

    Konak düğümü bir donanım hatasıyla karşılaşırsa Azure, etkilenen sanal makineler için kurtarma işlemine hemen başlarken en düşük bildirim süresini atlar. Bu, etkilenen VM'lerin yanıt verememesi durumunda kurtarma süresini azaltır. Kurtarma işlemi sırasında ve EventStatus = Startedile EventType = Reboot etkilenen tüm VM'ler için bir olay oluşturulur.

    Yoklama sıklığı

    Güncelleştirmeler için uç noktayı istediğiniz sıklıkta veya seyrek yoklayabilirsiniz. Ancak, istekler arasındaki süre ne kadar uzun olursa, yaklaşan bir olaya tepki vermek için o kadar fazla zaman kaybedebilirsiniz. Bazı durumlarda önceden bildirim 30 saniye kadar kısa olsa da çoğu olayda 5-15 dakika önceden bildirim vardır. Azaltıcı eylemlere geçmek için mümkün olduğunca çok zaman ayırdığınızdan emin olmak için hizmeti saniyede bir kez yoklamanızı öneririz.

    Olay başlatma

    Yaklaşan bir olayı öğrendikkten ve düzgün kapatma mantığınızı tamamladıktan sonra ile Meta Veri Hizmeti'ne EventIdçağrı POST yaparak bekleyen olayı onaylayabilirsiniz. Bu çağrı, Azure'a en düşük bildirim süresini (mümkün olduğunda) kısaltabileceğini belirtir. Olay onaydan hemen sonra başlatılamayabilir; bazı durumlarda Azure, olaya devam etmeden önce düğümde barındırılan tüm VM'lerin onaylanmasını gerektirir.

    İstek gövdesinde POST aşağıdaki JSON örneği beklenir. İstek, listesini StartRequestsiçermelidir. Her StartRequest birinde, hızlandırmak istediğiniz olay için yer alır EventId :

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

    Başka bir VM olayı zaten onaylamış olsa bile geçerli bir olay kimliği geçirilirse hizmet her zaman 200 başarı kodu döndürür. 400 hata kodu, istek üst bilgisinin veya yükünün hatalı biçimlendirilmiş olduğunu gösterir.

    Dekont

    Olaylar post iletisiyle onaylanmadıkça veya NotBefore süresi dolmadıkça devam etmez. Bu, Azure portalından VM yeniden başlatmaları gibi kullanıcı tarafından tetiklenen olayları içerir.

    Bash örneği

    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
    

    PowerShell örneği

    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 örneği

    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
    

    Dekont

    Bir olayı onaylamak, olayın yalnızca olayı onaylayan VM'yi değil olaydaki herkes Resources için devam etmesini sağlar. Bu nedenle, onayları koordine etmek için bir lider seçebilirsiniz. Bu, alandaki ilk makine Resources kadar basit olabilir.

    Örnek yanıtlar

    Aşağıdaki olaylar, canlı olarak başka bir düğüme geçirilen iki VM tarafından görülen bir örnektir.

    DocumentIncarnation içinde her yeni bilgi Eventsolduğunda değişiyor. Olayın onaylanması, dondurma işleminin hem WestNO_0 hem de WestNO_1 devam etmesine olanak sağlar. DurationInSeconds-1 değeri, platformun işlemin ne kadar süreceğini bilmediğini gösterir.

    {
        "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 Örneği

    Aşağıdaki örnek, zamanlanmış olaylar için Meta Veri Hizmeti'ni sorgular ve bekleyen her olayı onaylar:

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

    Sonraki adımlar