Aracılığıyla paylaş


Azure Event Grid'de yayımlamayı Dayanıklı İşlevler

Bu makalede, düzenleme yaşam döngüsü olaylarını (oluşturulan, tamamlanan ve başarısız gibi) özel bir Azure Event Grid konusuna yayımlamak için Dayanıklı İşlevler nasıl ayarlanacağı gösterilmektedir.

Bu özelliğin yararlı olduğu bazı senaryolar aşağıdadır:

  • Mavi/yeşil dağıtımlar gibi DevOps senaryoları: Yan yana dağıtım stratejisini uygulamadan önce herhangi bir görevlerin çalışıp çalışmadığını bilmek isteyebilirsiniz.

  • Gelişmiş izleme ve tanılama desteği: düzenleme durumu bilgilerini Azure SQL Veritabanı veya Azure Cosmos DB gibi sorgular için iyileştirilmiş bir dış depoda izleyebilirsiniz.

  • Uzun süre çalışan arka plan etkinliği: Uzun süre çalışan bir arka plan etkinliği için Dayanıklı İşlevler kullanıyorsanız, bu özellik geçerli durumu bilmenize yardımcı olur.

Önkoşullar

  • Dayanıklı İşlevler projenize Microsoft.Azure.WebJobs.Extensions.DurableTask yükleyin.
  • Azurite depolama öykünücüsü yükleyin veya mevcut bir Azure Depolama hesabını kullanın.
  • Azure CLI'yi yükleme veya Azure Cloud Shell kullanma

Özel Event Grid konusu oluşturma

Dayanıklı İşlevler'dan olay göndermek için bir Event Grid konusu oluşturun. Aşağıdaki yönergelerde, Azure CLI kullanarak konu oluşturma adımları gösterilmektedir. Konuyu PowerShell'i veya Azure portalını kullanarak da oluşturabilirsiniz.

Kaynak grubu oluşturma

az group create komutuyla bir kaynak grubu oluşturun. Azure Event Grid şu anda tüm bölgeleri desteklemez. Hangi bölgelerin desteklendiği hakkında bilgi için bkz. Azure Event Grid'e genel bakış.

az group create --name eventResourceGroup --location westus2

Özel konu oluşturma

Event Grid konusu, olayınızı gönderdiğiniz kullanıcı tanımlı bir uç nokta sağlar. <topic_name> değerini konunuz için benzersiz bir adla değiştirin. Konu adı bir DNS girdisi haline geldiğinden benzersiz olmalıdır.

az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup

Uç noktayı ve anahtarı alma

Konunun uç noktasını alın. değerini seçtiğiniz adla değiştirin <topic_name> .

az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv

Konu anahtarını alın. değerini seçtiğiniz adla değiştirin <topic_name> .

az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv

Artık konuya olay gönderebilirsiniz.

Event Grid yayımlamayı yapılandırma

Dayanıklı İşlevler projenizde dosyayı bulunhost.json.

Dayanıklı İşlevler 1.x

Bir durableTask özelliğe ve eventGridKeySettingName ekleyineventGridTopicEndpoint.

{
  "durableTask": {
    "eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
    "eventGridKeySettingName": "EventGridKey"
  }
}

Dayanıklı İşlevler 2.x

Dosyanın özelliğine durableTask bir notifications bölüm ekleyin ve öğesini seçtiğiniz adla değiştirin<topic_name>. durableTask veya extensions özellikleri yoksa, bunları şu örnek gibi oluşturun:

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "notifications": {
        "eventGrid": {
          "topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
          "keySettingName": "EventGridKey"
        }
      }
    }
  }
}

Olası Azure Event Grid yapılandırma özellikleri host.json belgelerinde bulunabilir. Dosyayı yapılandırdıktan host.json sonra işlev uygulamanız yaşam döngüsü olaylarını Event Grid konusuna gönderir. Bu eylem, işlev uygulamanızı hem yerel olarak hem de Azure'da çalıştırdığınızda başlar.

İşlev Uygulaması ve local.settings.jsoniçindeki konu anahtarı için uygulama ayarını ayarlayın. Aşağıdaki JSON, Azure Depolama öykünücüsü local.settings.json kullanılarak yerel hata ayıklamaya yönelik bir örnektir. değerini konu anahtarıyla değiştirin <topic_key> .

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "EventGridKey": "<topic_key>"
    }
}

Gerçek bir Azure Depolama hesabı yerine Depolama Öykünücüsü kullanıyorsanız çalıştığından emin olun. Yürütmeden önce mevcut depolama verilerini temizlemek iyi bir fikirdir.

Gerçek bir Azure Depolama hesabı kullanıyorsanız değerini bağlantı dizesi ile değiştirin UseDevelopmentStorage=true local.settings.json.

Olayları dinleyen işlevler oluşturma

Azure portalını kullanarak, Dayanıklı İşlevler uygulamanız tarafından yayımlanan olayları dinlemek için başka bir işlev uygulaması oluşturun. Event Grid konusuyla aynı bölgede bulmak en iyisidir.

Event Grid tetikleyici işlevi oluşturma

  1. İşlev uygulamanızda İşlevler'i ve ardından + Ekle'yi seçin

    Azure portalında bir işlev ekleyin.

  2. Event Grid'i arayın ve Azure Event Grid tetikleyici şablonunu seçin.

    Azure portalında Event Grid tetikleyici şablonunu seçin.

  3. Yeni tetikleyiciyi adlandırın ve İşlev Oluştur'u seçin.

    Azure portalında Event Grid tetikleyicisini adlandırın.

    Aşağıdaki koda sahip bir işlev oluşturulur:

    #r "Newtonsoft.Json"
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Microsoft.Extensions.Logging;
    
    public static void Run(JObject eventGridEvent, ILogger log)
    {
        log.LogInformation(eventGridEvent.ToString(Formatting.Indented));
    }
    

Event Grid aboneliği ekleme

Artık oluşturduğunuz Event Grid konusu için bir Event Grid aboneliği ekleyebilirsiniz. Daha fazla bilgi için bkz . Azure Event Grid'deki kavramlar.

  1. Yeni işlevinizde Tümleştirme'yi ve ardından Event Grid Tetikleyicisi (eventGridEvent) öğesini seçin.

    Event Grid Tetikleyicisi bağlantısını seçin.

  2. Event Grid Açıklaması Oluştur'u seçin.

    Event Grid aboneliğini oluşturun.

  3. Olay aboneliğinizi adlandırın ve Event Grid Konuları konu türünü seçin.

  4. Aboneliği seçin. Ardından Event Grid konusu için oluşturduğunuz kaynak grubunu ve kaynağı seçin.

  5. Oluştur'u belirleyin.

    Event Grid aboneliği oluşturun.

Artık yaşam döngüsü olaylarını almaya hazırsınız.

Olayları göndermek için Dayanıklı İşlevler uygulamasını çalıştırın

Daha önce yapılandırdığınız Dayanıklı İşlevler projesinde yerel makinenizde hata ayıklamayı başlatın ve bir düzenleme başlatın. Uygulama Dayanıklı İşlevler yaşam döngüsü olaylarını Event Grid'de yayımlar. Event Grid'in oluşturduğunuz dinleyici işlevini Azure portalında günlüklerini denetleyerek tetiklediğini doğrulayın.

2019-04-20T09:28:21.041 [Info] Function started (Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d)
2019-04-20T09:28:21.104 [Info] {
    "id": "054fe385-c017-4ce3-b38a-052ac970c39d",
    "subject": "durable/orchestrator/Running",
    "data": {
        "hubName": "DurableFunctionsHub",
        "functionName": "Sample",
        "instanceId": "055d045b1c8a415b94f7671d8df693a6",
        "reason": "",
        "runtimeStatus": "Running"
    },
    "eventType": "orchestratorEvent",
    "eventTime": "2019-04-20T09:28:19.6492068Z",
    "dataVersion": "1.0",
    "metadataVersion": "1",
    "topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}

2019-04-20T09:28:21.104 [Info] Function completed (Success, Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d, Duration=65ms)
2019-04-20T09:28:37.098 [Info] Function started (Id=36fadea5-198b-4345-bb8e-2837febb89a2)
2019-04-20T09:28:37.098 [Info] {
    "id": "8cf17246-fa9c-4dad-b32a-5a868104f17b",
    "subject": "durable/orchestrator/Completed",
    "data": {
        "hubName": "DurableFunctionsHub",
        "functionName": "Sample",
        "instanceId": "055d045b1c8a415b94f7671d8df693a6",
        "reason": "",
        "runtimeStatus": "Completed"
    },
    "eventType": "orchestratorEvent",
    "eventTime": "2019-04-20T09:28:36.5061317Z",
    "dataVersion": "1.0",
    "metadataVersion": "1",
    "topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:37.098 [Info] Function completed (Success, Id=36fadea5-198b-4345-bb8e-2837febb89a2, Duration=0ms)

Olay Şeması

Aşağıdaki listede yaşam döngüsü olayları şeması açıklanmaktadır:

  • id: Event Grid olayının benzersiz tanımlayıcısı.
  • subject: Olay konusunun yolu. durable/orchestrator/{orchestrationRuntimeStatus}. {orchestrationRuntimeStatus}, , CompletedFailedve TerminatedolacaktırRunning.
  • data: belirli parametreleri Dayanıklı İşlevler.
    • hubName: TaskHub adı.
    • functionName: Orchestrator işlev adı.
    • instanceId: Dayanıklı İşlevler instanceId.
    • reason: İzleme olayıyla ilişkili ek veriler. Daha fazla bilgi için bkz. Dayanıklı İşlevler Tanılama (Azure İşlevleri)
    • runtimeStatus: Orchestration Çalışma Zamanı Durumu. Çalışıyor, Tamamlandı, Başarısız, İptal Edildi.
  • eventType: "orchestratorEvent"
  • eventTime: Olay saati (UTC).
  • dataVersion: Yaşam döngüsü olay şemasının sürümü.
  • metadataVersion: Meta verilerin sürümü.
  • topic: Event Grid konu kaynağı.

Yerel olarak test etme

Yerel olarak test etmek için görüntüleyici web uygulamasıyla yerel test okuyun.

Sonraki adımlar