Триггер хранилища BLOB-объектов Azure для Функций Azure
Триггер хранилища BLOB-объектов запускает функцию при обнаружении нового или обновленного большого двоичного объекта. Содержимое BLOB-объекта предоставляется в качестве входных данных функции.
Совет
Есть несколько способов выполнять код функции при изменениях в больших двоичных объектах, сохраненных в контейнере хранилища. Если вы решили использовать триггер хранилища BLOB-объектов, обратите внимание, что предлагаются две реализации: один на основе опроса (на который ссылается в этой статье) и на основе событий. Рекомендуется использовать реализацию на основе событий, так как она имеет меньшую задержку, чем другая. Кроме того, план потребления Flex поддерживает только триггер хранилища BLOB-объектов на основе событий.
Дополнительные сведения о различиях между двумя реализациями триггера хранилища BLOB-объектов, а также другими параметрами активации см. в статье "Работа с большими двоичными объектами".
Сведения об установке и настройке см. в обзорной статье.
Внимание
В этой статье используются вкладки для поддержки нескольких версий модели программирования Node.js. Модель версии 4 общедоступна и предназначена для более гибкого и интуитивно понятного интерфейса для разработчиков JavaScript и TypeScript. Дополнительные сведения о том, как работает модель версии 4, см. в руководстве разработчика по Функции Azure Node.js. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.
Функции Azure поддерживает две модели программирования для Python. Способ определения привязок зависит от выбранной модели программирования.
Модель программирования Python версии 2 позволяет определять привязки с помощью декораторов непосредственно в коде функции Python. Дополнительные сведения см. в руководстве разработчика Python.
Эта статья поддерживает обе модели программирования.
Пример
Функцию C# можно создать с помощью одного из следующих режимов C#:
- Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в LTS и не LTS-версиях .NET и платформа .NET Framework. Расширения для изолированных рабочих процессов используют
Microsoft.Azure.Functions.Worker.Extensions.*
пространства имен. - Модель внутрипроцессного процесса: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций. В варианте этой модели функции можно запускать с помощью скриптов C#, которая поддерживается главным образом для редактирования портала C#. Расширения для функций в процессе используют
Microsoft.Azure.WebJobs.Extensions.*
пространства имен.
Внимание
Поддержка будет завершена для модели в процессе 10 ноября 2026 г. Настоятельно рекомендуется перенести приложения в изолированную рабочую модель для полной поддержки.
В следующем примере показана функция 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");
}
В следующем примере показан код триггера BLOB-объекта TypeScript. Функция делает запись в журнал при добавлении или обновлении большого двоичного объекта в контейнере samples-workitems
.
Строка {name}
в пути триггера большого двоичного объекта samples-workitems/{name}
создает выражение привязки, которое можно использовать в коде функции для получения доступа к имени файла большого двоичного объекта, запускающего триггер. Дополнительные сведения см. в разделе Шаблоны имени большого двоичного объекта.
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}
создает выражение привязки, которое можно использовать в коде функции для получения доступа к имени файла большого двоичного объекта, запускающего триггер. Дополнительные сведения см. в разделе Шаблоны имени большого двоичного объекта.
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`
);
},
});
В следующем примере показано, как создать функцию, которая выполняется при добавлении файла в контейнер хранилища BLOB-объектов source
.
Файл конфигурации функции (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 для прямого доступа к базовому BlobClient
объекту, предоставленному триггером хранилища BLOB-объектов:
import logging
import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@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 в проекте, см. в статье о привязках типов пакета SDK.
В этом примере данные записываются из входящих метаданных БОЛЬШОго двоичного объекта.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob",
path="PATH/TO/BLOB",
connection="CONNECTION_SETTING")
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")
Атрибуты
Библиотеки C# в процессе и изолированном рабочем процессе используют атрибут BlobAttribute для определения функции. Вместо этого скрипт C# использует файл конфигурации function.json, как описано в руководстве по скриптам C#.
Конструктор атрибута принимает следующие параметры:
Параметр | Описание |
---|---|
BlobPath | Путь к BLOB-объекту. |
Соединение | Имя параметра или коллекции параметров приложения, указывающих, как подключиться к BLOB-объектам Azure. См. раздел Подключения. |
Открыть | Указывает, какая операция будет выполняться (запись или чтение). |
Источник | Задает источник события триггера. Используется 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-объектов:
Свойство | Description |
---|---|
arg_name |
Объявляет имя параметра в сигнатуре функции. При активации функции значение этого параметра будет иметь содержимое сообщения очереди. |
path |
Контейнер для мониторинга. Может быть шаблоном имени большого двоичного объекта. |
connection |
Строка подключения учетной записи хранения. |
source |
Задает источник события триггера. Используется EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает гораздо меньшую задержку. По умолчанию используется LogsAndContainerScan стандартный механизм опроса для обнаружения изменений в контейнере. |
Сведения о функциях Python, определенных с помощью function.json, см. в разделе "Конфигурация ".
Заметки
Атрибут @BlobTrigger
используется для предоставления доступа к большому двоичному объекту, запускающему функцию. Дополнительные сведения см. в примере триггера. source
Используйте свойство, чтобы задать источник события триггера. Используется EventGrid
для триггера большого двоичного объекта на основе сетки событий, что обеспечивает гораздо меньшую задержку. По умолчанию используется LogsAndContainerScan
стандартный механизм опроса для обнаружения изменений в контейнере. |
Настройка
Применяется только к модели программирования Python версии 1.
В следующей таблице описываются свойства, которые можно задать для options
объекта, переданного методу app.storageBlob()
.
Свойство | Description |
---|---|
path | Контейнер для мониторинга. Может быть шаблоном имени большого двоичного объекта. |
Подключение | Имя параметра или коллекции параметров приложения, указывающих, как подключиться к BLOB-объектам Azure. См. раздел Подключения. |
source | Задает источник события триггера. Используется EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает гораздо меньшую задержку. По умолчанию используется LogsAndContainerScan стандартный механизм опроса для обнаружения изменений в контейнере. |
В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.
Свойство в function.json | Описание |
---|---|
type | Должен иметь значениеblobTrigger . Это свойство задается автоматически при создании триггера на портале Azure. |
direction | Должен иметь значениеin . Это свойство задается автоматически при создании триггера на портале Azure. Исключения приведены в этом разделе. |
name | Имя переменной, представляющей большой двоичный объект в коде функции. |
path | Контейнер для мониторинга. Может быть шаблоном имени большого двоичного объекта. |
Подключение | Имя параметра или коллекции параметров приложения, указывающих, как подключиться к BLOB-объектам Azure. См. раздел Подключения. |
source | Задает источник события триггера. Используется EventGrid для триггера большого двоичного объекта на основе сетки событий, что обеспечивает гораздо меньшую задержку. По умолчанию используется LogsAndContainerScan стандартный механизм опроса для обнаружения изменений в контейнере. |
Подробные примеры см. в разделе Примеры.
Метаданные
Триггер BLOB-объектов предоставляет несколько свойств метаданных. Эти свойства можно использовать как часть выражений привязки в других привязках или как параметры в коде. Эти значения имеют ту же семантику, что и тип CloudBlob.
Свойство | Type | Описание |
---|---|---|
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-объектов предоставляет несколько свойств метаданных. Эти свойства можно использовать как часть выражений привязки в других привязках или как параметры в коде.
Свойство | Description |
---|---|
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.Blobs 6.0.0 или более поздней версии , а также общие зависимости для привязок типов ПАКЕТА SDK.
Привязку string
или Byte[]
рекомендуется использовать только в том случае, если BLOB-объект небольшой. Это рекомендуется делать, поскольку в этом случае все содержание BLOB-объекта загружает в память. Для большинства BLOB-объектов необходимо использовать тип Stream
или BlobClient
. Дополнительные сведения см. в разделе Параллелизм и использование памяти.
Если при попытке установить привязку к одному из типов SDK для службы хранилища получено сообщение об ошибке, убедитесь, что используется ссылка на правильную версию пакета SDK для службы хранилища.
Вы также можете использовать StorageAccountAttribute, чтобы указать учетную запись хранения, которую необходимо использовать. Это можно сделать, если необходимо использовать учетную запись хранения, отличную от той, что используется другими функциями в библиотеке. Конструктор принимает имя параметра приложения, содержащего строку подключения к службе хранилища. Атрибут может применяться на уровне класса, метода или параметра. Ниже показан пример уровня класса и метода.
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("BlobTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
....
}
Используемая учетная запись хранения определяется в следующем порядке:
- Свойство
BlobTrigger
атрибутаConnection
. - Атрибут
StorageAccount
, примененный к тому же параметру, что иBlobTrigger
. - Атрибут
StorageAccount
, примененный к функции. - Атрибут
StorageAccount
, примененный к классу. - Учетная запись хранения по умолчанию для приложения-функции, определенная в параметре приложения
AzureWebJobsStorage
.
Атрибут @BlobTrigger
используется для предоставления доступа к большому двоичному объекту, запускающему функцию. Дополнительные сведения см. в примере триггера.
Доступ к данным БОЛЬШОго двоичного объекта в качестве первого аргумента функции.
Получение доступа к данным BLOB-объекта через параметр string, который соответствует имени, назначенному параметром имени привязки в файле function.js.
Доступ к данным BLOB-объекта с помощью параметра, типизированного как InputStream. Дополнительные сведения см. в примере триггера.
Функции также поддерживают привязки типов пакета SDK Python для хранилища BLOB-объектов Azure, что позволяет работать с данными BLOB-объектов с помощью следующих базовых типов SDK:
Внимание
Поддержка типов SDK для Python в настоящее время доступна в предварительной версии и поддерживается только для модели программирования Python версии 2. Дополнительные сведения см. в разделе "Типы пакетов SDK" в Python.
Связи
Это connection
свойство является ссылкой на конфигурацию среды, которая указывает, как приложение должно подключаться к BLOB-объектам Azure. В данном свойстве может быть указано:
- Имя параметра приложения, содержащего строку подключения.
- Имя общего префикса для нескольких параметров приложения, а также определение подключения на основе удостоверений.
Если настроенное значение одновременно точно соответствует одному параметру и является префиксом для других параметров, то используется точное совпадение.
Connection string
Чтобы получить строку подключения, выполните действия, описанные в разделе Управление ключами доступа к учетной записи хранения. Строка подключения необходима для учетной записи хранения общего назначения, а не учетной записи хранения больших двоичных объектов.
Эта строка подключения должна храниться в параметре приложения с именем, соответствующим значению, которое указано свойством connection
конфигурации привязки.
Если имя параметра приложения начинается с AzureWebJobs, можно указать только остальную часть имени. Например, если задать для connection
значение MyStorage, среда выполнения Функций Azure будет искать параметр приложения с именем AzureWebJobsMyStorage. Если оставить строку connection
пустой, среда выполнения службы "Функции" будет использовать строку подключения к службе хранилища по умолчанию для параметра приложения с именем AzureWebJobsStorage
.
Подключения на основе удостоверений
Если вы используете расширение версии 5.x или выше (пакет 3.x или более поздней для стеков языка non-.NET), а не используете строка подключения с секретом, приложение может использовать удостоверение Microsoft Entra. Чтобы использовать удостоверение, вы определяете параметры под общим префиксом, который сопоставляется со connection
свойством в конфигурации триггера и привязки.
Если вы устанавливаете значение connection
"AzureWebJobsStorage", см. статью "Подключение к хранилищу с удостоверением". Для всех других подключений требуются следующие свойства в расширении:
Свойство | Шаблон переменной среды | Description | Пример значения |
---|---|---|---|
Универсальный код ресурса службы BLOB-объектов | <CONNECTION_NAME_PREFIX>__serviceUri 1 |
URI плоскости данных службы BLOB-объектов, к которой вы подключаетесь, с помощью схемы HTTPS. | https://<storage_account_name>.blob.core.windows.net |
1 <CONNECTION_NAME_PREFIX>__blobServiceUri
можно использовать в качестве псевдонима. Если триггером BLOB-объекта будет использоваться конфигурация подключения, вместе blobServiceUri
должно быть указано queueServiceUri
. См. ниже.
Форму serviceUri
нельзя использовать, если общая конфигурация подключения должна использоваться для больших двоичных объектов, очередей и (или) таблиц. Универсальный код ресурса (URI) может назначать только службу BLOB-объектов. В качестве альтернативы можно специально указать универсальный код ресурса (URI) для каждой службы, что позволит использовать одно подключение. Если указаны обе версии, используется форма с несколькими службами. Чтобы настроить подключение для нескольких служб, вместо <CONNECTION_NAME_PREFIX>__serviceUri
задайте:
Свойство | Шаблон переменной среды | Description | Пример значения |
---|---|---|---|
Универсальный код ресурса службы BLOB-объектов | <CONNECTION_NAME_PREFIX>__blobServiceUri |
URI плоскости данных службы BLOB-объектов, к которой вы подключаетесь, с помощью схемы HTTPS. | https://<storage_account_name>.blob.core.windows.net |
Универсальный код ресурса (URI) службы очередей (требуется для триггеров BLOB-объектов2) | <CONNECTION_NAME_PREFIX>__queueServiceUri |
Универсальный код ресурса (URI) плоскости данных службы очередей, использующей схему HTTPS. Это значение требуется только для триггеров BLOB-объектов. | https://<storage_account_name>.queue.core.windows.net |
2Триггер BLOB-объекта обрабатывает сбой нескольких попыток и записывает подозрительные BLOB-объекты в очередь. В формеserviceUri
используется подключение AzureWebJobsStorage
. Однако если указать blobServiceUri
, в универсальном коде ресурса (URI) службы очередей также должен быть указан queueServiceUri
. Рекомендуется использовать службу из той же учетной записи хранения, что и служба BLOB-объектов. Кроме того, необходимо убедиться, что триггер может считывать и записывать сообщения в настроенной службе очередей, назначив роль, например участник данных очереди хранилища.
Другие свойства могут быть заданы для настройки подключения. См. раздел Общие свойства подключений на основе удостоверений.
При размещении в службе "Функции Azure" для подключений на основе удостоверений используется управляемое удостоверение. По умолчанию используется назначаемое системой удостоверение, однако вы можете указать назначаемое пользователем удостоверение с помощью свойств credential
и clientID
. Обратите внимание, что настройка назначаемого пользователем удостоверения с идентификатором ресурса не поддерживается. При выполнении в других контекстах, например при локальной разработке, вместо этого используется удостоверение разработчика, хотя это можно настроить. См. раздел Локальная разработка с использованием подключений на основе удостоверений.
Предоставление разрешения удостоверению
Любое используемое удостоверение должно иметь разрешения на выполнение предполагаемых действий. Для большинства служб Azure это означает, что необходимо назначить роль в Azure RBAC, используя встроенные или настраиваемые роли, которые предоставляют эти разрешения.
Внимание
Иногда целевая служба может предоставлять разрешения, которые не являются обязательными для всех контекстов. Там, где это возможно, придерживайтесь принципа минимальных привилегий, предоставляя удостоверению лишь самые необходимые привилегии. Например, если приложению требуется только возможность чтения из источника данных, используйте роль, которая имеет разрешение только на чтение. Было бы неуместным назначить роль, которая также разрешает запись в эту службу, так как это разрешение не требуется для операции чтения. Соответственно необходимо еще проверить, что область действия назначенной роли ограничена только теми ресурсами, которые необходимо прочитать.
Необходимо создать назначение ролей, которое предоставляет доступ к контейнеру BLOB-объектов во время выполнения. Ролей управления, таких как Владелец, недостаточно. В следующей таблице показаны встроенные роли, которые рекомендуется использовать вместе с расширением BLOB-объекта службы хранилища при обычной работе. Приложению могут потребоваться дополнительные разрешения на основе написанного кода.
Тип привязки | Примеры встроенных ролей |
---|---|
Триггер | Владелец данных BLOB-объектов хранилища и участникданных очереди хранилища 1 Дополнительные разрешения также должны быть предоставлены подключению AzureWebJobsStorage.2 |
Входные привязки | читатель данных больших двоичных объектов хранилища. |
Выходные привязки | владелец данных BLOB-объектов хранилища; |
1 Триггер BLOB-объекта обрабатывает сбой при нескольких попытках и записывает подозрительные BLOB-объекты в очередь в учетной записи хранения, указанной в подключении.
2 Подключение AzureWebJobsStorage используется во внутренней логике для BLOB-объектов и очередей, которые обеспечивают работу триггера. Если он настроен на использование подключения на основе удостоверений, он нуждается в дополнительных разрешениях за пределами требования по умолчанию. Необходимые разрешения охватываются ролями владельца данных BLOB-объектов хранилища, участника очередей хранилища и участника учетной записи хранения. Для получения дополнительных сведений см. раздел Подключение к хранилищу узла с помощью удостоверения.
Шаблоны имен больших двоичных объектов
Вы можете указать шаблон имени большого двоичного объекта в свойстве 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 минут, если приложение-функция стало неактивным.
Предупреждение
Журналы службы хранилища создаются по принципу "насколько возможно". Регистрация всех событий не гарантируется. В некоторых случаях журналы могут пропускаться.
Если требуется более быстрая или более надежная обработка BLOB-объектов, следует рассмотреть возможность переключения размещения на использование плана Служба приложений с включенной функцией AlwaysOn, что может привести к увеличению затрат. Можно также использовать триггер, отличный от классического триггера опроса BLOB-объектов. Дополнительные сведения и сравнение различных вариантов активации контейнеров хранилища BLOB-объектов см. в разделе "Триггер" в контейнере BLOB-объектов.
Уведомления о получении большого двоичного объекта
Среда выполнения Функций Azure гарантирует, что для одного и того же нового или обновленного BLOB-объекта функция активации BLOB-объекта будет вызываться только один раз. Для определения того, обработана ли версия этого BLOB-объекта, сохраняются уведомления о получении BLOB-объекта.
Функции Azure сохраняют уведомления о получении BLOB-объектов в контейнере с именем azure-webjobs-hosts в учетной записи хранения Azure для приложения-функции (указывается с помощью параметра приложения AzureWebJobsStorage
). Уведомление о получении большого двоичного объекта содержит следующую информацию:
- Активируемая функция (
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
например:MyFunctionApp.Functions.CopyBlob
) - имя контейнера;
- Тип большого двоичного объекта (
BlockBlob
илиPageBlob
) - имя большого двоичного объекта;
- ETag (идентификатор версии больших двоичных объектов, например
0x8D1DC6E70A277EF
)
Чтобы выполнить принудительную повторную обработку большого двоичного объекта, удалите уведомление о получении этого большого двоичного объекта из контейнера azure-webjobs-hosts вручную. Хотя повторная обработка может не выполняться немедленно, она гарантированно будет выполняться в более поздний момент времени. Чтобы выполнить повторную обработку немедленно, можно обновить большой двоичный объект scaninfo в azure-webjobs-hosts/blobscaninfo. Все большие двоичные объекты с последним измененным штампом времени после свойства LatestScan
будут просканированы снова.
Подозрительные BLOB-объекты
При сбое функции триггера BLOB-объекта Функции Azure по умолчанию выполняют ее для этого BLOB-объекта еще 5 раз.
В случае сбоя после 5 попыток запуска Функции Azure добавляют сообщение в очередь службы хранилища с именем webjobs-blobtrigger-poison. Можно настроить максимальное количество попыток. Тот же параметр MaxDequeueCount используется для обработки подозрительных больших двоичных объектов и подозрительных сообщений очереди. Сообщением очереди для подозрительных больших двоичных объектов является объект JSON, содержащий следующие свойства:
- FunctionId (в формате
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
) - BlobType (
BlockBlob
илиPageBlob
) - ContainerName
- BlobName
- ETag (идентификатор версии больших двоичных объектов, например
0x8D1DC6E70A277EF
)
Использование памяти и параллелизм
При привязке к выходному типу, который не поддерживает потоковую передачу, например string
илиByte[]
, среда выполнения должна загружать весь большой двоичный объект в память более одного раза во время обработки. Это может привести к более высокому использованию памяти при обработке больших двоичных объектов. По возможности используйте тип поддержки потоков. Поддержка типов зависит от режима C# и версии расширения. Дополнительные сведения см. в разделе "Типы привязки".
В настоящее время среда выполнения должна загружать весь большой двоичный объект в память более одного раза во время обработки. Это может привести к более высокому использованию памяти при обработке больших двоичных объектов.
Использование памяти может быть дополнительно затронуто, если несколько экземпляров функций одновременно обрабатывают данные BLOB-объектов. Если у вас возникли проблемы с памятью с помощью триггера БОЛЬШОго двоичного объекта, рассмотрите возможность уменьшения числа разрешенных одновременных выполнений. Конечно, снижение параллелизма может иметь побочный эффект увеличения невыполненной работы больших двоичных объектов, ожидающих обработки. Ограничения памяти приложения-функции зависят от плана. Дополнительные сведения см. в статье Ограничения службы.
Способ управления числом параллельных выполнений зависит от используемого расширения хранилища.
При использовании расширения хранилища версии 5.0.0 или более поздней версии вы управляете параллелизмом триггера с помощью maxDegreeOfParallelism
параметра конфигурации больших двоичных объектов в host.json.
Ограничения применяются отдельно к каждой функции, которая использует триггер большого двоичного объекта.
Свойства host.json
В файле host.json содержатся параметры, управляющие поведением триггера HTTP. Дополнительные сведения о доступных настройках см. в разделе Настройка host.json.