Öğretici: IoT Edge'da Blob Depolama olaylarına React (Önizleme)

Bu makalede, Blob oluşturma ve Blob silme olaylarını Event Grid'e göndermek için bir Event Grid yayımcısı olarak görev yapan IoT modülünde Azure Blob Depolama nasıl dağıtılacağı gösterilmektedir.

IoT Edge Azure Blob Depolama genel bakış için bkz. IoT Edge ve özellikleriyle ilgili Azure Blob Depolama.

Önemli

31 Mart 2023'te Azure'da Event Grid IoT Edge desteği kullanımdan kaldırılacağından, bu tarihten önce yerel IoT Edge özelliklere geçiş yaptığınızdan emin olun. Daha fazla bilgi için bkz. Azure IoT Edge'da Event Grid'den Azure IoT Edge'a geçiş.

Uyarı

Event Grid ile IoT Edge tümleştirme Azure Blob Depolama Önizlemede

Bu öğreticiyi tamamlamak için şunları yapmanız gerekir:

  • Azure aboneliği - Henüz hesabınız yoksa ücretsiz bir hesap oluşturun.
  • Azure IoT Hub ve IoT Edge cihaz - Henüz cihazınız yoksa Linux veya Windows cihazları için hızlı başlangıçtaki adımları izleyin.

Event Grid IoT Edge modülünü dağıtma

Modülleri bir IoT Edge cihaza dağıtmanın çeşitli yolları vardır ve bunların tümü IoT Edge üzerinde Azure Event Grid için çalışır. Bu makalede, event grid'i Azure portal IoT Edge dağıtma adımları açıklanmaktadır.

Not

Bu öğreticide, Event Grid modülünü kalıcı olmadan dağıtacaksınız. Bu, modülü yeniden dağıttığınızda bu öğreticide oluşturduğunuz tüm konuların ve aboneliklerin silineceği anlamına gelir. Kalıcılığı ayarlama hakkında daha fazla bilgi için şu makalelere bakın: Linux'ta kalıcı durum veya Windows'da kalıcı durum. Üretim iş yükleri için Kalıcılık ile Event Grid modülünü yüklemenizi öneririz.

IoT Edge cihazınızı seçin

  1. Azure portalda oturum açma
  2. IoT Hub gidin.
  3. Otomatik Cihaz Yönetimi bölümündeki menüden IoT Edge seçin.
  4. Cihaz listesinden hedef cihazın kimliğine tıklayın
  5. Modülleri Ayarlama'yı seçin. Sayfayı açık tutun. Sonraki bölümde yer alan adımlarla devam edin.

Dağıtım bildirimi yapılandırma

Dağıtım bildirimi, dağıtılacak modülleri, modüller arasında verilerin nasıl aktığını ve modül ikizlerinin istenen özelliklerini açıklayan bir JSON belgesidir. Azure portal, JSON belgesini el ile oluşturmak yerine dağıtım bildirimi oluşturma işleminde size yol gösteren bir sihirbaza sahiptir. Üç adımı vardır: Modül ekleme, Yolları belirtme ve Dağıtımı gözden geçirme.

Modül ekle

  1. Dağıtım Modülleri bölümünde Ekle'yi seçin

  2. Açılan listedeki modül türlerinden IoT Edge Modül'ünü seçin

  3. Kapsayıcının adını, görüntüsünü ve kapsayıcı oluşturma seçeneklerini belirtin:

    • Ad: eventgridmodule
    • Görüntü URI'si: mcr.microsoft.com/azure-event-grid/iotedge:latest
    • Kapsayıcı Oluşturma Seçenekleri:
        {
          "Env": [
           "inbound__serverAuth__tlsPolicy=enabled",
           "inbound__clientAuth__clientCert__enabled=false"
          ],
          "HostConfig": {
            "PortBindings": {
              "4438/tcp": [
                {
                    "HostPort": "4438"
                }
              ]
            }
          }
        }
    
  4. Kaydet’e tıklayın

  5. Azure Event Grid Abone modülünü birlikte dağıtmadan önce eklemek için sonraki bölüme geçin.

    Önemli

    Bu öğreticide, event grid modülünü hem HTTP/HTTPs isteklerine hem de istemci kimlik doğrulamasının devre dışı bırakılmasına izin verecek şekilde dağıtmayı öğreneceksiniz. Üretim iş yükleri için yalnızca HTTP isteklerini ve istemci kimlik doğrulaması etkinleştirilmiş aboneleri etkinleştirmenizi öneririz. Event Grid modülünü güvenli bir şekilde yapılandırma hakkında daha fazla bilgi için bkz . Güvenlik ve kimlik doğrulaması.

Event Grid Abonesi IoT Edge modülünü dağıtma

Bu bölümde, olayların teslim edilebileceği bir olay işleyicisi olarak davranan başka bir IoT modülünün nasıl dağıtılacağı gösterilmektedir.

Modül ekle

  1. Dağıtım Modülleri bölümünde Yeniden Ekle'yi seçin.

  2. Açılan listedeki modül türlerinden IoT Edge Modül'ünü seçin

  3. Kapsayıcının adını, görüntüsünü ve kapsayıcı oluşturma seçeneklerini belirtin:

    • Ad: abone
    • Görüntü URI'si: mcr.microsoft.com/azure-event-grid/iotedge-samplesubscriber:latest
    • Kapsayıcı Oluşturma Seçenekleri: Yok
  4. Kaydet’e tıklayın

  5. Azure Blob Depolama modülünü eklemek için sonraki bölüme geçin

Azure Blob Depolama modülünü dağıtma

Bu bölümde, Oluşturulan ve silinen olayları yayımlayan bir Event Grid yayımcısı işlevi görmesine neden olan Azure Blob Depolama modülünün nasıl dağıtılacağı gösterilmektedir.

Modül ekle

  1. Dağıtım Modülleri bölümünde Ekle'yi seçin

  2. Açılan listedeki modül türlerinden IoT Edge Modül'ünü seçin

  3. Kapsayıcının adını, görüntüsünü ve kapsayıcı oluşturma seçeneklerini belirtin:

    • Ad: azureblobstorageoniotedge
    • Görüntü URI'si: mcr.microsoft.com/azure-blob-storage:latest
    • Kapsayıcı Oluşturma Seçenekleri:
        {
          "Env":[
            "LOCAL_STORAGE_ACCOUNT_NAME=<your storage account name>",
            "LOCAL_STORAGE_ACCOUNT_KEY=<your storage account key>",
            "EVENTGRID_ENDPOINT=http://<event grid module name>:5888"
          ],
          "HostConfig":{
            "Binds":[
                "<storage mount>"
            ],
            "PortBindings":{
              "11002/tcp":[{"HostPort":"11002"}]
            }
          }
        }
    

    Önemli

    • Blob Depolama modülü hem HTTPS hem de HTTP kullanarak olayları yayımlayabilir.
    • EventGrid için istemci tabanlı kimlik doğrulamasını etkinleştirdiyseniz, EVENTGRID_ENDPOINT değerini https'ye izin verecek şekilde güncelleştirdiğinizden emin olun, örneğin: EVENTGRID_ENDPOINT=https://<event grid module name>:4438.
    • Ayrıca yukarıdaki Json dosyasına başka bir ortam değişkeni AllowUnknownCertificateAuthority=true ekleyin. HTTPS üzerinden EventGrid ile konuşurken AllowUnknownCertificateAuthority , depolama modülünün otomatik olarak imzalanan EventGrid sunucu sertifikalarına güvenmesine olanak tanır.
  4. Kopyaladığınız JSON dosyasını aşağıdaki bilgilerle güncelleştirin:

    • değerini hatırlayabileceğiniz bir adla değiştirin <your storage account name> . Hesap adları 3 ile 24 karakter uzunluğunda olmalı ve küçük harfler ve sayılar içermelidir. Boşluk yok.

    • değerini 64 baytlık base64 tuşuyla değiştirin <your storage account key> . GeneratePlus gibi araçlarla bir anahtar oluşturabilirsiniz. Diğer modüllerden blob depolamaya erişmek için bu kimlik bilgilerini kullanacaksınız.

    • değerini Event Grid modülünüzün adıyla değiştirin <event grid module name> .

    • değerini kapsayıcı işletim sisteminize göre değiştirin <storage mount> .

      • Linux kapsayıcıları için my-volume:/blobroot
      • Windows kapsayıcıları için my-volume:C:/BlobRoot
  5. Kaydet’e tıklayın

  6. Yollar bölümüne devam etmek için İleri'ye tıklayın

    Not

    Uç cihaz olarak bir Azure VM kullanıyorsanız, bu öğreticide kullanılan konak bağlantı noktalarında gelen trafiğe izin vermek için bir gelen bağlantı noktası kuralı ekleyin: 4438, 5888, 8080 ve 11002. Kuralı ekleme yönergeleri için bkz. Vm'ye bağlantı noktaları açma.

Kurulum yolları

Varsayılan yolları değiştirmeyin ve gözden geçirme bölümüne devam etmek için İleri'yi seçin

Dağıtımı gözden geçirme

  1. Gözden geçirme bölümünde, önceki bölümde yaptığınız seçimlere göre oluşturulan JSON dağıtım bildirimi gösterilir. Aşağıdaki dört modülü gördüğünüzden emin olun: $edgeAgent, $edgeHub, eventgridmodule, abone ve tüm dağıtılan azureblobstorageoniotedge .
  2. Dağıtım bilgilerinizi gözden geçirin ve gönder'i seçin.

Dağıtımınızı doğrulama

  1. Dağıtımı gönderdikten sonra IoT hub'ınızın IoT Edge sayfasına dönersiniz.

  2. Ayrıntılarını açmak için dağıtımla hedeflediğiniz IoT Edge cihazı seçin.

  3. Cihaz ayrıntılarında eventgridmodule, abone ve azureblobstorageoniotedge modüllerinin hem Dağıtımda belirtilen hem deCihaz tarafından bildirilen olarak listelendiğini doğrulayın.

    Modülün cihazda başlatılması ve ardından IoT Hub'a geri bildirilmesi birkaç dakika sürebilir. Güncelleştirilmiş durumu görmek için sayfayı yenileyin.

BlobCreated ve BlobDeleted olaylarını yayımlama

  1. Bu modül, MicrosoftStorage konusunu otomatik olarak oluşturur. Var olduğunu doğrulayın

    curl -k -H "Content-Type: application/json" -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage?api-version=2019-01-01-preview
    

    Örnek çıktı:

        [
          {
            "id": "/iotHubs/eg-iot-edge-hub/devices/eg-edge-device/modules/eventgridmodule/topics/MicrosoftStorage",
            "name": "MicrosoftStorage",
            "type": "Microsoft.EventGrid/topics",
            "properties": {
              "endpoint": "https://<edge-vm-ip>:4438/topics/MicrosoftStorage/events?api-version=2019-01-01-preview",
              "inputSchema": "EventGridSchema"
            }
          }
        ]
    

    Önemli

    • HTTPS akışı için, istemci kimlik doğrulaması SAS anahtarı aracılığıyla etkinleştirildiyse, daha önce belirtilen SAS anahtarı üst bilgi olarak eklenmelidir. Bu nedenle curl isteği şu şekilde olacaktır: curl -k -H "Content-Type: application/json" -H "aeg-sas-key: <your SAS key>" -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage?api-version=2019-01-01-preview
    • HTTPS akışı için, istemci kimlik doğrulaması sertifika aracılığıyla etkinleştirildiyse curl isteği şu şekilde olur: curl -k -H "Content-Type: application/json" --cert <certificate file> --key <certificate private key file> -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage?api-version=2019-01-01-preview
  2. Aboneler bir konuya yayımlanan olaylara kaydolabilir. Herhangi bir olayı almak için MicrosoftStorage için bir Event Grid aboneliği oluşturmanız gerekir.

    1. Aşağıdaki içeriğe sahip blobsubscription.json dosyasını oluşturun. Yük hakkında ayrıntılı bilgi için API belgelerimize bakın

       {
         "properties": {
           "destination": {
             "endpointType": "WebHook",
             "properties": {
               "endpointUrl": "https://subscriber:4430"
             }
           }
         }
       }
      

      Not

      endpointType özelliği abonenin bir Web kancası olduğunu belirtir. endpointUrl, abonenin olayları dinlediği URL'yi belirtir. Bu URL, daha önce dağıtılan Azure İşlevi örneğine karşılık gelir.

    2. Konu başlığı için bir abonelik oluşturmak üzere aşağıdaki komutu çalıştırın. HTTP durum kodunun olduğunu 200 OKgördüğünüzden emin olmanız gerekir.

      curl -k -H "Content-Type: application/json" -X PUT -g -d @blobsubscription.json https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage/eventSubscriptions/sampleSubscription5?api-version=2019-01-01-preview
      

      Önemli

      • HTTPS akışı için, istemci kimlik doğrulaması SAS anahtarı aracılığıyla etkinleştirildiyse, daha önce belirtilen SAS anahtarı üst bilgi olarak eklenmelidir. Bu nedenle curl isteği şu şekilde olacaktır: curl -k -H "Content-Type: application/json" -H "aeg-sas-key: <your SAS key>" -X PUT -g -d @blobsubscription.json https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage/eventSubscriptions/sampleSubscription5?api-version=2019-01-01-preview
      • HTTPS akışı için, istemci kimlik doğrulaması sertifika aracılığıyla etkinleştirildiyse curl isteği şu şekilde olur:curl -k -H "Content-Type: application/json" --cert <certificate file> --key <certificate private key file> -X PUT -g -d @blobsubscription.json https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage/eventSubscriptions/sampleSubscription5?api-version=2019-01-01-preview
    3. Aboneliğin başarıyla oluşturulduğunu doğrulamak için aşağıdaki komutu çalıştırın. 200 Tamam HTTP Durum Kodu döndürülmelidir.

      curl -k -H "Content-Type: application/json" -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage/eventSubscriptions/sampleSubscription5?api-version=2019-01-01-preview
      

      Örnek çıktı:

       {
         "id": "/iotHubs/eg-iot-edge-hub/devices/eg-edge-device/modules/eventgridmodule/topics/MicrosoftStorage/eventSubscriptions/sampleSubscription5",
         "type": "Microsoft.EventGrid/eventSubscriptions",
         "name": "sampleSubscription5",
         "properties": {
           "Topic": "MicrosoftStorage",
           "destination": {
             "endpointType": "WebHook",
             "properties": {
               "endpointUrl": "https://subscriber:4430"
             }
           }
         }
       }
      

      Önemli

      • HTTPS akışı için, istemci kimlik doğrulaması SAS anahtarı aracılığıyla etkinleştirildiyse, daha önce belirtilen SAS anahtarı üst bilgi olarak eklenmelidir. Bu nedenle curl isteği şu şekilde olacaktır: curl -k -H "Content-Type: application/json" -H "aeg-sas-key: <your SAS key>" -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage/eventSubscriptions/sampleSubscription5?api-version=2019-01-01-preview
      • HTTPS akışı için, istemci kimlik doğrulaması sertifika aracılığıyla etkinleştirildiyse curl isteği şu şekilde olur: curl -k -H "Content-Type: application/json" --cert <certificate file> --key <certificate private key file> -X GET -g https://<your-edge-device-public-ip-here>:4438/topics/MicrosoftStorage/eventSubscriptions/sampleSubscription5?api-version=2019-01-01-preview
  3. Azure Depolama Gezgini indirin ve yerel depolama alanınıza bağlayın

Olay teslimi doğrulama

BlobOluşturan olay teslimi doğrulama

  1. dosyaları Azure Depolama Gezgini'den yerel depolama alanına blok blobları olarak Upload ve modül oluşturma olaylarını otomatik olarak yayımlar.

  2. Oluşturma olayı için abone günlüklerine göz atın. Olay teslimini doğrulamak için adımları izleyin

    Örnek Çıktı:

            Received Event:
            {
              "id": "d278f2aa-2558-41aa-816b-e6d8cc8fa140",
              "topic": "MicrosoftStorage",
              "subject": "/blobServices/default/containers/cont1/blobs/Team.jpg",
              "eventType": "Microsoft.Storage.BlobCreated",
              "eventTime": "2019-10-01T21:35:17.7219554Z",
              "dataVersion": "1.0",
              "metadataVersion": "1",
              "data": {
                "api": "PutBlob",
                "clientRequestId": "00000000-0000-0000-0000-000000000000",
                "requestId": "ef1c387b-4c3c-4ac0-8e04-ff73c859bfdc",
                "eTag": "0x8D746B740DA21FB",
                "url": "http://azureblobstorageoniotedge:11002/myaccount/cont1/Team.jpg",
                "contentType": "image/jpeg",
                "contentLength": 858129,
                "blobType": "BlockBlob"
              }
            }
    

BlobDeleted olay teslimi doğrulama

  1. Azure Depolama Gezgini kullanarak blobları yerel depolamadan sildiğinizde modül silme olaylarını otomatik olarak yayımlar.

  2. Silme olayı için abone günlüklerine göz atın. Olay teslimini doğrulamak için adımları izleyin

    Örnek Çıktı:

            Received Event:
            {
              "id": "ac669b6f-8b0a-41f3-a6be-812a3ce6ac6d",
              "topic": "MicrosoftStorage",
              "subject": "/blobServices/default/containers/cont1/blobs/Team.jpg",
              "eventType": "Microsoft.Storage.BlobDeleted",
              "eventTime": "2019-10-01T21:36:09.2562941Z",
              "dataVersion": "1.0",
              "metadataVersion": "1",
              "data": {
                "api": "DeleteBlob",
                "clientRequestId": "00000000-0000-0000-0000-000000000000",
                "requestId": "2996bbfb-c819-4d02-92b1-c468cc67d8c6",
                "eTag": "0x8D746B740DA21FB",
                "url": "http://azureblobstorageoniotedge:11002/myaccount/cont1/Team.jpg",
                "contentType": "image/jpeg",
                "contentLength": 858129,
                "blobType": "BlockBlob"
              }
            }
    

Tebrikler! Öğreticiyi tamamladınız. Aşağıdaki bölümlerde olay özellikleriyle ilgili ayrıntılar sağlanır.

Olay özellikleri

Desteklenen olay özelliklerinin listesi, türleri ve açıklamaları aşağıdadır.

Özellik Tür Açıklama
konu başlığı string Olay kaynağının tam kaynak yolu. Bu alan yazılamaz. Event Grid bu değeri sağlar.
subject string Olay konusunun yayımcı tarafından tanımlanan yolu.
eventType string Bu olay kaynağı için kayıtlı olay türlerinden biri.
eventTime string Sağlayıcının UTC saati temelinde olayın oluşturulduğu saat.
kimlik string Olayın benzersiz tanımlayıcısı.
veriler object Blob depolama olay verileri.
dataVersion string Veri nesnesinin şema sürümü. Şema sürümünü yayımcı tanımlar.
metadataVersion string Olay meta verilerinin şema sürümü. Event Grid en üst düzey özelliklerin şemasını tanımlar. Event Grid bu değeri sağlar.

Veri nesnesi aşağıdaki özelliklere sahiptir:

Özellik Tür Açıklama
api string Olayı tetikleyen işlem. Aşağıdaki değerlerden biri olabilir:
  • BlobCreated - izin verilen değerler şunlardır: PutBlob ve PutBlockList
  • BlobDeleted - izin verilen değerler ve AutoDeletedeğerleridir.DeleteBlobDeleteAfterUpload

    DeleteAfterUpload DeleteAfterUpload istenen özelliği true olarak ayarlandığından blob otomatik olarak silindiğinde olay oluşturulur.

    AutoDelete deleteAfterMinutes istenen özellik değerinin süresi dolduğundan blob otomatik olarak silindiğinde olay oluşturulur.

clientRequestId string depolama API'si işlemi için istemci tarafından sağlanan istek kimliği. Bu kimlik, günlüklerdeki "client-request-id" alanını kullanarak Azure Depolama tanılama günlükleriyle ilişkilendirmek için kullanılabilir ve "x-ms-client-request-id" üst bilgisi kullanılarak istemci isteklerinde sağlanabilir. Ayrıntılar için bkz . Günlük Biçimi.
requestId string Depolama API'si işlemi için hizmet tarafından oluşturulan istek kimliği. Günlüklerdeki "request-id-header" alanı kullanılarak Azure Depolama tanılama günlükleri ile ilişkilendirmek için kullanılabilir ve 'x-ms-request-id' üst bilgisinde API çağrısı başlatılarak döndürülür. Bkz . Günlük Biçimi.
Etag string İşlemleri koşullu olarak gerçekleştirmek için kullanabileceğiniz değer.
Contenttype string Blob için belirtilen içerik türü.
Contentlength tamsayı Blobun bayt cinsinden boyutu.
blobType string Blob türü. Geçerli değerler "BlockBlob" veya "PageBlob" değerleridir.
url string Blob yolu.
İstemci blob REST API kullanıyorsa url şu yapıya sahiptir: <storage-account-name.blob.core.windows.net/>< container-name>/<file-name>.
İstemci bir Data Lake Storage REST API kullanıyorsa url şu yapıya sahiptir: <storage-account-name.dfs.core.windows.net/>< file-system-name>/<file-name>.

Sonraki adımlar

Blob Depolama belgelerinde aşağıdaki makalelere bakın:

Bu öğreticide, bir Azure Blob Depolama blob oluşturarak veya silerek olayları yayımladınız. Olayları buluta (Azure Event Hub veya Azure IoT Hub) iletmeyi öğrenmek için diğer öğreticilere bakın: