Azure Functions için Azure Blob storage tetikleyicisi

yeni veya güncelleştirilmiş bir blob algılandığında Blob storage tetikleyicisi bir işlev başlatır. Blob içeriği işlevine olarak sağlanır.

İpucu

İşlev kodunuzu storage kapsayıcıdaki bloblarda yapılan değişikliklere göre yürütmenin çeşitli yolları vardır. Blob storage tetikleyicisini kullanmayı seçerseniz iki uygulama sunulur: yoklama tabanlı bir tane (bu makalede başvurulmaktadır) ve olay tabanlı bir uygulama. Diğerinden daha düşük gecikme süresine sahip olduğundan olay tabanlı uygulamayı kullanmanız önerilir. Ayrıca Flex Consumption planı yalnızca olay tabanlı Blob storage tetikleyicisini destekler.

Blob storage tetikleyicisinin iki uygulaması ve diğer tetikleyici seçenekleri arasındaki farklar hakkında ayrıntılar için bkz. Bloblarla çalışma.

Kurulum ve yapılandırma ayrıntıları hakkında bilgi için bkz. overview.

Önemli

Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure Functions Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.

Azure Functions Python için iki programlama modelini destekler. Bağlamalarınızı tanımlama şekliniz seçtiğiniz programlama modeline bağlıdır.

Python v2 programlama modeli, doğrudan Python işlev kodunuzda dekoratörleri kullanarak bağlamaları tanımlamanıza olanak tanır. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.

Bu makale her iki programlama modelini de destekler.

Örnek

C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:

  • Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve LTS dışı sürümler .NET ve .NET Framework üzerinde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir. Yalıtılmış çalışan işlemi işlevleri için uzantılar Microsoft.Azure.Functions.Worker.Extensions.* ad alanlarını kullanır.
  • İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi. Bu modelin bir varyasyonunda, İşlevler öncelikle C# portalı düzenleme için desteklenen C# betiği kullanılarak çalıştırılabilir. İşlem içi işlevlerin uzantıları Microsoft.Azure.WebJobs.Extensions.* ad alanlarını kullanır.

Önemli

Support, işlem içi model için 10 Kasım 2026 tarihinde sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline kesinlikle öneririz.

Aşağıdaki örnek, yalıtılmış bir çalışan işleminde çalışan ve hem blob girişi hem de blob çıkış blob bağlamaları ile blob tetikleyicisi kullanan bir C# işlevidir . İşlev, test-samples-trigger kapsayıcısında bir blob oluşturularak tetikleniyor. Test-samples-input kapsayıcısından bir metin dosyası okur ve tetiklenen dosyanın adına göre çıkış kapsayıcısında yeni bir metin dosyası oluşturur.

public static class BlobFunction
{
    [Function(nameof(BlobFunction))]
    [BlobOutput("test-samples-output/{name}-output.txt")]
    public static string Run(
        [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
        [BlobInput("test-samples-input/sample1.txt")] string myBlob,
        FunctionContext context)
    {
        var logger = context.GetLogger("BlobFunction");
        logger.LogInformation("Triggered Item = {myTriggerItem}", myTriggerItem);
        logger.LogInformation("Input Item = {myBlob}", myBlob);

        // Blob Output
        return "blob-output content";
    }
}

Bu işlev, kapsayıcıya bir blob eklendiğinde veya güncelleştirildiğinde myblob günlük yazmak için bayt dizisi kullanır.

Yoklama tabanlı:

Aşağıdaki örnek varsayılan yoklama tetikleyicisini kullanır:

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

Aşağıdaki örnek bir Event Grid tetikleyicisi kullanır:

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               source = "EventGrid",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

Bu SDK türleri örneği blobun özelliklerini access için BlobClient kullanır.

@FunctionName("processBlob")
public void run(
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage") BlobClient blob,
        @BindingName("name") String file,
        ExecutionContext ctx)
{
    ctx.getLogger().info("Size = " + blob.getProperties().getBlobSize());
}

Bu SDK türleri örneği işlevi tetikleyen kapsayıcıdaki bloblar hakkında bilgi access için BlobContainerClient kullanır.

@FunctionName("containerOps")
public void run(
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage") BlobContainerClient container,
        ExecutionContext ctx)
{
    container.listBlobs()
            .forEach(b -> ctx.getLogger().info(b.getName()));
}

Bu SDK türü örneği , yürütmeyi tetikleyen blob hakkındaki giriş bağlamasından bilgi almak için kullanır BlobClient .

@FunctionName("checkAgainstInputBlob")
public void run(
        @BlobInput(
                name = "inputBlob",
                path = "inputContainer/input.txt") BlobClient inputBlob,
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage",
                dataType = "string") String triggerBlob,
        ExecutionContext ctx)
{
    ctx.getLogger().info("Size = " + inputBlob.getProperties().getBlobSize());
}

Bu örnekte BlobClient'ın hem Storage Blob tetikleyicisinden hem de HTTP tetikleyicisi üzerindeki giriş bağlamasından nasıl alınacakları gösterilmektedir:

import "@azure/functions-extensions-blob"; // This is the mandatory first import for SDK binding
import { StorageBlobClient } from "@azure/functions-extensions-blob";
import { app, InvocationContext } from "@azure/functions";

export async function storageBlobTrigger(
  blobStorageClient: StorageBlobClient, // SDK binding provides this client
  context: InvocationContext
): Promise<void> {
  context.log(`Blob trigger processing: ${context.triggerMetadata.name}`);

  // Access to full SDK capabilities
  const blobProperties = await blobStorageClient.blobClient.getProperties();
  context.log(`Blob size: ${blobProperties.contentLength}`);

  // Download blob content
  const downloadResponse = await blobStorageClient.blobClient.download();
  context.log(`Content: ${downloadResponse}`);
}

// Register the function
app.storageBlob("storageBlobTrigger", {
  path: "snippets/{name}",
  connection: "AzureWebJobsStorage",
  sdkBinding: true, // Enable SDK binding
  handler: storageBlobTrigger,
});

Bu örnekte, HTTP tetikleyicisi kullanarak hem Storage Blob giriş bağlamasından ContainerClient alma işlemi gösterilmektedir:

import "@azure/functions-extensions-blob"; // This is the mandatory first import for SDK binding
import { StorageBlobClient } from "@azure/functions-extensions-blob";
import {
  app,
  HttpRequest,
  HttpResponseInit,
  input,
  InvocationContext,
} from "@azure/functions";

const blobInput = input.storageBlob({
  path: "snippets",
  connection: "AzureWebJobsStorage",
  sdkBinding: true,
});

export async function listBlobs(
  request: HttpRequest,
  context: InvocationContext
): Promise<HttpResponseInit> {
  // Get input binding for a specific container
  const storageBlobClient = context.extraInputs.get(
    blobInput
  ) as StorageBlobClient;

  // List all blobs in the container
  const blobs = [];
  for await (const blob of storageBlobClient.containerClient.listBlobsFlat()) {
    blobs.push(blob.name);
  }

  return { jsonBody: { blobs } };
}

app.http("listBlobs", {
  methods: ["GET"],
  authLevel: "function",
  extraInputs: [blobInput],
  handler: listBlobs,
});

Aşağıdaki örnekte bir blob tetikleyici TypeScript kodu gösterilmektedir. İşlev, kapsayıcıya bir blob eklendiğinde veya güncelleştirildiğinde samples-workitems bir günlük yazar.

{name} blob tetikleyici yolundaki samples-workitems/{name} dizesi, tetikleyici blobun dosya adını access için işlev kodunda kullanabileceğiniz bir binding ifadesi oluşturur. Daha fazla bilgi için bu makalenin devamında yer alan Blob adı desenleri bölümüne bakın.

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',
    handler: storageBlobTrigger1,
});

Aşağıdaki örnekte bir blob tetikleyicisi JavaScript kodu gösterilmektedir. İşlev, kapsayıcıya bir blob eklendiğinde veya güncelleştirildiğinde samples-workitems bir günlük yazar.

{name} blob tetikleyici yolundaki samples-workitems/{name} dizesi, tetikleyici blobun dosya adını access için işlev kodunda kullanabileceğiniz bir binding ifadesi oluşturur. Daha fazla bilgi için bu makalenin devamında yer alan Blob adı desenleri bölümüne bakın.

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

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

Aşağıdaki örnekte, source blob storage kapsayıcısına dosya eklendiğinde çalışan bir işlevin nasıl oluşturulacağı gösterilmektedir.

İşlev yapılandırma dosyası (function.json) ile bir typeblobTrigger bağlama içerir ve direction olarak inayarlanır.

{
  "bindings": [
    {
      "name": "InputBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "source/{name}",
      "connection": "MyStorageAccountConnectionString"
    }
  ]
}

Run.ps1 dosyasının ilişkili kodu aşağıdadır.

param([byte[]] $InputBlob, $TriggerMetadata)

Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"

Bu örnek, Blob storage tetikleyicisi tarafından sağlanan temel BlobClient nesnesini doğrudan access için SDK türlerini kullanır:

import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)
@app.blob_trigger(
    arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_trigger(client: blob.BlobClient):
    logging.info(
        f"Python blob trigger function processed blob \n"
        f"Properties: {client.get_blob_properties()}\n"
        f"Blob content head: {client.download_blob().read(size=1)}"
    )

Diğer SDK türlerini kullanma örnekleri için ContainerClient ve StorageStreamDownloader örneklerine bakın. İşlev uygulamanıza SDK türü bağlamaları ekleme hakkında adım adım öğretici için blob örneği için Python SDK Bağlamaları'nı izleyin.

Desteklenen diğer SDK türü bağlamaları da dahil olmak üzere daha fazla bilgi edinmek için bkz. SDK türü bağlamaları.

Bu örnek, gelen blob tetikleyicisinden blob adını ve boyutunu günlüğe kaydeder.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob", 
                  path="samples-workitems/{name}",
                  connection="MyStorageAccountAppSetting")
def test_function(myblob: func.InputStream):
   logging.info(f"Python blob trigger function processed blob \n"
                f"Name: {myblob.name}\n"
                f"Blob Size: {myblob.length} bytes")

Özellikler

hem in-process hem de isolated worker process C# kitaplıkları işlevi tanımlamak için BlobAttribute özniteliğini kullanır. Bunun yerine C# betiği, C# betik kılavuzunda açıklandığı gibi bir function.json yapılandırma dosyası kullanır.

Özniteliğin oluşturucu aşağıdaki parametreleri alır:

Parametre Açıklama
BlobPath Blob yolu.
Bağlantı Azure Blob'lara nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar.
Access Okuyup okumayacağınızı veya yazıp yazmayacağınızı gösterir.
Kaynak Tetikleme olayının kaynağını ayarlar. Daha düşük gecikme süresi sağlayan BlobTriggerSource.EventGrid için kullanın. Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir BlobTriggerSource.LogsAndContainerScan.

Yöntem BlobTrigger imzasında bir öznitelik aşağıdadır:

[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
    [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
    [BlobInput("test-samples-input/sample1.txt")] string myBlob,
    FunctionContext context)

Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasınaValues ekleyin.

Dekoratörler

Yalnızca Python v2 programlama modeli için geçerlidir.

Dekoratörler kullanılarak tanımlanan Python v2 işlevleri için blob_trigger dekoratördeki aşağıdaki özellikler Blob Storage tetikleyicisini tanımlar:

Özellik Açıklama
arg_name İşlev imzasında parametre adını bildirir. İşlev tetiklendiğinde, bu parametrenin değeri kuyruk iletisinin içeriğine sahiptir.
path İzlenecek container. Blob adı deseni olabilir.
connection storage hesabı connection string.
source Tetikleme olayının kaynağını ayarlar. Daha düşük gecikme süresi sağlayan EventGrid için kullanın. Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan.

function.json kullanılarak tanımlanan Python işlevleri için Yapılandırma bölümüne bakın.

Ek Açıklamalar

@BlobTrigger özniteliği, işlevi tetikleyen bloba access sağlamak için kullanılır. Ayrıntılar için tetikleyici örneğine bakın. source Tetikleyici olayının kaynağını ayarlamak için özelliğini kullanın. Daha düşük gecikme süresi sağlayan EventGrid için kullanın. Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan. |

Yapılandırma

Yalnızca Python v1 programlama modeli için geçerlidir.

Aşağıdaki tabloda, yöntemine geçirilen options nesnede app.storageBlob() ayarlayabileceğiniz özellikler açıklanmaktadır.

Özellik Açıklama
yol İzlenecek container. Blob adı deseni olabilir.
bağlantı Azure Blob'lara nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar.
kaynak Tetikleme olayının kaynağını ayarlar. Daha düşük gecikme süresi sağlayan EventGrid için kullanın. Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan.

Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.

function.json özelliği Açıklama
türü olarak ayarlanmalıdır blobTrigger. Bu özellik, tetikleyiciyi Azure portal oluşturduğunuzda otomatik olarak ayarlanır.
yön olarak ayarlanmalıdır in. Bu özellik, tetikleyiciyi Azure portal oluşturduğunuzda otomatik olarak ayarlanır. Kullanım bölümünde özel durumlar not edilir.
ad İşlev kodundaki blobu temsil eden değişkenin adı.
yol İzlenecek container. Blob adı deseni olabilir.
bağlantı Azure Blob'lara nasıl bağlanıldığını belirten bir uygulama ayarının veya ayar koleksiyonunun adı. Bkz. Bağlantılar.
kaynak Tetikleme olayının kaynağını ayarlar. Daha düşük gecikme süresi sağlayan EventGrid için kullanın. Varsayılan değer, kapsayıcıdaki değişiklikleri algılamak için standart yoklama mekanizmasını kullanan değeridir LogsAndContainerScan.

Tam örnekler için Örnek bölümüne bakın.

Meta veri

Blob tetikleyicisi çeşitli meta veri özellikleri sağlar. Bu özellikler, diğer bağlamalardaki bağlama ifadelerinin bir parçası olarak veya kodunuzdaki parametreler olarak kullanılabilir. Bu değerler CloudBlob türüyle aynı semantiklere sahiptir.

Özellik Türü Açıklama
BlobTrigger string Tetikleyen blob yolu.
Uri System.Uri Birincil konum için blob URI'sini.
Properties BlobProperties Blob'un sistem özellikleri.
Metadata IDictionary<string,string> Blob için kullanıcı tanımlı meta veriler.

Aşağıdaki örnek, kapsayıcı dahil olmak üzere tetikleyen blob yolunu günlüğe kaydeder:

public static void Run(string myBlob, string blobTrigger, ILogger log)
{
    log.LogInformation($"Full blob path: {blobTrigger}");
} 

Meta veri

Blob tetikleyicisi çeşitli meta veri özellikleri sağlar. Bu özellikler, diğer bağlamalardaki bağlama ifadelerinin bir parçası olarak veya kodunuzdaki parametreler olarak kullanılabilir.

Özellik Açıklama
blobTrigger Tetikleyen blob yolu.
uri Birincil konum için blob URI'sini.
properties Blob'un sistem özellikleri.
metadata Blob için kullanıcı tanımlı meta veriler.

Meta veriler, aşağıdaki örnekte gösterildiği gibi sağlanan triggerMetadata nesnenin özelliğinden context alınabilir ve kapsayıcı da dahil olmak üzere tetikleyici blobun (blobTrigger yolunu günlüğe kaydeder:

context.log(`Full blob path: ${context.triggerMetadata.blobTrigger}`);

Meta veri

Meta veriler parametresi aracılığıyla $TriggerMetadata kullanılabilir.

Kullanım

Blob tetikleyicisi tarafından desteklenen bağlama türleri, uzantı paketi sürümüne ve işlev uygulamanızda kullanılan C# modalitesine bağlıdır.

Blob tetikleyicisi aşağıdaki türlere bağlanabilir:

Türü Açıklama
string Dize olarak blob içeriği. Blob içeriği basit metin olduğunda kullanın.
byte[] Blob içeriğinin baytları.
JSON serileştirilebilir türler Bir blob JSON verileri içerdiğinde İşlevler, JSON verilerini seri durumdan çıkararak düz eski bir CLR nesnesi (POCO) türüne dönüştürmeye çalışır.
Akış1 Blob içeriğinin giriş akışı.
BlobClient1,
BlockBlobClient1,
PageBlobClient1,
AppendBlobClient1,
BlobBaseClient1
Bloba bağlı bir istemci. Bu tür kümesi blobu işlemek için en fazla denetimi sunar ve bağlantı yeterli izne sahipse bloba geri yazmak için kullanılabilir.

1 Bu türleri kullanmak için Microsoft'a başvurmanız gerekir. Azure. Functions.Worker.Extensions. Storage. SDK türü bağlamaları için bloblar 6.0.0 veya üzeri ve koşal bağımlılıkları.

stringöğesine bağlama veya Byte[] yalnızca blob boyutu küçük olduğunda önerilir. Blob içeriğinin tamamı belleğe yüklendiğinden bu önerilir. Çoğu blob için veya StreamBlobClient türünü kullanın. Daha fazla bilgi için bkz. Güvenlik ve bellek kullanımı.

Storage SDK türlerinden birine bağlanmaya çalışırken bir hata iletisi alırsanız, ye doğru Storage SDK sürümü başvurunuz olduğundan emin olun.

Kullanılacak storage hesabını belirtmek için StorageAccountAttribute da kullanabilirsiniz. Kitaplıktaki diğer işlevlerden farklı bir storage hesabı kullanmanız gerektiğinde bunu yapabilirsiniz. Oluşturucu, storage connection string içeren bir uygulama ayarının adını alır. Özniteliği parametre, yöntem veya sınıf düzeyinde uygulanabilir. Aşağıdaki örnekte sınıf düzeyi ve yöntem düzeyi gösterilmektedir:

[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
    [FunctionName("BlobTrigger")]
    [StorageAccount("FunctionLevelStorageAppSetting")]
    public static void Run( //...
{
    ....
}

Kullanılacak storage hesabı aşağıdaki sırayla belirlenir:

  • Özniteliğin BlobTriggerConnection özelliği.
  • özniteliğiyle StorageAccount aynı parametreye uygulandı BlobTrigger .
  • StorageAccount İşleve uygulanan öznitelik.
  • StorageAccount sınıfına uygulanan öznitelik.
  • AzureWebJobsStorage uygulama ayarında tanımlanan işlev uygulaması için varsayılan storage hesabı.

Uyarı

SDK türlerine bağlama desteği şu anda önizleme aşamasındadır ve Azure Blob Storage SDK ile sınırlıdır. Daha fazla bilgi için Java başvuru makalesindeki SDK türleri bölümüne bakın.

blob verilerini işlevinizin ilk bağımsız değişkeni olarak Access.

blob verilerini function.json dosyasında bağlamanın ad parametresiyle belirlenen adla eşleşen bir parametre aracılığıyla Access.

blob verilerini InputStream olarak yazılan parametre aracılığıyla Access. Ayrıntılar için tetikleyici örneğine bakın.

İşlevler, Azure Blob storage için Python SDK türü bağlamalarını da destekler ve bu da aşağıdaki temel SDK türlerini kullanarak blob verileriyle çalışmanıza olanak tanır:

Uyarı

Yalnızca zaman uyumlu SDK türleri desteklenir.

Önemli

Python için SDK türleri desteği genel olarak kullanılabilir ve yalnızca Python v2 programlama modeli için desteklenir. Daha fazla bilgi için bkz . Python'da SDK türleri.

Bağlantılar

connection özelliği, uygulamanın Azure Bloblara nasıl bağlanması gerektiğini belirten bir ortam yapılandırması başvurusudur. Şunları belirtebilir:

  • connection string
  • Birden çok uygulama ayarı için paylaşılan ön ekin adı ve birlikte kimlik tabanlı bağlantı tanımlama.

Yapılandırılan değer hem tek bir ayar için tam eşleşme hem de diğer ayarlar için bir ön ek eşleşmesiyse, tam eşleşme kullanılır.

Bağlantı dizesi

bir connection string almak için >Storage hesabı access anahtarları'da gösterilen adımları izleyin. connection string Blob storage hesabı değil genel amaçlı bir storage hesabı için olmalıdır.

Bu connection string, bağlama yapılandırmasının connection özelliği tarafından belirtilen değerle eşleşen bir adla bir uygulama ayarında depolanmalıdır.

Uygulama ayarı adı "AzureWebJobs" ile başlıyorsa, adın yalnızca kalanını burada belirtebilirsiniz. Örneğin, "MyStorage" olarak ayarlarsanız connection , İşlevler çalışma zamanı "AzureWebJobsMyStorage" adlı bir uygulama ayarı arar. connection boş bırakırsanız, İşlevler çalışma zamanı AzureWebJobsStorage adlı uygulama ayarında varsayılan Storage connection string kullanır.

Kimlik tabanlı bağlantılar

Uzantının version 5.x veya üzerini kullanıyorsanız (bundle 3.x veya üzeri .NET olmayan dil yığınları için), gizli diziyle connection string kullanmak yerine, uygulamanın Microsoft Entra identity kullanmasını sağlayabilirsiniz. Kimlik kullanmak için, tetikleyici ve bağlama yapılandırmasındaki özelliğiyle connection eşleyen ortak bir ön ek altında ayarları tanımlarsınız.

connection değerini "AzureWebJobsStorage" olarak ayarıyorsanız bkz. Identity storage barındırmak için bağlanma. Diğer tüm bağlantılar için uzantı aşağıdaki özellikleri gerektirir:

Özellik Ortam değişkeni şablonu Açıklama Örnek değer
Blob Hizmeti URI'si <CONNECTION_NAME_PREFIX>__serviceUri 1 HTTPS şemasını kullanarak bağlandığınız blob hizmetinin veri düzlemi URI'si. <https://storage_account_name.blob.core.windows.net>

1<CONNECTION_NAME_PREFIX>__blobServiceUri diğer ad olarak kullanılabilir. Bağlantı yapılandırması bir blob tetikleyicisi tarafından kullanılacaksa, blobServiceUri öğesinin de eşlik queueServiceUrietmesi gerekir. Aşağıya bakın.

Genel serviceUri bağlantı yapılandırması bloblar, kuyruklar ve/veya tablolar arasında kullanılacaksa form kullanılamaz. URI yalnızca blob hizmetini belirleyebilir. Alternatif olarak, her hizmet için özel olarak bir URI sağlayarak tek bir bağlantının kullanılmasını sağlayabilirsiniz. Her iki sürüm de sağlanırsa, çok hizmetli form kullanılır. Bağlantıyı birden çok hizmet için yapılandırmak için yerine <CONNECTION_NAME_PREFIX>__serviceUrişunu ayarlayın:

Özellik Ortam değişkeni şablonu Açıklama Örnek değer
Blob Hizmeti URI'si <CONNECTION_NAME_PREFIX>__blobServiceUri HTTPS şemasını kullanarak bağlandığınız blob hizmetinin veri düzlemi URI'si. <https://storage_account_name.blob.core.windows.net>
Kuyruk Hizmeti URI'si (blob tetikleyicileriiçin gereklidir 2) <CONNECTION_NAME_PREFIX>__queueServiceUri HTTPS şemasını kullanarak bir kuyruk hizmetinin veri düzlemi URI'si. Bu değer yalnızca blob tetikleyicileri için gereklidir. <https://storage_account_name.queue.core.windows.net>

2 Blob tetikleyicisi, bir kuyruğa poison blobları yazarak birden çok yeniden denemede hatayı işler. Formda serviceUri bağlantı AzureWebJobsStorage kullanılır. Ancak, belirtilirken blobServiceUriile bir kuyruk hizmeti URI'si de sağlanmalıdır queueServiceUri. Blob hizmetiyle aynı storage hesabındaki hizmeti kullanmanız önerilir. Ayrıca, Storage Kuyruk Verileri Katkıda Bulunanı gibi bir rol atayarak tetikleyicinin yapılandırılan kuyruk hizmetinde iletileri okuyabildiğinden ve yazadığından emin olmanız gerekir.

Bağlantıyı özelleştirmek için diğer özellikler ayarlanabilir. Bkz. Kimlik tabanlı bağlantılar için ortak özellikler.

Kullanıcı tarafından atanan yönetilen kimlik

Kullanıcı tarafından atanan yönetilen kimliği kullanmak için hizmet URI'sine ek olarak ve clientId özelliklerini ekleyincredential:

Özellik Ortam değişkeni şablonu Açıklama Örnek değer
Blob Hizmeti URI'si <CONNECTION_NAME_PREFIX>__blobServiceUri Blob hizmetinin veri düzlemi URI'si. https://mystorageaccount.blob.core.windows.net
Kuyruk Hizmeti URI'si <CONNECTION_NAME_PREFIX>__queueServiceUri Kuyruk hizmetinin veri düzlemi URI'si (blob tetikleyicileri için gereklidir). https://mystorageaccount.queue.core.windows.net
Credential <CONNECTION_NAME_PREFIX>__credential olarak ayarlanmalıdır managedidentity. managedidentity
Müşteri Kimliği <CONNECTION_NAME_PREFIX>__clientId Kullanıcı tarafından atanan yönetilen kimliğin istemci kimliği. 00000000-0000-0000-0000-000000000000

Örneğin, bağlama yapılandırmanız öğesini belirtiyorsa connection = "BlobStorageConnection"aşağıdaki uygulama ayarlarını yapılandırabilirsiniz:

{
    "BlobStorageConnection__blobServiceUri": "https://mystorageaccount.blob.core.windows.net",
    "BlobStorageConnection__queueServiceUri": "https://mystorageaccount.queue.core.windows.net",
    "BlobStorageConnection__credential": "managedidentity",
    "BlobStorageConnection__clientId": "00000000-0000-0000-0000-000000000000"
}

İpucu

Kullanıcı tarafından atanan yönetilen kimlikler, birden çok kaynakta kimlik izinleri üzerinde ayrıntılı denetime ihtiyacınız olan üretim senaryoları için önerilir.

Azure Functions hizmetinde barındırıldığında, kimlik tabanlı bağlantılar managed identity kullanır. Ve özellikleriyle credentialclientID kullanıcı tarafından atanan bir kimlik belirtilse de, sistem tarafından atanan kimlik varsayılan olarak kullanılır. Kullanıcı tarafından atanan kimliği kaynak kimliğiyle yapılandırmanın desteklenmediğini unutmayın. Yerel geliştirme gibi diğer bağlamlarda çalıştırıldığında, bunun yerine geliştirici kimliğiniz kullanılır, ancak bu özelleştirilebilir. Bkz. Kimlik tabanlı bağlantılarla yerel geliştirme.

Kimliğe izin verme

Hangi kimlik kullanılıyorsa, hedeflenen eylemleri gerçekleştirmek için izinlere sahip olmalıdır. Çoğu Azure hizmet için bu, bu izinleri sağlayan yerleşik veya özel rolleri kullanarak Azure RBAC bir rol atamanız gerektiği anlamına gelir.

Önemli

Bazı izinler, tüm bağlamlar için gerekli olmayan hedef hizmet tarafından gösterilebilir. Mümkün olduğunda, kimliğe yalnızca gerekli ayrıcalıkları sağlayarak en az ayrıcalık ilkesine uyun. Örneğin, uygulamanın yalnızca bir veri kaynağından okuyabilmesi gerekiyorsa, yalnızca okuma izni olan bir rol kullanın. Okuma işlemi için aşırı izin olduğundan, bu hizmete yazmaya da izin veren bir rol atamak uygun olmaz. Benzer şekilde, rol atamasının kapsamının yalnızca okunması gereken kaynaklara göre ayarlandığından emin olmak istersiniz.

Çalışma zamanında blob kapsayıcınıza access sağlayan bir rol ataması oluşturmanız gerekir. Owner gibi yönetim rolleri yeterli değildir. Aşağıdaki tabloda, normal işlemde Blob Storage uzantısı kullanılırken önerilen yerleşik roller gösterilmektedir. Uygulamanız, yazdığınız koda göre daha fazla izin gerektirebilir.

Bağlama türü Örnek yerleşik roller
Tetikleyici Storage Blob Veri SahibiandStorage Kuyruk Veri Katkıda Bulunanı1

AzureWebJobsStorage bağlantısına ek izinler de verilmelidir.2
Giriş bağlaması Storage Blob Veri Okuyucusu
Çıkış bağlaması Storage Blob Veri Sahibi

1 Blob tetikleyicisi, bağlantı tarafından belirtilen storage hesabındaki bir kuyruğa poison blobları yazarak birden çok yeniden denemedeki hataları işler.

2 AzureWebJobsStorage bağlantısı, tetikleyiciyi etkinleştiren bloblar ve kuyruklar için dahili olarak kullanılır. Kimlik tabanlı bir bağlantı kullanacak şekilde yapılandırılmışsa, varsayılan gereksinimin ötesinde ek izinlere ihtiyacı vardır. Gerekli izinler Storage Blob Veri Sahibi, Storage Kuyruk Verileri Katkıda Bulunanı ve Storage Hesap Katkıda Bulunanı rolleri kapsamındadır. Daha fazla bilgi edinmek için bkz. Identity ile storage barındırmaya bağlanma.

Blob adı desenleri

function.jsonpathözelliğinde bir blob adı deseni BlobTrigger belirtebilirsiniz. Ad düzeni bir filtre veya bağlama ifadesi olabilir. Aşağıdaki bölümlerde örnekler verilmiştir.

İpucu

Kapsayıcı adı, ad deseninde çözümleyici içeremez.

Dosya adını ve uzantısını alma

Aşağıdaki örnekte blob dosya adı ve uzantısına ayrı olarak nasıl bağlanacağınız gösterilmektedir:

"path": "input/{blobname}.{blobextension}",

Blob original-Blob1.txt olarak adlandırılırsa, işlev kodundaki ve değişkenlerinin değerleri blobname original-Blob1 ve blobextension.

Blob adına göre filtreleme

Aşağıdaki örnek yalnızca kapsayıcıdaki input "original-" dizesiyle başlayan bloblarda tetikler:

"path": "input/original-{name}",

Blob adı original-Blob1.txt ise

Dosya türüne göre filtreleme

Aşağıdaki örnek yalnızca .png dosyalarında tetikler:

"path": "samples/{name}.png",

Dosya adlarındaki küme ayraçlarına filtre uygulama

Dosya adlarında küme ayracı aramak için iki küme ayracı kullanarak küme ayraçlarından kurtulabilirsiniz. Aşağıdaki örnek, adında küme ayraçları bulunan bloblar için filtreler:

"path": "images/{{20140101}}-{name}",

Blob -soundfile.mp3 olarak adlandırılırsa {20140101}işlev kodundaki name.

Yoklama ve gecikme süresi

Yoklama, günlükleri inceleme ve düzenli kapsayıcı taramaları çalıştırma arasında karma olarak çalışır. Bloblar aralıklar arasında kullanılan bir devamlılık belirteci ile aynı anda 10.000'lik gruplar halinde taranır. İşlev uygulamanız Tüketim planındaysa, işlev uygulaması boşta kalırsa yeni blobların işlenmesinde 10 dakikaya kadar gecikme olabilir.

Uyarı

Storage günlükleri "en iyi çaba" temelinde oluşturulur. Tüm olayların yakalandığının garantisi yoktur. Bazı koşullar altında günlükler kaçırılabilir.

Daha hızlı veya daha güvenilir blob işlemeye ihtiyacınız varsa, barındırma alanınızı Always On etkin bir App Service planı kullanacak şekilde değiştirmeyi göz önünde bulundurmanız gerekir ve bu da maliyetlerin artmasına neden olabilir. Ayrıca klasik yoklama blobu tetikleyicisi dışında bir tetikleyici kullanmayı da düşünebilirsiniz. daha fazla bilgi edinmek ve blob storage kapsayıcıları için çeşitli tetikleyici seçeneklerinin karşılaştırması için bkz. blob kapsayıcıda Trigger.

Blob alındı bilgileri

Azure Functions çalışma zamanı, aynı yeni veya güncelleştirilmiş blob için birden çok kez çağrılmamasını sağlar. Belirli bir blob sürümünün işlenip işlenmediğini belirlemek için blob alındı bilgilerini korur.

Azure Functions blob alındı bilgilerini işlev uygulamanızın Azure storage hesabında azure-webjobs-hosts adlı bir kapsayıcıda depolar (AzureWebJobsStorage uygulama ayarıyla tanımlanır). Blob alındı bilgisi aşağıdaki bilgilere sahiptir:

  • Tetiklenen işlev (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>örneğin: MyFunctionApp.Functions.CopyBlob)
  • Kapsayıcı adı
  • Blob türü (BlockBlob veya PageBlob)
  • Blob adı
  • ETag (blob sürümü tanımlayıcısı, örneğin: 0x8D1DC6E70A277EF)

Blobun yeniden işlenmesini zorlamak için azure-webjobs-hosts kapsayıcısından bu blobun blob alındı bilgisini el ile silin. Yeniden işleme hemen gerçekleşmeyebilir ancak daha sonraki bir noktada gerçekleşebileceği garanti edilir. Hemen yeniden işlemek için azure-webjobs-hosts/blobscaninfo içindeki scaninfo blobu güncelleştirilebilir. Özellik sonrasında son değiştirilen zaman damgasına LatestScan sahip tüm bloblar yeniden taranır.

Zehirli bloblar

Belirli bir blob için blob tetikleyici işlevi başarısız olduğunda, varsayılan olarak toplam beş kez işlevi yeniden Azure Functions.

Beş denemenin tümü başarısız olursa, Azure Functions webjobs-blobtrigger-poison adlı bir Storage kuyruğuna bir ileti ekler. Yeniden deneme sayısı üst sınırı yapılandırılabilir. Zehirli blob işleme ve zehirli kuyruk ileti işleme için aynı MaxDequeueCount ayarı kullanılır. Zehirli bloblar için kuyruk iletisi, aşağıdaki özellikleri içeren bir JSON nesnesidir:

  • FunctionId (biçiminde <FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>)
  • BlobType (BlockBlob veya PageBlob)
  • KonteynerAdı
  • BlobName
  • ETag (blob sürümü tanımlayıcısı, örneğin: 0x8D1DC6E70A277EF)

Bellek kullanımı ve eşzamanlılık

gibi akışı desteklemeyen bir çıkış türüne bağlandığınızda, stringByte[]çalışma zamanı işleme sırasında blob'un tamamını birden çok kez belleğe yüklemelidir. Bu, blobları işlerken beklenenden daha yüksek bellek kullanımına neden olabilir. Mümkün olduğunda bir akış destekleyici türü kullanın. Tür desteği C# moduna ve uzantı sürümüne bağlıdır. Daha fazla bilgi için bkz. Binding types.

Şu anda, çalışma zamanı işleme sırasında blob'un tamamını birden çok kez belleğe yüklemelidir. Bu, blobları işlerken beklenenden daha yüksek bellek kullanımına neden olabilir.

Birden çok işlev örneği blob verilerini eşzamanlı olarak işlerken bellek kullanımı daha fazla etkilenebilir. Blob tetikleyicisi kullanırken bellek sorunları yaşıyorsanız izin verilen eşzamanlı yürütme sayısını azaltmayı göz önünde bulundurun. Eşzamanlılığı azaltmak, işlenmeyi bekleyen blobların kapsamlarını artırmanın yan etkisi olabilir. İşlev uygulamanızın bellek sınırları plana bağlıdır. Daha fazla bilgi için bkz . Hizmet sınırları.

Eşzamanlı yürütme sayısını denetleme yöntemi, kullandığınız Storage uzantısının sürümüne bağlıdır.

Storage uzantısının 5.0.0 sürümünü veya sonraki bir sürümü kullanırken, host.json içindeki blobs yapılandırmasındaki ayarını kullanarak tetikleyici eşzamanlılığını denetleyebilirsiniz.

Sınırlar, blob tetikleyicisi kullanan her işleve ayrı olarak uygulanır.

host.json özellikleri

host.json dosyası blob tetikleyici davranışını denetleen ayarlar içerir. Kullanılabilir ayarlarla ilgili ayrıntılar için host.json settings bölümüne bakın.

Sonraki adımlar