Öğretici: Olay aboneliği kullanarak blob kapsayıcılarında Azure İşlevlerini tetikleme

Azure İşlevleri Blob Depolama tetikleyicisinin önceki sürümleri, depolama kapsayıcınızda değişiklik olup olmadığını düzenli olarak denetler. Blob Depolama uzantısının (5.x+) daha yeni sürümleri bunun yerine kapsayıcıda event Grid olay aboneliği kullanır. Bu olay aboneliği, abone olunan kapsayıcıda değişiklikler gerçekleştiğinde işlevinizi anında tetikleyerek gecikme süresini azaltır.

Bu makalede, kapsayıcıya blob eklendiğinde tetiklenen olaylara göre çalışan bir işlevin nasıl oluşturulacağı gösterilmektedir. Yerel geliştirme ve projenizi Azure'a dağıtmadan önce kodunuzu doğrulamak için Visual Studio Code kullanırsınız.

Visual Studio Code için Azure İşlevleri uzantısı şu anda Go projeleri oluşturmadığı için, projeyi oluşturmak için Visual Studio Code terminalindeki Core Tools kullanıyorsunuz.

  • Yeni bir projede olay tabanlı Blob Depolama ile tetiklenen bir işlev oluşturun.
  • Azurite emülatörünü kullanarak Visual Studio Code içinde yerel doğrulama yapın.
  • Azure'da yeni bir depolama hesabında blob depolama kapsayıcısı oluşturun.
  • Flex Consumption planında bir işlev uygulaması oluşturun.
  • Yeni blob kapsayıcısına bir olay aboneliği oluşturun.
  • İşlev kodunuzu Azure'da dağıtın ve doğrulayın.

Bu makale, Azure İşlevleri için Node.js programlama modelinin 4. sürümünü destekler.

Bu makale, Azure İşlevleri için Python programlama modelinin 2. sürümünü destekler.

Bu makale, .NET 8.0'ı destekleyen yalıtılmış çalışan modunda çalışan bir C# uygulaması oluşturur.

Bu makale, şu anda önizlemede olan Azure İşlevleri Go worker’ını kullanır.

İpucu

Bu öğreticide Flex Consumption planında çalışan bir uygulamanın nasıl oluşturulacağı gösterilmektedir. Esnek Tüketim planı yalnızca Blob Depolama tetikleyicisinin olay tabanlı sürümünü destekler.

Önkoşullar

Not

Visual Studio Code için Azure Depolama uzantısı önizleme aşamasındadır.

Blob ile tetiklenen işlev oluşturma

Visual Studio Code kullanarak bir Blob Depolama tetikleyici işlevi oluşturduğunuzda, yeni bir proje de oluşturursunuz. İşlevi, normal yoklamalı kapsayıcıyı kullanmak yerine kaynak olarak bir olay aboneliğini kullanacak şekilde düzenlemeniz gerekir.

  1. Visual Studio Code'da F1 tuşuna basarak komut paletini açın, yazın Azure İşlevleri: Create Function...ve Yeni proje oluştur'u seçin.

  2. Proje çalışma alanınız için bir dizin konumu seçin. Yeni bir klasör oluşturduğunuzdan veya proje çalışma alanı için boş bir klasör seçtiğinizden emin olun.

    Zaten bir çalışma alanının parçası olan bir proje klasörünü seçmeyin.

  3. İstemlerde aşağıdaki bilgileri sağlayın:

İstem Eylem
Dil seçin C# öğesini seçin.
.NET çalışma zamanı seçme .NET 8.0 Isolated LTS öğesini seçin.
Projenizin ilk işlevi için bir şablon seçin Azure Blob Depolama trigger (using Event Grid) öğesini seçin.
İşlev adı belirtin EventGridBlobTrigger girin.
Bir ad alanı sağlayın My.Functions girin.
"local.settings.json" dosyasından ayarı seçin Create new local app setting öğesini seçin.
Aboneliği seçin Gerekirse aboneliğinizi seçin.
Depolama hesabı seçme Yerel depolama için Azurite öykünücüsü kullanın.
Tetikleyicinin izleyeceği depolama hesabınızdaki yol Varsayılan değerini samples-workitemskabul edin.
Projenizi nasıl açmak istediğinizi seçin Open in current window öğesini seçin.
İstem Eylem
Dil seçin Python öğesini seçin.
Python programlama modeli seçme Model V2 seçeneğini belirleyin
Sanal ortam oluşturmak için Python yorumlayıcısını seçme Tercih ettiğiniz Python yorumlayıcıyı seçin. Bir seçenek gösterilmiyorsa Python ikili dosyanızın tam yolunu girin.
Projenizin ilk işlevi için bir şablon seçin Blob trigger öğesini seçin. (Olay tabanlı şablon henüz kullanılamıyor.)
İşlev adı belirtin EventGridBlobTrigger girin.
Tetikleyicinin izleyeceği depolama hesabınızdaki yol Varsayılan değerini samples-workitemskabul edin.
"local.settings.json" dosyasından ayarı seçin Create new local app setting öğesini seçin.
Aboneliği seçin Gerekirse aboneliğinizi seçin.
Depolama hesabı seçme Yerel depolama için Azurite öykünücüsü kullanın.
Projenizi nasıl açmak istediğinizi seçin Open in current window öğesini seçin.
İstem Eylem
Dil seçin Java öğesini seçin.
Java sürümünü seçme İşlevlerinizin Azure’da çalıştığı ve yerel olarak doğruladığınız Java sürümü olarak Java 11 veya Java 8 seçin.
Grup kimliği belirtin com.function öğesini seçin.
Bir artefakt kimliği sağlayın EventGridBlobTrigger öğesini (veya varsayılanı) seçin.
Bir sürüm sağlayın 1.0-SNAPSHOT öğesini seçin.
Paket adı belirtin com.function öğesini seçin.
Uygulama adı belirtin ile EventGridBlobTriggerbaşlayan oluşturulan adı kabul edin.
Java projesi için derleme aracını seçin Maven öğesini seçin.
Projenizi nasıl açmak istediğinizi seçin Open in current window öğesini seçin.

Http ile tetiklenen bir işlev (HttpExample) sizin için oluşturulur. Bu işlevi kullanmazsınız ve bunun yerine yeni bir işlev oluşturmanız gerekir.

İstem Eylem
İşlev projeniz için bir dil seçin TypeScript öğesini seçin.
TypeScript programlama modeli seçme Model V4 öğesini seçin.
Projenizin ilk işlevi için bir şablon seçin Azure Blob Depolama trigger (using Event Grid) öğesini seçin.
İşlev adı belirtin EventGridBlobTrigger girin.
"local.settings.json" dosyasından ayarı seçin Create new local app setting öğesini seçin.
Aboneliği seçin Gerekirse aboneliğinizi seçin.
Depolama hesabı seçme Yerel depolama için Azurite öykünücüsü kullanın.
Tetikleyicinin izleyeceği depolama hesabınızdaki yol Varsayılan değerini samples-workitemskabul edin.
Projenizi nasıl açmak istediğinizi seçin Open in current window öğesini seçin.
İstem Eylem
İşlev projeniz için bir dil seçin JavaScript öğesini seçin.
JavaScript programlama modeli seçme Model V4 öğesini seçin.
Projenizin ilk işlevi için bir şablon seçin Azure Blob Depolama trigger (using Event Grid) öğesini seçin.
İşlev adı belirtin eventGridBlobTrigger girin.
"local.settings.json" dosyasından ayarı seçin Create new local app setting öğesini seçin.
Aboneliği seçin Gerekirse aboneliğinizi seçin.
Depolama hesabı seçme Yerel depolama için Azurite öykünücüsü kullanın.
Tetikleyicinin izleyeceği depolama hesabınızdaki yol Varsayılan değerini samples-workitemskabul edin.
Projenizi nasıl açmak istediğinizi seçin Open in current window öğesini seçin.
İstem Eylem
İşlev projeniz için bir dil seçin PowerShell öğesini seçin.
Projenizin ilk işlevi için bir şablon seçin Azure Blob Depolama trigger (using Event Grid) öğesini seçin.
İşlev adı belirtin EventGridBlobTrigger girin.
"local.settings.json" dosyasından ayarı seçin Create new local app setting öğesini seçin.
Aboneliği seçin Gerekirse aboneliğinizi seçin.
Depolama hesabı seçme Yerel depolama için Azurite öykünücüsü kullanın.
Tetikleyicinin izleyeceği depolama hesabınızdaki yol Varsayılan değerini samples-workitemskabul edin.
Projenizi nasıl açmak istediğinizi seçin Open in current window öğesini seçin.
  1. Visual Studio Code'da boş bir klasör açın ve ardından entegre terminali açın.

  2. Mevcut klasörde bir Go fonksiyon projesi oluşturmak için aşağıdaki komutu çalıştırın:

    func init --worker-runtime go
    
  3. main.go dosyasının içeriğini aşağıdaki kodla değiştirin:

    package main
    
    import (
        "context"
        "fmt"
        "io"
        "log"
    
        "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
        "github.com/azure/azure-functions-golang-worker/sdk"
        _ "github.com/azure/azure-functions-golang-worker/triggers/blob"
        "github.com/azure/azure-functions-golang-worker/worker"
    )
    
    func EventGridBlobTrigger(ctx context.Context, client *blob.Client) error {
        download, err := client.DownloadStream(ctx, nil)
        if err != nil {
            return fmt.Errorf("failed to download blob: %w", err)
        }
        defer download.Body.Close()
    
        content, err := io.ReadAll(download.Body)
        if err != nil {
            return fmt.Errorf("failed to read blob: %w", err)
        }
    
        log.Printf("Go Blob trigger function processed blob, %d bytes", len(content))
        return nil
    }
    
    func main() {
        app := sdk.FunctionApp()
        app.Blob("EventGridBlobTrigger", EventGridBlobTrigger,
            sdk.WithPath("samples-workitems/{name}"),
            sdk.WithConnection("AzureWebJobsStorage"),
            sdk.WithSource("EventGrid"),
        )
        worker.Start(app)
    }
    
  4. Proje bağımlılıklarını güncellemek için aşağıdaki komutu çalıştırın:

    go mod tidy
    

triggers/blob için yapılan yalın içe aktarma, Blob tetikleyici istemci fabrikasını kaydeder. Bu WithSource("EventGrid") seçenek, tetikleyiciyi konteyner anketi yerine etkinlik aboneliği kullanacak şekilde yapılandırıyor.

  1. Komut paletine yazın Azure İşlevleri: Create Function... ve öğesini seçin EventGridBlobTrigger. Bu şablonu görmüyorsanız, önce Şablon filtresini değiştir>Tümü seçin.

  2. İstemlerde aşağıdaki bilgileri sağlayın:

    İstem Eylem
    Paket adı belirtin com.function öğesini seçin.
    İşlev adı belirtin EventGridBlobTrigger girin.
    "local.settings.json" dosyasından ayarı seçin Create new local app setting öğesini seçin.
    Aboneliği seçin Aboneliğinizi seçin.
    Depolama hesabı seçme Yerel depolama için Azurite öykünücüsü kullanın.
    Tetikleyicinin izleyeceği depolama hesabınızdaki yol Varsayılan değerini samples-workitemskabul edin.

Artık Blob Depolama kapsayıcısında olaylar tarafından tetiklenebilen bir işleviniz var.

Tetikleyici kaynağını güncelleştirme

Tetikleyici kaynağını varsayılan Blob tetikleyici kaynağından (kapsayıcı yoklaması) bir olay aboneliği kaynağına geçirmeniz gerekir.

  1. function_app.py proje dosyasını açın. EventGridBlobTrigger işlevine uygulanan blob_trigger dekoratör ile bir tanım görürsünüz.

  2. source = "EventGrid" ekleyerek dekoratörü güncelleştirin. İşleviniz şu şekilde görünmelidir:

    @app.blob_trigger(arg_name="myblob", source="EventGrid", path="samples-workitems",
                               connection="<STORAGE_ACCOUNT>") 
    def EventGridBlobTrigger(myblob: func.InputStream):
    logging.info(f"Python blob trigger function processed blob"
                f"Name: {myblob.name}"
                f"Blob Size: {myblob.length} bytes")
    

    Bu tanımda, source = "EventGrid" blob kapsayıcısına yönelik bir olay aboneliğinin samples-workitems tetikleyiciyi başlatan olayın kaynağı olarak kullanıldığını gösterir.

(İsteğe bağlı) Kodu gözden geçirme

Oluşturulan EventGridBlobTrigger.cs dosyayı açın. Bir işlev için aşağıdakine benzer bir EventGridBlobTrigger tanım görürsünüz:

[Function(nameof(EventGridBlobTriggerCSharp))]
public async Task Run([BlobTrigger("PathValue/{name}", Source = BlobTriggerSource.EventGrid, Connection = "ConnectionValue")] Stream stream, string name)
{
    using var blobStreamReader = new StreamReader(stream);
    var content = await blobStreamReader.ReadToEndAsync();
    _logger.LogInformation("C# Blob Trigger (using Event Grid) processed blob\n Name: {name} \n Data: {content}", name, content);
}

Bu tanımda, Source = BlobTriggerSource.EventGrid blob kapsayıcısına yönelik bir olay aboneliğinin (örnekte PathValue) tetikleyiciyi başlatan olayın kaynağı olduğunu gösterir.

Oluşturulan EventGridBlobTrigger.java dosyayı açın. Bir işlev için aşağıdakine benzer bir EventGridBlobTrigger tanım görürsünüz:

    @FunctionName("EventGridBlobTrigger")
    @StorageAccount("<STORAGE_ACCOUNT>")
    public void run(
        @BlobTrigger(name = "content", source = "EventGrid", path = "samples-workitems/{name}", dataType = "binary") byte[] content,
        @BindingName("name") String name,
        final ExecutionContext context
    ) {
        context.getLogger().info("Java Blob trigger function processed a blob. Name: " + name + "\n  Size: " + content.length + " Bytes");
    }

Bu tanımda, source = EventGrid blob kapsayıcısına yönelik bir olay aboneliğinin samples-workitems tetikleyiciyi başlatan olayın kaynağı olduğunu gösterir.

EventGridBlobTrigger klasöründe function.json dosyasını açın ve type değeri blobTrigger ve source değeri EventGrid olan buna benzer bir bağlama tanımı bulun:

{
    "bindings": [
        {
            "name": "InputBlob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "source": "EventGrid",
            "connection":""
        }
    ]
}

, path blob kapsayıcısının samples-workitems tetikleyiciyi başlatan olayın kaynağı olduğunu gösterir.

Oluşturulan EventGridBlobTrigger.js dosyayı açın. Bir işlev için aşağıdakine benzer bir tanım görürsünüz:

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

Bu tanımda , sourceEventGrid blob kapsayıcısına yönelik bir olay aboneliğinin samples-workitems tetikleyiciyi başlatan olayın kaynağı olduğunu gösterir.

Oluşturulan EventGridBlobTrigger.ts dosyayı açın. Bir işlev için aşağıdakine benzer bir tanım görürsünüz:

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: storageBlobTrigger1,
});

Bu tanımda , sourceEventGrid blob kapsayıcısına yönelik bir olay aboneliğinin samples-workitems tetikleyiciyi başlatan olayın kaynağı olduğunu gösterir.

main.go'yu açın ve kaydı app.Blob gözden geçirin. Bu sdk.WithPath seçenek, izlenen konteyneri tanımlar, sdk.WithConnection depolama bağlantısı ayarları ve sdk.WithSource("EventGrid") tetikleyici kaynak olarak Event Grid olay aboneliğini seçer.

Depolama uzantısını yükseltme

Event Grid tabanlı Blob Depolama tetikleyicisini kullanmak için Azure İşlevleri Depolama uzantısının 5.x veya sonraki bir sürümü gerekir.

Projenizi gerekli uzantı sürümüne yükseltmek için Terminal penceresinde şu dotnet add package komutu çalıştırın:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 
  1. host.json Proje dosyasını açın ve öğesini gözden geçirinextensionBundle.

  2. extensionBundle.version, en az 3.3.0 değilse, extensionBundle öğesini bu sürümle değiştirin:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
    

Yerel depolama öykünmesini hazırlayın

Visual Studio Code, yerel olarak çalışırken Azure Depolama hizmetlerine öykünmek için Azurite kullanır. Yerel geliştirme ve test sırasında Azure Blob Depolama hizmetine öykünmek için Azurite kullanın.

  1. Henüz yapmadıysanız Visual Studio Code için Azurite v3 uzantısını yükleyin.

  2. local.settings.json dosyasında "UseDevelopmentStorage=true" ayarlandığını AzureWebJobsStorage doğrulayın. Bu ayar, Çekirdek Araçlar'a yerel olarak çalışırken gerçek bir depolama hesabı bağlantısı yerine Azurite kullanmasını söyler.

  3. Komut paletini açmak için F1 tuşuna basın, yazın Azurite: Startve Enter tuşuna basın. Bu eylem Azurite Blob Depolama hizmeti öykünücüsünü başlatır.

  4. Etkinlik çubuğunda Azure simgesini seçin, Çalışma Alanı>Ekli Depolama Hesapları>Yerel Emülatör öğelerini genişletin, Blob Kapsayıcıları'na sağ tıklayın, Blob Kapsayıcısı Oluştur... seçeneğini belirleyin, samples-workitems adını girin ve Enter tuşuna basın.

    Visual Studio Code'da yerel öykünmede Blob Kapsayıcısı Oluştur'u seçmeyi gösteren ekran görüntüsü.

  5. Blob Kapsayıcıları>samples-workitems öğesini genişletin ve Dosyaları karşıya yükle... seçeneğini belirleyin.

    Visual Studio Code'da yerel öykünme sırasında samples-workitems kapsayıcısında Dosyaları Yükle seçeneğinin nasıl seçileceğini gösteren ekran görüntüsü.

  6. Yerel olarak öykünmüş kapsayıcıya yüklenecek dosyayı seçin. İşleviniz, işlev kodunuzu doğrulamak ve hatalarını ayıklamak için bu dosyayı daha sonra işler. Metin dosyası, Blob tetikleyicisi şablon koduyla en iyi şekilde çalışabilir.

İşlevi yerel olarak çalıştırma

Öykünmüş depolamadaki bir dosyayla, Event Grid aboneliği tarafından tetiklenen bir olayın benzetimini yapmak için işlevinizi çalıştırabilirsiniz. Tetikleyicinize geçirilen olay bilgileri, yerel kapsayıcıya eklediğiniz dosyaya bağlıdır.

  1. Kesme noktalarını ayarlayın ve yerel hata ayıklama için projenizi başlatmak için F5 tuşuna basın. Azure İşlevleri Temel Araçlar, Terminal pencerenizde çalışıyor olmalıdır.

  2. Azure bölümüne geri dönün, Çalışma Alanı>Yerel Proje>İşlevler öğesini genişletin, işleve sağ tıklayın ve İşlevi Şimdi Yürüt... seçeneğini belirleyin.

    Visual Studio Code'daki yerel proje çalışma alanında bulunan işlevden İşlevi Şimdi Yürüt düğmesini seçmeyi gösteren ekran görüntüsü.

  3. İstek gövdesi iletişim kutusunda, samples-workitems/<TEST_FILE_NAME> yazın ve <TEST_FILE_NAME> yerine yerel depolama öykünücüsüne yüklediğiniz dosyanın adını yazın.

  4. İşlevi çalıştırmak için Enter tuşuna basın. Belirttiğiniz değer, yerel öykünücüdeki blob’unuzun yoludur. Bu dize, bir olay aboneliği kapsayıcıya bir blob eklendiğini bildirmek için işlevinizi çağırdığında yükü simüle eden istek gövdesinde tetikleyicinize iletilir.

  5. Bu işlevin çalıştırılmasının çıktısını gözden geçirin. Çıktıda dosyanın adını ve günlüğe kaydedilen içeriğini görmeniz gerekir. Herhangi bir kesme noktası ayarladıysanız, yürütmeyi sürdürmeniz gerekebilir.

İşlev kodunuzu yerel olarak başarıyla doğruladığınıza göre, projeyi Azure'da yeni bir işlev uygulamasında yayımlamanın zamanı geldi.

Azure Depolama hesabını hazırlama

Azure Depolama'ya yönelik olay abonelikleri için genel amaçlı v2 depolama hesabı gerekir. Bu depolama hesabını oluşturmak için Visual Studio Code için Azure Depolama uzantısını kullanabilirsiniz.

  1. Visual Studio Code'da F1 tuşuna basarak komut paletini açın ve girin Azure Depolama: Create Storage Account.... İstendiğinde bu bilgileri sağlayın:

    İstem Eylem
    Yeni depolama hesabının adını girin Genel olarak benzersiz bir ad sağlayın. Depolama hesabı adlarının uzunluğu yalnızca küçük harf ve sayılarla 3 ile 24 karakter arasında olmalıdır. Daha kolay tanımlama için kaynak grubu ve işlev uygulaması adı için aynı adı kullanın.
    Yeni kaynaklar için bir konum seçin Daha iyi performans için size yakın bir bölge seçin.

    Uzantı, sağladığınız adla genel amaçlı bir v2 depolama hesabı oluşturur. Depolama hesabını içeren kaynak grubu için de aynı ad kullanılır. Event Grid tabanlı Blob Depolama tetikleyicisi genel amaçlı bir v2 depolama hesabı gerektirir.

  2. F1 tuşuna yeniden basın ve komut paletine yazın Azure Depolama: Create Blob Container.... İstendiğinde bu bilgileri sağlayın:

    İstem Eylem
    Kaynak seçin Oluşturduğunuz genel amaçlı v2 depolama hesabını seçin.
    Yeni blob kapsayıcısı için bir ad girin Kod projenizde başvurulan kapsayıcı adı olan samples-workitems değerini girin.

İşlev uygulamanızın çalışması için bir depolama hesabı da gerekir. Kolaylık olması için bu öğreticide blob tetikleyiciniz ve işlev uygulamanız için aynı depolama hesabı kullanılır. Ancak üretimde işlev uygulamanızla ayrı bir depolama hesabı kullanmak isteyebilirsiniz. Daha fazla bilgi için bkz. Azure İşlevleri için depolama hakkında dikkat edilmesi gerekenler.

İşlev uygulaması oluşturma

Esnek Tüketim planında işlev uygulaması oluşturmak için bu adımları kullanın. Uygulamanızı bir Esnek Tüketim planında barındırdığınızda Blob Depolama tetikleyicilerinin olay aboneliklerini kullanması gerekir.

  1. Komut paletine Azure İşlevleri: Azure'da işlev uygulaması oluştur... yazın. (Gelişmiş).

  2. istemleri izleyin ve şu bilgileri sağlayın:

    İstem Seçim
    Yeni işlev uygulaması için genel olarak benzersiz bir ad girin Yeni işlev uygulamanızı tanımlayan genel olarak benzersiz bir ad yazıp Enter tuşuna basın. İşlev uygulaması adına ilişkin geçerli karakterler a-z, 0-9 ve - işaretidir.
    Barındırma planı seçme Sunucusuz barındırma için önerilen barındırma planı olan Flex Consumption'ı seçin.
    Yeni kaynaklar için bir konum seçin Size yakın bir bölgede veya işlevlerinizin erişebilecekleri diğer hizmetlere yakın bir konum seçin.
    Çalışma zamanı yığını seçme Şu anda yerel olarak çalıştırdığınız dil sürümünü seçin.
    Örnek boyutu seçme 512'yi seçin. Örnek boyutu ayarını daha sonra istediğiniz zaman daha büyük bir boyuta değiştirebilirsiniz .
    En fazla örnek sayısını girin Uygulamanızın toplam ölçeğini genişletmeyi sınırlayan varsayılan 100 değerini seçin. 1 ile 1.000 arasında farklı bir değer de seçebilirsiniz.
    Kaynak grubu seçme Yeni kaynak grubu oluştur'u seçin ve varsayılanı kabul edin veya aboneliğinizde benzersiz olan yeni grup için başka bir ad girin.
    Kaynak kimlik doğrulama türünü seçin Uygulamanızın daha az güvenli olan paylaşılan gizli dizileri (bağlantı dizeleri ve anahtarlar) kullanmak yerine Microsoft Entra ID kimlik doğrulamasını kullanarak uzak kaynaklara bağlanması için Yönetilen kimlik'i seçin.
    Kullanıcı tarafından atanan kimliği seçin Kullanıcı tarafından atanan yeni kimlik oluştur'u seçin.
    Yeni kaynaklar için bir konum seçin Oluşturduğunuz depolama hesabıyla aynı bölgeyi seçin. Bir nedenle bu bölge Flex Consumption oyunu tarafından desteklenmiyorsa görüntülenmez. Bu durumda, bunun yerine yakın bir bölge seçin. Daha fazla bilgi için bkz . Şu anda desteklenen bölgeleri görüntüleme.
    Depolama hesabı seçme Oluşturduğunuz depolama hesabının adını seçin.
    Uygulamanız için bir Application Insights kaynağı seçin Yeni Application Insights kaynağı oluştur'u seçin ve isteminde işlevlerinizdeki çalışma zamanı verilerini depolamak için kullanılan örneğin adını belirtin.

    İşlev uygulamanız oluşturulduktan sonra bir bildirim görüntülenir. Oluşturduğunuz Azure kaynakları da dahil olmak üzere oluşturma sonuçlarını görüntülemek için bu bildirimde Çıkışı Görüntüle'yi seçin.

Fonksiyon kodunuzu dağıtın

Önemli

Mevcut bir işlev uygulamasına dağıtılması her zaman Azure'da bu uygulamanın içeriğinin üzerine yazılır.

  1. Komut paletine girin ve Azure İşlevleri: İşlev Uygulamasına Dağıt'ı seçin.

  2. Yeni oluşturduğunuz işlev uygulamasını seçin. Önceki dağıtımların üzerine yazmanız istendiğinde, işlev kodunuzu yeni işlev uygulaması kaynağına dağıtmak için Dağıt'ı seçin.

  3. Dağıtım tamamlandığında, oluşturduğunuz Azure kaynakları da dahil olmak üzere oluşturma ve dağıtım sonuçlarını görüntülemek için Çıkışı Görüntüle'yi seçin. Bildirimi kaçırırsanız, yeniden görmek için sağ alt köşedeki zil simgesini seçin.

    Çıktıyı Görüntüle penceresinin ekran görüntüsü.

Uygulama ayarlarını güncelleştirme

Yayımlama işlemi, gerekli uygulama ayarlarını local.settings.json dosyasından otomatik olarak karşıya yüklemediğinden, işlevinizin Azure'da düzgün çalışması için bu ayarları işlev uygulamanıza yüklemeniz gerekir.

  1. Komut paletine yazın Azure İşlevleri: Download Remote Settings...ve Kaynak seçin isteminde işlev uygulamanızın adını seçin.

  2. AzureWebJobsStorage ayarının zaten mevcut olduğu bildirildiğinde, yerel öykünücü ayarının üzerine Azure’daki gerçek depolama hesabı bağlantı dizesini yazmak için Evet seçeneğini belirleyin.

  3. local.settings.json dosyasında, yerel öykünücü ayarını AzureWebJobsStorage için kullanılan aynı bağlantı dizesiyle değiştirin.

  4. Flex Consumption planında desteklenmeyen girdiyi FUNCTIONS_WORKER_RUNTIME kaldırın.

  5. Komut paletine yazın Azure İşlevleri: Upload Local Settings...ve Kaynak seçin isteminde işlev uygulamanızın adını seçin.

Şimdi hem İşlevler ana bilgisayarı hem de tetikleyici aynı depolama hesabını paylaşıyor.

Fonksiyon uygulamasını oluştur ve dağıt

Flex Consumption planında Go fonksiyon uygulamasını oluşturmak için Azure CLI'yı kullanın. Visual Studio Code için Azure İşlevleri uzantısı şu anda Azure'da Go fonksiyon uygulamaları oluşturmuyor.

  1. Henüz yapmadıysanız Azure'da oturum açın:

    az login
    
  2. Daha önce oluşturduğunuz kaynak grubu ve depolama hesabını kullanarak fonksiyon uygulamasını oluşturun:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4
    

    <RESOURCE_GROUP> Kaynak grubunuzun adı, <APP_NAME> küresel benzersiz bir fonksiyon uygulaması adı, <STORAGE_NAME> depolama hesabınızın adı ve <REGION> bölgesi ile değiştirin.

  3. Go genel önizlemesi sırasında gerekli olan işlev uygulamasında HTTP/2'yi devre dışı bırakın:

    az resource update --resource-group <RESOURCE_GROUP> --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
    
  4. Yerel projenizin kök klasöründen fonksiyon kodunu dağıtın:

    func azure functionapp publish <APP_NAME>
    

Uç nokta URL'sini oluşturma

Olay aboneliği oluşturmak için Event Grid'e Blob Depolama olaylarını raporlamak için belirli uç noktanın URL'sini sağlamanız gerekir. Bu blob uzantısı URL'si şu bölümlerden oluşur:

Bölüm Örnek
Temel işlev uygulaması URL'si https://<FUNCTION_APP_NAME>.azurewebsites.net
Bloba özgü yol /runtime/webhooks/blobs
İşlev sorgusu dizesi ?functionName=Host.Functions.<FUNCTION_NAME>
Blob uzantısı erişim anahtarı &code=<BLOB_EXTENSION_KEY>

Uygulamanız Microsoft Entra Id kimlik doğrulamasını kullanarak depolama hesabına bağlanırken blob uzantısı erişim anahtarı, blob uzantısı web kancanızın yetkisiz erişime karşı korunmasına yardımcı olur. Blob uzantısı erişim anahtarınızı bulmak için:

  1. Visual Studio Code'da Etkinlik çubuğunda Azure simgesini seçin. Kaynaklar'da aboneliğinizi genişletin, İşlev Uygulaması'nı genişletin, oluşturduğunuz işlev uygulamasına sağ tıklayın ve Portalda aç'ı seçin.

  2. Soldaki menüden İşlevler'in altında Uygulama anahtarları'nı seçin.

  3. Sistem anahtarları'nın altında blobs_extension adlı anahtarı seçin ve Value anahtarını kopyalayın.

    Bu değeri yeni uç nokta URL'sinin sorgu dizesine ekleyin.

  4. Aşağıdaki örneği temel alarak Blob Depolama tetikleyicisi için yeni bir uç nokta URL'si oluşturun:

    https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.EventGridBlobTrigger&code=<BLOB_EXTENSION_KEY>
    

    Bu örnekte, <FUNCTION_APP_NAME> öğesini işlev uygulamanızın adıyla, <BLOB_EXTENSION_KEY> öğesini ise portaldan aldığınız değerle değiştirin. İşleviniz için farklı bir ad kullandıysanız, EventGridBlobTrigger ifadesini o işlevin adıyla değiştirin.

Artık olay aboneliği oluşturmak için bu uç nokta URL'sini kullanabilirsiniz.

Olay aboneliğini oluşturma

Azure Event Grid tarafından desteklenen bir olay aboneliği, abone olunan blob kapsayıcısında yapılan değişikliklere göre olayları tetikler. Bu olay daha sonra işlevinizin blob uzantısı uç noktasına gönderilir. Olay aboneliği oluşturduktan sonra uç nokta URL'sini güncelleştiremezsiniz.

  1. Visual Studio Code'da Etkinlik çubuğunda Azure simgesini seçin. Kaynaklar'da aboneliğinizi genişletin, Depolama hesapları'nı genişletin, daha önce oluşturduğunuz depolama hesabına sağ tıklayın ve Portalda aç'ı seçin.

  2. Azure portalında oturum açın ve depolama hesabınızın Kaynak grubunu not edin. İşiniz bittiğinde kaynakları temizlemeyi kolaylaştırmak için aynı gruptaki diğer kaynaklarınızı oluşturun.

  3. Soldaki menüden Olaylar seçeneğini belirleyin.

    Depolama hesabı ekleme olayı

  4. Olaylar penceresinde + Olay Aboneliği düğmesini seçin ve aşağıdaki tablodan Temel sekmesine değerler sağlayın:

    Ayar Önerilen değer Açıklama
    Adı myBlobEventSub Olay aboneliğini tanımlayan ad. Olay aboneliğini hızlı bir şekilde bulmak için adı kullanın.
    Olay Şeması Event Grid Şeması Olaylar için varsayılan şemayı kullanın.
    Sistem Konu Adı samples-workitems-blobs Kapsayıcıyı temsil eden konu adı. Konu başlığı ilk abonelikle oluşturulur ve bunu gelecekteki olay abonelikleri için kullanırsınız.
    Olay Türlerine Göre Filtrele Blob Oluşturuldu
    Uç Nokta Türü Webhook Blob depolama tetikleyicisi bir web kancası uç noktası kullanır.
    Uç nokta Azure tabanlı URL uç noktanız Oluşturduğunuz ve anahtar değerini içeren URL uç noktasını kullanın.
  5. Uç nokta URL'sini doğrulamak için Seçimi onayla'yı seçin.

  6. Filtreler sekmesini seçin ve istemlere aşağıdaki bilgileri sağlayın:

    Ayar Önerilen değer Açıklama
    Konu filtrelemeyi etkinleştirme Etkinleştirildi İşlevi hangi blobların tetikleyebileceğine göre filtrelemeyi etkinleştirir.
    Konu şununla başlar /blobServices/default/containers/<CONTAINER_NAME>/blobs/<BLOB_PREFIX> ve <CONTAINER_NAME değerlerini seçtiğiniz değerlerle değiştirin<BLOB_PREFIX>. Bu ayar, yalnızca BLOB_PREFIX ile başlayan ve CONTAINER_NAME kapsayıcısında bulunan bloblar için aboneliği tetikler.
    Konu Şununla Biter: .txt İşlevin yalnızca ile .txtbiten bloblar tarafından tetiklendiğinden emin olur.

    Belirli blob’lara filtre uygulama hakkında daha fazla bilgi için bkz. Azure Event Hubs için Olay Filtreleme.

  7. Olay aboneliğini oluşturmak için Oluştur'u seçin.

Kapsayıcıya dosya yükleme

Visual Studio Code kullanarak bilgisayarınızdan blob depolama kapsayıcınıza dosya yükleyebilirsiniz.

  1. Visual Studio Code'da F1 tuşuna basarak komut paletini açın ve yazın Azure Depolama: Upload Files....

  2. Aç iletişim kutusunda, tercihen bir metin dosyası olan bir dosya seçin ve Karşıya Yükle'yi seçin.

  3. İstendiğinde aşağıdaki bilgileri sağlayın:

    Ayar Önerilen değer Açıklama
    Bu karşıya yüklemenin hedef dizinini girin varsayılan Varsayılan değer olan kapsayıcı kökünü / kabul edin.
    Kaynak seçin Depolama hesabı adı Önceki adımda oluşturduğunuz depolama hesabının adını seçin.
    Bir kaynak türü seçin Blob Konteynerleri Bir blob kapsayıcısına yükleme yapıyorsunuz.
    Blob kapsayıcısını seçin samples-workitems Bu değer, önceki adımda oluşturduğunuz kapsayıcının adıdır.

Karşıya yüklenecek dosyayı bulmak için yerel dosya sisteminize göz atın, ardından dosyayı yüklemek için Karşıya Yükle düğmesini seçin.

Azure'da işlevi doğrulama

Samples-workitems kapsayıcısına bir dosya yüklediğinizde işlev tetikler. Azure portalında aşağıdaki öğeleri denetleyerek işlevi doğrulayabilirsiniz:

  1. Depolama hesabınızda Olaylar sayfasına gidin, Olay Abonelikleri'ni seçin ve bir olayın teslim edilmiş olduğunu görmeniz gerekir. Olayın grafikte gösterilmesi beş dakikaya kadar gecikme olabilir.

  2. Portaldaki işlev uygulaması sayfanıza dönün, İşlevler altında işlevinizi bulun ve Çağrılar ve daha fazlasını seçin. İşlevinizin başarılı şekilde yürütülmesi sonucunda yazılan izleri görmelisiniz.

Kaynakları temizleme

Bir sonraki adıma devam edip işlevinize bir Azure Depolama kuyruğu bağlaması eklediğinizde, daha önce yaptıklarınızı derlemek için tüm kaynaklarınızı yerinde tutmanız gerekir.

Aksi takdirde, daha fazla maliyet oluşmasını önlemek için işlev uygulamasını ve ilgili kaynaklarını silmek için aşağıdaki adımları kullanabilirsiniz.

  1. Visual Studio Code'da F1 tuşuna basarak komut paletini açın. Komut paletinde Azure: Open in portal öğesini arayın ve seçin.

  2. İşlev uygulamanızı seçin ve Enter tuşuna basın. İşlev uygulaması sayfası Azure portalında açılır.

  3. Genel Bakış sekmesinde Kaynak grubunun yanındaki adlandırılmış bağlantıyı seçin.

    İşlev uygulaması sayfasından silinecek kaynak grubunu seçme işleminin ekran görüntüsü.

  4. Kaynak grubu sayfasında, dahil edilen kaynakların listesini gözden geçirin ve bunların silmek istediğiniz kaynaklar olduğunu doğrulayın.

  5. Kaynak grubunu sil’i seçin ve yönergeleri izleyin.

    Silme işlemi birkaç dakika sürebilir. İşlem tamamlandığında, birkaç saniye boyunca bir bildirim görüntülenir. Bildirimi görüntülemek için sayfanın üst kısmındaki zil simgesini de seçebilirsiniz.

İşlev maliyetleri hakkında daha fazla bilgi için bkz . Tüketim planı maliyetlerini tahmin etme.

Sonraki adımlar