Aracılığıyla paylaş


Blob yeniden doldurma olayına yanıt olarak Azure İşlevi çalıştırma

Arşiv katmanındaki bir blobu okumak için önce blobu sık erişimli veya seyrek erişimli katmana yeniden doldurmanız gerekir. Yeniden doldurma işleminin tamamlanması birkaç saat sürebilir. Yeniden doldurma işleminin durumunu tekrar tekrar yoklama yerine Azure Event Grid'i blob yeniden doldurma işlemi tamamlandığında bir olayı tetikleyecek şekilde yapılandırabilir ve bu olayı uygulamanızda işleyebilirsiniz.

Bir olay oluştuğunda Event Grid, olayı bir uç nokta aracılığıyla bir olay işleyicisine gönderir. Azure İşlevleri dahil olmak üzere bir dizi Azure hizmeti olay işleyicisi olarak görev yapabilir. Azure İşlevi, bir olaya yanıt olarak yürütülebilen bir kod bloğudur. Bu nasıl yapılır, bir Azure İşlevi geliştirme ve ardından bir blob yeniden doldurulduğunda oluşan bir olaya yanıt olarak event Grid'i işlevi çalıştıracak şekilde yapılandırma işleminde size yol gösterir.

Bu makalede, Visual Studio'dan .NET ile Azure İşlevi oluşturma ve test etme adımları gösterilmektedir. Çeşitli yerel geliştirme ortamlarından ve çeşitli programlama dillerinden Azure İşlevleri oluşturabilirsiniz. Azure İşlevleri için desteklenen diller hakkında daha fazla bilgi için bkz. Azure İşlevleri'da desteklenen diller. Azure İşlevleri geliştirme seçenekleri hakkında daha fazla bilgi için bkz. Yerel olarak kod ve test Azure İşlevleri.

Arşiv katmanından blobları yeniden doldurma hakkında daha fazla bilgi için bkz . Arşiv katmanından blob yeniden doldurmaya genel bakış.

Önkoşullar

Bu makalede, .NET ile bir Azure İşlevi geliştirmek için Visual Studio 2019 veya sonraki bir sürümün nasıl kullanılacağı gösterilmektedir. Visual Studio Community'yi ücretsiz yükleyebilirsiniz. .NET ile Azure Geliştirme için Visual Studio'yu yapılandırdığınızdan emin olun.

  • Çözümünüzü test etmek için HTTP istekleri gönderebilen bir araç yükleyin veya kullanın, örneğin:

    Dikkat

    Kimlik bilgileri, gizli diziler, erişim belirteçleri, API anahtarları ve diğer benzer bilgiler gibi hassas verileriniz olduğu senaryolarda, verilerinizi gerekli güvenlik özellikleriyle koruyan, çevrimdışı veya yerel olarak çalışan, verilerinizi bulutla eşitlemeyen ve çevrimiçi bir hesapta oturum açmanızı gerektirmeyen bir araç kullandığınızdan emin olun. Bu şekilde, hassas verileri herkese açık hale getirmekle ilgili riski azaltırsınız.

Azure aboneliği gereklidir. Henüz bir hesabınız yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Depolama hesabı, üst kaynak grubu veya abonelik kapsamında Depolama Blobu Veri Katkıda Bulunanı rolü atanmış, sağlanan bir Microsoft Entra Id güvenlik sorumlusu. Bkz . Microsoft Entra kullanıcı hesabınıza rol atama.

Azure İşlev uygulaması oluşturma

İşlev uygulaması, Azure İşlevleri için kapsayıcı olarak hizmet veren bir Azure kaynağıdır. Bu makalede açıklanan adımları tamamlamak için yeni veya mevcut bir işlev uygulamasını kullanabilirsiniz.

Azure portalında yeni bir işlev uygulaması oluşturmak için şu adımları izleyin:

  1. Azure portalında İşlev Uygulaması'nı arayın. Aboneliğinizdeki işlev uygulamaları listesine gitmek için İşlev Uygulaması simgesini seçin.

  2. Yeni bir işlev uygulaması oluşturmak için Oluştur düğmesini seçin.

  3. Temel Bilgiler sekmesinde bir kaynak grubu belirtin ve yeni işlev uygulaması için benzersiz bir ad sağlayın.

  4. Yayımla seçeneğinin Kod olarak ayarlandığından emin olun.

  5. Çalışma Zamanı yığını açılan listesinden .NET'i seçin. Sürüm alanı, .NET core'un en son sürümünü kullanmak için otomatik olarak doldurulur.

  6. Yeni işlev uygulamasının bölgesini seçin.

    Azure'da yeni işlev uygulamasının nasıl oluşturulacağını gösteren ekran görüntüsü - Temel Bilgiler sekmesi

  7. Temel Bilgiler sekmesini tamamladıktan sonra Barındırma sekmesine gidin.

  8. Barındırma sekmesinde Azure İşlevinizin depolanacağı depolama hesabını seçin. Mevcut bir depolama hesabını seçebilir veya yeni bir hesap oluşturabilirsiniz.

  9. İşletim sistemi alanının Windows olarak ayarlandığından emin olun.

  10. Plan türü alanında Tüketim (Sunucusuz) öğesini seçin. Bu plan hakkında daha fazla bilgi için bkz. Azure İşlevleri Tüketim planı barındırma.

    Azure'da yeni işlev uygulamasının nasıl oluşturulacağını gösteren ekran görüntüsü - Barındırma sekmesi

  11. Yeni işlev uygulamasını oluşturmak için Gözden Geçir + Oluştur'u seçin.

İşlev uygulamanızı yapılandırma hakkında daha fazla bilgi edinmek için Azure İşlevleri belgelerindeki İşlev uygulamanızı yönetme bölümüne bakın.

Event Grid tetikleyicisi olarak Azure İşlevi oluşturma

Ardından, belirli bir depolama hesabında blob yeniden doldurulduğunda çalışacak bir Azure İşlevi oluşturun. Visual Studio'da C# ve .NET Core ile bir Azure İşlevi oluşturmak için şu adımları izleyin:

  1. Visual Studio 2019'ı başlatın. Ardından DefaultAzureCredential kullanarak oturum açın ve uygulama kodunuzu Azure'a bağlayın.

  2. Yeni bir Azure İşlevleri projesi oluşturun. Ayrıntılar için İşlev uygulaması projesi oluşturma başlığında açıklanan yönergeleri izleyin.

  3. Yeni Azure İşlevleri uygulaması oluştur adımında aşağıdaki değerleri seçin:

    • Varsayılan olarak, Azure İşlevleri çalışma zamanı Azure İşlevleri v3 (.NET Core) olarak ayarlanır. Microsoft, Azure İşlevleri çalışma zamanının bu sürümünü kullanmanızı önerir.
    • Olası tetikleyiciler listesinden Event Grid Tetikleyicisi'ni seçin. Event Grid tetikleyicisinin Azure İşlevi ile Blob Depolama olayını işlemek için önerilen tetikleyici türü olduğu hakkında daha fazla bilgi için bkz . Event Grid olayları için olay işleyicisi olarak işlev kullanma.
    • Depolama Hesabı ayarı, Azure İşlevinizin depolanacağı yeri gösterir. Mevcut bir depolama hesabını seçebilir veya yeni bir hesap oluşturabilirsiniz.
  4. Visual Studio'da yeni proje oluşturmak için Oluştur'u seçin.

  5. Ardından, işlevi yeniden adlandırma bölümünde açıklandığı gibi sınıfı ve Azure İşlevi'ni yeniden adlandırın. Senaryonuza uygun bir ad seçin.

  6. Visual Studio'da Araçlar | NuGet Paket Yöneticisi | Paket Yöneticisi Konsolu'nu seçin ve ardından konsoldan aşağıdaki paketleri yükleyin:

    Install-Package Azure.Storage.Blobs
    Install-Package Microsoft.ApplicationInsights.WorkerService
    Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights
    
  7. Azure İşlevinizin sınıf dosyasına aşağıdaki using deyimlerini yapıştırın:

    using System;
    using System.IO;
    using System.Text;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.EventGrid.Models;
    using Microsoft.Azure.WebJobs.Extensions.EventGrid;
    using Microsoft.Extensions.Logging;
    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  8. Sınıf dosyasında Run yöntemini bulun. Bu, bir olay gerçekleştiğinde çalışan yöntemdir. Aşağıdaki kodu Run yönteminin gövdesine yapıştırın. Köşeli ayraçlardaki yer tutucu değerleri kendi değerlerinizle değiştirmeyi unutmayın:

    // When either Microsoft.Storage.BlobCreated or Microsoft.Storage.BlobTierChanged
    // event occurs, write the event details to a log blob in the same container
    // as the event subject (the blob for which the event occurred).
    
    // Create a unique name for the log blob.
    string logBlobName = string.Format("function-log-{0}.txt", DateTime.UtcNow.Ticks);
    
    // Get data from the event.
    dynamic data = eventGridEvent.Data;
    string eventBlobUrl = Convert.ToString(data.url);
    string eventApi = Convert.ToString(data.api);
    
    // Build string containing log information.
    StringBuilder eventInfo = new StringBuilder();
    eventInfo.AppendLine(string.Format("{0} operation occurred.", eventApi));
    eventInfo.AppendLine(string.Format("Blob URL: {0}", eventBlobUrl));
    eventInfo.AppendLine($@"Additional event details:
        Id=[{eventGridEvent.Id}]
        EventType=[{eventGridEvent.EventType}]
        EventTime=[{eventGridEvent.EventTime}]
        Subject=[{eventGridEvent.Subject}]
        Topic=[{eventGridEvent.Topic}]");
    
    // If event was BlobCreated and API call was CopyBlob, respond to the event.
    bool copyBlobEventOccurred = (eventGridEvent.EventType == "Microsoft.Storage.BlobCreated") &&
                                 (eventApi == "CopyBlob");
    
    // If event was BlobTierChanged and API call was SetBlobTier, respond to the event.
    bool setTierEventOccurred = (eventGridEvent.EventType == "Microsoft.Storage.BlobTierChanged") &&
                                (eventApi == "SetBlobTier");
    
    // If one of these two events occurred, write event info to a log blob.
    if (copyBlobEventOccurred | setTierEventOccurred)
    {
        // Create log blob in same account and container.
        BlobUriBuilder logBlobUriBuilder = new BlobUriBuilder(new Uri(eventBlobUrl))
        {
            BlobName = logBlobName
        };
    
        TokenCredential credential = new DefaultAzureCredential();
    
        string blobUri = "https://" + accountName + ".blob.core.windows.net/" + logBlobUriBuilder.BlobContainerName + "/" + logBlobName;
    
        BlobClient logBlobClient = new BlobClient(new Uri(blobUri), credential);
    
        byte[] byteArray = Encoding.ASCII.GetBytes(eventInfo.ToString());
    
        try
        {
            // Write the log info to the blob.
            // Overwrite if the blob already exists.
            using (MemoryStream memoryStream = new MemoryStream(byteArray))
            {
                BlobContentInfo blobContentInfo =
                    logBlobClient.Upload(memoryStream, overwrite: true);
            }
        }
        catch (RequestFailedException e)
        {
            Console.WriteLine(e.Message);
            throw;
        }
    }
    

Azure İşlevleri geliştirme hakkında daha fazla bilgi için bkz. Azure İşlevleri geliştirme kılavuzu.

Blob Depolama olayı bir olay işleyicisinde yayımlandığında dahil edilen bilgiler hakkında daha fazla bilgi edinmek için bkz. Event Grid kaynağı olarak Azure Blob Depolama.

Azure İşlevi'ni hata ayıklayıcıda yerel olarak çalıştırma

Azure İşlev kodunuzu yerel olarak test etmek için olayı tetikleyen bir HTTP isteğini el ile göndermeniz gerekir. bu makalenin önkoşul bölümünde açıklananlar gibi bir araç kullanarak isteği gönderebilirsiniz.

Azure İşlevinizin sınıf dosyasının en üstünde, yerel ortamda test için kullanabileceğiniz bir URL uç noktası bulunur. İsteğin bu URL ile gönderilmesi, yerel ortamda olayı tetikler, böylece kodunuzda hata ayıklayabilirsiniz. URL aşağıdaki biçimdedir:

http://localhost:7071/runtime/webhooks/EventGrid?functionName={functionname}

Bu uç noktaya gönderdiğiniz istek, sanal bir istektir. Azure Depolama hesabınızdan veri göndermez veya almaz.

HTTP istek aracınızı ve yönergelerini kullanarak bu uç noktaya istek gönderin. Yer tutucuyu {functionname} işlevinizin adıyla değiştirdiğinden emin olun (örneğin Get http://localhost:7071/runtime/webhooks/EventGrid?functionName=BlobRehydrateEventHandler).

  1. Visual Studio'da, istediğiniz kesme noktalarını kodunuza yerleştirin ve hata ayıklayıcısını çalıştırmak için F5 tuşuna basın.
  2. HTTP istek aracınızda isteği uç noktaya gönderin.

İsteği gönderdiğinizde Event Grid, Azure İşlevinizi çağırır ve normal şekilde hata ayıklayabilirsiniz. Ek bilgi ve örnekler için Azure İşlevleri belgelerinde isteği el ile gönderme bölümüne bakın.

Olayı tetikleyen istek simülasyonu yapılır, ancak olay tetiklendiğinde çalıştırılan Azure İşlevi günlük bilgilerini depolama hesabınızdaki yeni bir bloba yazar. Blobun içeriğini doğrulayabilir ve son değiştirme zamanını aşağıdaki görüntüde gösterildiği gibi Azure portalında görüntüleyebilirsiniz:

Azure portalında günlük blobunun içeriğini gösteren ekran görüntüsü

Azure İşlevini yayımlama

Azure İşlevinizi yerel olarak test ettikten sonra, sonraki adım Azure İşlevini daha önce oluşturduğunuz Azure İşlev Uygulaması'na yayımlamaktır. Event Grid'i depolama hesabında gerçekleşen olayları işlev uç noktasına gönderecek şekilde yapılandırabilmeniz için işlevin yayımlanması gerekir.

İşlevi yayımlamak için şu adımları izleyin:

  1. Çözüm Gezgini Azure İşlevleri projenizi seçip basılı tutun (veya sağ tıklayın) ve Yayımla'yı seçin.

  2. Yayımla penceresinde hedef olarak Azure'ı ve ardından İleri'yi seçin.

  3. Belirli bir hedef olarak Azure İşlev Uygulaması (Windows) öğesini ve ardından İleri'yi seçin.

  4. İşlevler örneği sekmesinde, açılan menüden aboneliğinizi seçin ve ardından kullanılabilir işlev uygulamaları listesinde Azure İşlev Uygulamanızı bulun.

  5. Paket dosyasından çalıştır onay kutusunun seçili olduğundan emin olun.

  6. İşlevi yayımlamaya hazırlanmak için Son'u seçin.

  7. Yayımla sayfasında yapılandırmanın doğru olduğunu doğrulayın. Application Insights'a hizmet bağımlılığının yapılandırılmadığını belirten bir uyarı görürseniz, bu sayfadan yapılandırabilirsiniz.

  8. Azure İşlevi'ni daha önce oluşturduğunuz Azure İşlev Uygulaması'na yayımlamaya başlamak için Yayımla düğmesini seçin.

    Visual Studio'dan Azure İşlevi yayımlama sayfasını gösteren ekran görüntüsü

Azure İşlevinizdeki kodda her değişiklik yaptığınızda, güncelleştirilmiş işlevi Azure'da yayımlamanız gerekir.

Depolama hesabından blob yeniden doldurma olaylarına abone olma

Artık bir olaya yanıt olarak çalıştırabilen bir Azure İşlevi içeren bir işlev uygulamanız var. Sonraki adım, depolama hesabınızdan bir olay aboneliği oluşturmaktır. Olay aboneliği depolama hesabı, depolama hesabınızdaki bir blob üzerindeki işleme yanıt olarak Event Grid aracılığıyla bir olay yayımlayacak şekilde yapılandırılır. Ardından Event Grid, olayı belirttiğiniz olay işleyicisi uç noktasına gönderir. Bu durumda, olay işleyicisi önceki bölümde oluşturduğunuz Azure İşlevi'dir.

Olay aboneliğini oluşturduğunuzda, olay işleyicisine hangi olayların gönderileceğini filtreleyebilirsiniz. Arşiv katmanından bir blob yeniden doldurulduğunda yakalanacak olaylar, Blob KatmanıNı Ayarla işlemine karşılık gelen Microsoft.Storage.BlobTierChanged ve Blob Kopyalama işlemine karşılık gelen Microsoft.Storage.BlobCreated olaylarıdır. Senaryonuza bağlı olarak, bu olaylardan yalnızca birini işlemek isteyebilirsiniz.

Olay aboneliğini oluşturmak için şu adımları izleyin:

  1. Azure portalında, arşiv katmanından yeniden doldurmanız için blobları içeren depolama hesabına gidin.

  2. Sol gezinti bölmesinde Olaylar ayarını seçin.

  3. Olaylar sayfasında Diğer seçenekler'i seçin.

  4. Olay Aboneliği Oluştur'u seçin.

  5. Olay Aboneliği Oluştur sayfasının Olay aboneliği ayrıntıları bölümünde, olay aboneliği için bir ad girin.

  6. Konu ayrıntıları bölümünde sistem konusu için bir ad belirtin. Sistem konusu, Azure Depolama tarafından yayımlanan bir veya daha fazla olayı temsil eder. Sistem konuları hakkında daha fazla bilgi için bkz . Azure Event Grid'de sistem konuları.

  7. Olay Türleri bölümünde Blob Oluşturuldu ve Blob Katmanı Değiştirildi olaylarını seçin. Arşiv katmanından bir blobu nasıl yeniden doldurmayı seçtiğinize bağlı olarak, bu iki olaydan biri tetiklenir.

    Azure portalında blob yeniden doldurma olayları için olay türlerini seçmeyi gösteren ekran görüntüsü

  8. Uç nokta ayrıntıları bölümünde açılan menüden Azure İşlevi'ni seçin.

  9. Önceki bölümde oluşturduğunuz işlevi belirtmek için Uç nokta seçin'i seçin. Azure İşlevi Seç iletişim kutusunda Azure İşleviniz için abonelik, kaynak grubu ve işlev uygulamasını seçin. Son olarak, açılan listeden işlev adını seçin ve Seçimi onayla'yı seçin.

    Event Grid aboneliği için uç nokta olarak Azure İşlevi seçmeyi gösteren ekran görüntüsü

  10. Olay aboneliğini oluşturmak ve olayları Azure İşlevi olay işleyicisine göndermeye başlamak için Oluştur düğmesini seçin.

Olay abonelikleri hakkında daha fazla bilgi edinmek için bkz . Azure Event Grid kavramları.

Azure İşlevi olay işleyicisini test edin

Azure İşlevi'ni test etmek için olay aboneliğini içeren depolama hesabında bir olay tetikleyebilirsiniz. Daha önce oluşturduğunuz olay aboneliği, Microsoft.Storage.BlobCreated ve Microsoft.Storage.BlobTierChanged olarak iki olayı filtrelemiştir. Bu olaylardan biri tetiklendiğinde Azure İşlevinizi tetikler.

Bu makalede gösterilen Azure İşlevi iki senaryoda günlük blobu yazar:

  • Olay Microsoft.Storage.BlobCreated olduğunda ve API işlemi Blobu Kopyala olduğunda.
  • Olay Microsoft.Storage.BlobTierChanged olduğunda ve API işlemi Blob KatmanıNı Ayarla olduğunda.

Bir blobu yeniden doldurma yoluyla işlevi test etmeyi öğrenmek için şu iki yordamdan birine bakın:

Yeniden doldurma işlemi tamamlandıktan sonra günlük blobu, yeniden doldurulduğunuz blobla aynı kapsayıcıya yazılır. Örneğin, bir blobu kopyalama işlemiyle yeniden doldurmanın ardından Azure portalında özgün kaynak blobunun arşiv katmanında kaldığını, tamamen yeniden doldurulan hedef blob'un hedeflenen çevrimiçi katmanda göründüğünü ve Azure İşlevi tarafından oluşturulan günlük blobunun da listede göründüğünü görebilirsiniz.

Arşiv katmanındaki özgün blobu, sık erişim katmanında yeniden doldurulan blobu ve olay işleyicisi tarafından yazılan günlük blobunu gösteren ekran görüntüsü.

Yeniden doldurma önceliği ayarına bağlı olarak blobu yeniden doldurmanın 15 saate kadar sürebileceğini unutmayın. Yeniden doldurma önceliğini Yüksek olarak ayarlarsanız, boyutu 10 GB'tan küçük bloblar için yeniden doldurma işlemi bir saatten kısa sürede tamamlanabilir. Ancak, yüksek öncelikli yeniden doldurma daha yüksek bir maliyete neden olur. Daha fazla bilgi için bkz . Arşiv katmanından blob yeniden doldurmaya genel bakış.

İpucu

Bu nasıl yapılır işleminin amacı bu olayları blob yeniden doldurma bağlamında işlemek olsa da, test amacıyla bir blobu karşıya yüklemeye veya çevrimiçi blobun katmanını değiştirmeye (örneğin, sık erişimliden seyrek erişimliye) yanıt olarak bu olayları gözlemlemek de yararlı olabilir çünkü olay hemen tetiklenir.

Event Grid'de olayları filtreleme hakkında daha fazla bilgi için bkz . Azure Event Grid için olayları filtreleme.

Ayrıca bkz.