триггер Azure Blob storage для Функции Azure

Триггер Blob storage запускает функцию при обнаружении нового или обновленного большого двоичного объекта. Содержимое большого двоичного объекта предоставляется как input функции.

Совет

Существует несколько способов выполнения кода функции на основе изменений больших двоичных объектов в контейнере storage. Если вы решили использовать триггер Blob storage, есть две реализации: один на основе опроса (на который ссылается эта статья) и на основе событий. Рекомендуется использовать реализацию на основе событий, так как она имеет меньшую задержку, чем другая. Кроме того, план потребления Flex поддерживает только триггер на основе событий Blob storage.

Дополнительные сведения о различиях между двумя реализациями триггера Blob storage, а также другими параметрами активации см. в разделе Working с большими двоичными объектами.

Сведения о настройке и настройке см. в разделе overview.

Внимание

В этой статье используются вкладки для поддержки нескольких версий модели программирования Node.js. Модель версии 4 общедоступна и предназначена для более гибкого и интуитивно понятного интерфейса для разработчиков JavaScript и TypeScript. Дополнительные сведения о работе модели версии 4 см. в руководстве разработчика Функции Azure Node.js разработчика. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.

Функции Azure поддерживает две модели программирования для Python. Способ определения привязок зависит от выбранной модели программирования.

Модель программирования Python версии 2 позволяет определять привязки с помощью декораторов непосредственно в коде функции Python. Дополнительные сведения см. в руководстве разработчика Python.

Эта статья поддерживает обе модели программирования.

Полный пример использования триггера Хранилище BLOB-объектов см. в разделе Respond для blob storage событий с помощью Функции Azure.

Пример

Функцию C# можно создать с помощью одного из следующих режимов C#:

  • Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в LTS и версиях, отличных от LTS, .NET и платформы .NET. Расширения для изолированных рабочих процессов используют пространства имен Microsoft.Azure.Functions.Worker.Extensions.*.
  • Модель внутрипроцессного процесса: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций. В варианте этой модели функции можно запускать с помощью скриптов C#, которая поддерживается главным образом для редактирования портала C#. Расширения для функций в процессе используют пространства имен Microsoft.Azure.WebJobs.Extensions.*.

В следующем примере показана функция C#, которая выполняется в изолированном рабочем процессе и использует триггер BLOB-объектов с входными и выходными привязками BLOB-объектов. Эта функция активируется путем создания BLOB-объекта в контейнере test-samples-trigger. Он считывает текстовый файл из контейнера test-samples-input и создает новый текстовый файл в выходном контейнере на основе имени активированного файла.

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";
    }
}

Эта функция использует массив байтов для записи журнала при добавлении или обновлении большого двоичного объекта в контейнере myblob .

На основе опроса:

В следующем примере используется триггер опроса по умолчанию:

@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");
}

В следующем примере используется триггер сетки событий:

@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");
}

Этот пример типов SDK использует BlobClient для access свойств большого двоичного объекта.

@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());
}

Этот пример типов SDK использует BlobContainerClient для access сведений о больших двоичных объектах в контейнере, активировав функцию.

@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()));
}

Этот пример типов ПАКЕТА SDK используется 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());
}

В этом примере показано, как получить blobClient как из триггера Storage BLOB-объекта, так и из входной привязки для триггера HTTP:

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,
});

В этом примере показано, как получить ContainerClient из Storage входной привязки BLOB-объектов с помощью триггера HTTP:

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,
});

В следующем примере показан код триггера BLOB-объекта TypeScript. Функция делает запись в журнал при добавлении или обновлении большого двоичного объекта в контейнере samples-workitems.

Строка {name} в пути триггера большого двоичного объекта samples-workitems/{name} создает выражение binding, которое можно использовать в коде функции для access имени файла триггерного большого двоичного объекта. Дополнительные сведения см. в разделе Шаблоны имени большого двоичного объекта.

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,
});

В следующем примере показан код JavaScript для триггера БОЛЬШОго двоичного объекта. Функция делает запись в журнал при добавлении или обновлении большого двоичного объекта в контейнере samples-workitems.

Строка {name} в пути триггера большого двоичного объекта samples-workitems/{name} создает выражение binding, которое можно использовать в коде функции для access имени файла триггерного большого двоичного объекта. Дополнительные сведения см. в разделе Шаблоны имени большого двоичного объекта.

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`
        );
    },
});

В следующем примере показано, как создать функцию, которая выполняется при добавлении файла в контейнер source blob storage.

Файл конфигурации функции (function.json) включает в себя привязку с параметром type для blobTrigger и выбранное для direction значение in.

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

Ниже приведен связанный код для файла run.ps1.

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

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

В этом примере типы SDK используются для непосредственного access базового объекта BlobClient, предоставленного триггером Blob storage:

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)}"
    )

Примеры использования других типов SDK см. в примерах ContainerClient и StorageStreamDownloader. Пошаговые инструкции по включению привязок типа ПАКЕТА SDK в приложение-функцию см. в разделе Python SDK Bindings for Blob Sample.

Дополнительные сведения, включая поддерживаемые другие привязки типов ПАКЕТА SDK, см. в статье о привязках типов пакета SDK.

В этом примере регистрируется имя и размер большого двоичного объекта из входящего триггера БОЛЬШОго двоичного объекта.

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")

Следующий пример показывает триггерную функцию Хранилище BLOB-объектов, которая обрабатывает загруженные блобы:

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 main() {
	app := sdk.FunctionApp()
	app.Blob("blobTrigger", processBlob,
		sdk.WithPath("samples-workitems/{name}"),
		sdk.WithConnection("AzureWebJobsStorage"),
	)
	worker.Start(app)
}

func processBlob(ctx context.Context, client *blob.Client) error {
	get, err := client.DownloadStream(ctx, nil)
	if err != nil {
		return fmt.Errorf("download error: %w", err)
	}
	data, _ := io.ReadAll(get.Body)
	get.Body.Close()
	log.Printf("Go Blob trigger function processed blob, %d bytes", len(data))
	return nil
}

Замечание

Триггер Blob в Go даёт аутентифицированный Azure SDK *blob.Client напрямую вашему обработчику. Вам нужно добавить пустой импорт, чтобы triggers/blob пакет триггера Blob был доступен для работника Go.

Атрибуты

Библиотеки in-process и isolated worker process C# используют атрибут BlobAttribute для определения функции. Вместо этого скрипт C# использует файл конфигурации function.json, как описано в руководстве по скриптам C#.

Конструктор атрибута принимает следующие параметры:

Параметр Описание
BlobPath Путь к BLOB-объекту.
Соединение Имя коллекции параметров или параметров приложения, указывающее, как подключиться к Azure BLOB-объектам. См. раздел Подключения.
Access Указывает, какая операция будет выполняться (запись или чтение).
Источник Задает источник события триггера. Используется BlobTriggerSource.EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает низкую задержку. По умолчанию используется BlobTriggerSource.LogsAndContainerScanстандартный механизм опроса для обнаружения изменений в контейнере.

Вот как выглядит атрибут BlobTrigger в сигнатуре метода:

[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)

Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл local.settings.json в коллекции Values.

Декораторы

Применяется только к модели программирования Python версии 2.

Для функций Python версии 2, определенных с помощью декораторов, следующие свойства в декораторе blob_trigger определяют триггер Хранилище BLOB-объектов:

Свойство Описание
arg_name Объявляет имя параметра в сигнатуре функции. При активации функции значение этого параметра будет иметь содержимое сообщения очереди.
path container для мониторинга. Может быть шаблоном имени большого двоичного объекта.
connection Connection string учетной записи storage.
source Задает источник события триггера. Используется EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает низкую задержку. По умолчанию используется LogsAndContainerScanстандартный механизм опроса для обнаружения изменений в контейнере.

Сведения о функциях Python, определенных с помощью function.json, см. в разделе "Конфигурация ".

Заметки

Атрибут @BlobTrigger используется для предоставления access большому двоичному объекту, который активировал функцию. Дополнительные сведения см. в примере триггера. source Используйте свойство, чтобы задать источник события триггера. Используется EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает низкую задержку. По умолчанию используется LogsAndContainerScanстандартный механизм опроса для обнаружения изменений в контейнере. |

Настройка

Применяется только к модели программирования Python версии 1.

В следующей таблице описываются свойства, которые можно задать для options объекта, переданного методу app.storageBlob() .

Свойство Описание
путь container для мониторинга. Может быть шаблоном имени большого двоичного объекта.
Подключение Имя коллекции параметров или параметров приложения, указывающее, как подключиться к Azure BLOB-объектам. См. раздел Подключения.
источник Задает источник события триггера. Используется EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает низкую задержку. По умолчанию используется LogsAndContainerScanстандартный механизм опроса для обнаружения изменений в контейнере.

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.

Свойство в function.json Описание
тип Должен иметь значениеblobTrigger. Это свойство устанавливается автоматически при создании триггера в Azure portal.
направление Должен иметь значениеin. Это свойство устанавливается автоматически при создании триггера в Azure portal. Исключения приведены в этом разделе.
имя Имя переменной, представляющей большой двоичный объект в коде функции.
путь container для мониторинга. Может быть шаблоном имени большого двоичного объекта.
Подключение Имя коллекции параметров или параметров приложения, указывающее, как подключиться к Azure BLOB-объектам. См. раздел Подключения.
источник Задает источник события триггера. Используется EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает низкую задержку. По умолчанию используется LogsAndContainerScanстандартный механизм опроса для обнаружения изменений в контейнере.

Подробные примеры см. в разделе Примеры.

Совет

Полный рабочий пример, использующий триггер BLOB-объекта на основе сетки событий с конфигурацией подключения, источника и выходной привязки, см. в разделе Respond для событий хранилища BLOB-объектов с помощью Функции Azure.

Метаданные

Триггер BLOB-объектов предоставляет несколько свойств метаданных. Эти свойства можно использовать как часть выражений привязки в других привязках или как параметры в коде. Эти значения имеют ту же семантику, что и тип CloudBlob.

Свойство Тип Описание
BlobTrigger string Путь к большому двоичному объекту, активирующему триггер.
Uri System.Uri Код URI BLOB-объекта для основного расположения.
Properties BlobProperties Системные свойства BLOB-объекта.
Metadata IDictionary<string,string> Определяемые пользователем метаданные для BLOB-объекта.

В следующем примере регистрируется путь к BLOB-объект, выступающему в качестве триггера, включая контейнер:

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

Метаданные

Триггер BLOB-объектов предоставляет несколько свойств метаданных. Эти свойства можно использовать как часть выражений привязки в других привязках или как параметры в коде.

Свойство Описание
blobTrigger Путь к большому двоичному объекту, активирующему триггер.
uri Код URI BLOB-объекта для основного расположения.
properties Системные свойства BLOB-объекта.
metadata Определяемые пользователем метаданные для BLOB-объекта.

Метаданные можно получить из свойства triggerMetadata предоставленного объекта context, как показано в следующем примере, который регистрирует путь к BLOB-объекта, выступающему в качестве триггера (blobTrigger), включая контейнер:

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

Метаданные

Метаданные доступны через параметр $TriggerMetadata.

Использование

Типы привязки, поддерживаемые триггером BLOB-объектов, зависят от версии пакета расширения и модальности C#, используемой в приложении-функции.

Триггер большого двоичного объекта может привязаться к следующим типам:

Тип Описание
string Содержимое большого двоичного объекта в виде строки. Используется, когда содержимое большого двоичного объекта является простым текстом.
byte[] Байты содержимого большого двоичного объекта.
Сериализуемые в JSON типы Если большой двоичный объект содержит данные JSON, функции пытаются десериализировать данные JSON в обычный тип объекта CLR (POCO).
Поток1 Входной поток содержимого большого двоичного объекта.
BlobClient1
BlockBlobClient1,
PageBlobClient1
AppendBlobClient1,
BlobBaseClient1
Клиент, подключенный к большому двоичному объекту. Этот набор типов обеспечивает большую часть управления обработкой большого двоичного объекта и может использоваться для записи обратно в большой двоичный объект, если подключение имеет достаточно разрешений.

1 Чтобы использовать эти типы, необходимо ссылаться на Microsoft. Azure. Functions.Worker.Extensions. Storage. Большие двоичные объекты 6.0.0 или более поздней версии и зависимости common для привязок типов ПАКЕТА SDK.

Привязку string или Byte[] рекомендуется использовать только в том случае, если BLOB-объект небольшой. Это рекомендуется делать, поскольку в этом случае все содержание BLOB-объекта загружает в память. Для большинства BLOB-объектов необходимо использовать тип Stream или BlobClient. Дополнительные сведения см. в разделе Concurrency и использование памяти.

Если при попытке привязаться к одному из типов пакета SDK Storage возникает сообщение об ошибке, убедитесь, что у вас есть ссылка на правильную версию пакета SDK Storage.

Можно также использовать StorageAccountAttribute для указания используемой учетной записи storage. Это можно сделать, если необходимо использовать другую учетную запись storage, чем другие функции в библиотеке. Конструктор принимает имя параметра приложения, содержащего storage строка подключения. Атрибут может применяться на уровне класса, метода или параметра. Ниже показан пример уровня класса и метода.

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

Учетная запись storage, используемая, определяется в следующем порядке:

  • Свойство BlobTrigger атрибута Connection.
  • Атрибут StorageAccount, примененный к тому же параметру, что и BlobTrigger.
  • Атрибут StorageAccount, примененный к функции.
  • Атрибут StorageAccount, примененный к классу.
  • Учетная запись storage по умолчанию для приложения-функции, которая определена в параметре приложения AzureWebJobsStorage.

Замечание

Поддержка привязки к типам SDK в настоящее время доступна в предварительной версии и ограничена пакетом SDK Хранилище BLOB-объектов Azure. Дополнительные сведения см. в статье о типах sdk для Java.

Access данные больших двоичных объектов в качестве первого аргумента функции.

Access данные большого двоичного объекта с помощью параметра, соответствующего имени, указанному параметром имени привязки в файле function.json.

Access данные BLOB-объектов с помощью параметра, типизированного как InputStream. Дополнительные сведения см. в примере триггера.

Функции также поддерживают привязки типов пакета SDK Python для Azure Blob storage, что позволяет работать с данными BLOB-объектов с помощью следующих базовых типов ПАКЕТА SDK:

Замечание

Поддерживаются только синхронные типы пакетов SDK.

Внимание

Поддержка типов SDK для Python общедоступна и поддерживается только для модели программирования Python версии 2. Дополнительные сведения см. в разделе "Типы пакетов SDK" в Python.

Связи

Свойство устанавливается на ключ в настройках приложения, который возвращает значение, используемое connection runtime Functions для подключения к аккаунту хранилища, используемому расширением. Значение настройки свойств соединения зависит от типа соединения:

  • Управляемое соединение идентичности: свойство connection является <CONNECTION_NAME_PREFIX> общим для группы настроек, которые вместе определяют соединение на основе идентичности с аккаунтом хранения. Для получения дополнительной информации см. раздел «Определить идентичные связи».
  • Key Vault reference: connection Настройка свойств возвращает ссылку на Azure Key Vault на место, где централизованно поддерживается строка подключения. Для получения дополнительной информации смотрите раздел Define Key Vault connections.
  • App Configuration reference: connection Настройка свойства возвращает ссылку на Конфигурация приложений Azure, которая возвращает строка подключения или ссылку на Key Vault. Для получения дополнительной информации см. Конфигурация приложений Azure в статье о соединениях.
  • Connection string: Настройка connection свойств возвращает фактическую строка подключения для учетной записи хранилища. Поскольку строка строка подключения содержит общие секретные ключи, следует рассмотреть возможность использования управляемого идентификатора соединения, если это возможно. Для получения дополнительной информации см. раздел «Определить соединения».

Чтобы узнать больше о соединениях связей, см. раздел «Управление соединением в Функции Azure». Чтобы получить строка подключения, выполните действия, описанные в разделе Manage storage ключи учетной записи access.

Когда вы устанавливаете connection префикс ключа или ключа с именем AzureWebJobsStorage или пустую строку, расширение связывания использует стандартную учетную запись хранения хоста. Для получения дополнительной информации см. раздел «Оптимизировать производительность хранения».

Шаблоны имен больших двоичных объектов

Вы можете указать шаблон имени большого двоичного объекта в свойстве path в файле function.json или в конструкторе атрибута BlobTrigger. Шаблон имени может быть выражением фильтра или привязки. В следующих разделах приведены примеры.

Совет

Имя контейнера не может содержать сопоставитель в шаблоне имени.

Получение имени и расширения файла

В следующем примере показано, как выполнить привязку имени и расширения файла большого двоичного объекта по отдельности:

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

Если большой двоичный объект имеет имя original-Blob1.txt, он передает в код функции переменные blobname и blobextension со значениями original-Blob1 и txt соответственно.

Фильтрация по имени большого двоичного объекта

Следующий пример активируется только для больших двоичных объектов в контейнере input, который начинается со строки original-.

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

Если original-Blob1.txt — имя большого двоичного объекта, значением переменной name в коде функции будет Blob1.txt.

Фильтрация по типу файла

Далее приведены примеры триггеров только из файлов PNG:

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

Фильтрация по фигурным скобкам в именах файлов

Чтобы найти фигурные скобки в именах файлов, экранируйте скобки, используя две фигурные скобки. В следующем примере показана фильтрация по большим двоичным объектам, имена которых содержат фигурные скобки:

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

Если {20140101}-soundfile.mp3 — имя большого двоичного объекта, значением переменной name в коде функции будет soundfile.mp3.

Опрос и задержка

Опрос работает как гибрид между проверками журналов и выполнения периодических просмотров контейнеров. Большие двоичные объекты проверяются в группах по 10 000 за раз с токеном продолжения, используемым между интервалами. Если ваше приложение-функция выполняется в рамках плана потребления, обработка новых больших двоичных объектов может осуществляться с задержкой до 10 минут, если приложение-функция стало неактивным.

Предупреждение

журналы Storage создаются на основе "наилучших усилий" . Регистрация всех событий не гарантируется. В некоторых случаях журналы могут пропускаться.

Если требуется более быстрая или более надежная обработка BLOB-объектов, следует рассмотреть возможность переключения размещения на использование плана App Service с включенным Always On, что может привести к увеличению затрат. Можно также использовать триггер, отличный от классического триггера опроса BLOB-объектов. Дополнительные сведения и сравнение различных параметров активации для контейнеров blob storage см. в разделе Trigger в контейнере BLOB-объектов.

Уведомления о получении большого двоичного объекта

Среда выполнения Функции Azure гарантирует, что функция триггера большого двоичного объекта вызывается несколько раз для того же нового или обновленного большого двоичного объекта. Для определения того, обработана ли версия этого BLOB-объекта, сохраняются уведомления о получении BLOB-объекта.

Функции Azure хранит квитанции больших двоичных объектов в контейнере с именем azure-webjobs-hosts в учетной записи Azure storage приложения-функции (определяется параметром приложения AzureWebJobsStorage). Уведомление о получении большого двоичного объекта содержит следующую информацию:

  • Активируемая функция (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME> например: MyFunctionApp.Functions.CopyBlob)
  • имя контейнера;
  • Тип большого двоичного объекта (BlockBlob или PageBlob)
  • имя большого двоичного объекта;
  • ETag (идентификатор версии больших двоичных объектов, например 0x8D1DC6E70A277EF)

Чтобы принудительно выполнить повторную обработку большого двоичного объекта, удалите получение большого двоичного объекта для этого большого двоичного объекта из контейнера azure-webjobs-hosts контейнер вручную. Хотя повторная обработка может не выполняться немедленно, она гарантированно будет выполняться в более поздний момент времени. Чтобы немедленно выполнить повторную обработку, можно обновить большой двоичный объект scaninfo в azure-webjobs-hosts/blobscaninfo. Все большие двоичные объекты с последним измененным штампом времени после свойства LatestScan будут просканированы снова.

Подозрительные BLOB-объекты

Если функция триггера большого двоичного объекта завершается ошибкой для данного большого двоичного объекта, Функции Azure повторите попытку, которая работает в общей сложности пять раз по умолчанию.

Если все пять попыток завершаются ошибкой, Функции Azure добавляет сообщение в очередь Storage с именем webjobs-blobtrigger-poison. Можно настроить максимальное количество попыток. Тот же параметр MaxDequeueCount используется для обработки подозрительных больших двоичных объектов и подозрительных сообщений очереди. Сообщением очереди для подозрительных больших двоичных объектов является объект JSON, содержащий следующие свойства:

  • FunctionId (в формате <FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>)
  • BlobType (BlockBlob или PageBlob)
  • ИмяКонтейнера
  • BlobName
  • ETag (идентификатор версии больших двоичных объектов, например 0x8D1DC6E70A277EF)

Использование памяти и параллелизм

При привязке к выходному типуобъект в память более одного раза во время обработки. Это может привести к более высокому использованию памяти при обработке больших двоичных объектов. По возможности используйте тип поддержки потоков. Поддержка типов зависит от режима C# и версии расширения. Дополнительные сведения см. в разделе Binding types.

В настоящее время среда выполнения должна загружать весь большой двоичный объект в память более одного раза во время обработки. Это может привести к более высокому использованию памяти при обработке больших двоичных объектов.

Использование памяти может быть дополнительно затронуто, если несколько экземпляров функций одновременно обрабатывают данные BLOB-объектов. Если у вас возникли проблемы с памятью с помощью триггера БОЛЬШОго двоичного объекта, рассмотрите возможность уменьшения числа разрешенных одновременных выполнений. Уменьшение параллелизма может иметь побочный эффект увеличения невыполненной работы больших двоичных объектов, ожидающих обработки. Ограничения памяти приложения-функции зависят от плана. Дополнительные сведения см. в статье Ограничения службы.

Способ управления числом одновременных выполнений зависит от используемого расширения Storage.

При использовании расширения Storage версии 5.0.0 или более поздней версии можно управлять параллелизмом триггера с помощью параметра maxDegreeOfParallelism в конфигурации BLOB-объектов в host.json.

Ограничения применяются отдельно к каждой функции, которая использует триггер большого двоичного объекта.

Свойства host.json

В файле host.json содержатся параметры, управляющие поведением триггера HTTP. Дополнительные сведения о доступных параметрах см. в разделе host.json.

Следующие шаги