Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Триггер Azure Cosmos DB использует канал изменений Azure Cosmos DB для прослушивания вставок и обновлений между секциями. Канал изменений публикует новые и обновленные элементы, не включая обновления из удаления. Полный сценарий, использующий триггер Azure Cosmos DB, см. в разделе Quickstart: реагирование на изменения базы данных в Azure Cosmos DB с помощью Функции Azure.
Сведения об установке и настройке см. в обзорной статье.
Решения по масштабированию Cosmos DB для планов "Потребление" и "Премиум" выполняются с помощью масштабирования на основе целевого объекта. Дополнительные сведения см. в статье о масштабировании на основе целевого объекта.
Внимание
В этой статье используются вкладки для поддержки нескольких версий модели программирования Node.js. Модель версии 4 общедоступна и предназначена для более гибкого и интуитивно понятного интерфейса для разработчиков JavaScript и TypeScript. Дополнительные сведения о работе модели версии 4 см. в руководстве разработчика Функции Azure Node.js разработчика. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.
Функции Azure поддерживает две модели программирования для Python. Способ определения привязок зависит от выбранной модели программирования.
Модель программирования Python версии 2 позволяет определять привязки с помощью декораторов непосредственно в коде функции Python. Дополнительные сведения см. в руководстве разработчика Python.
Эта статья поддерживает обе модели программирования.
Пример
Использование триггера зависит от версии пакета расширения и модальности C#, применяемой в приложении-функции. Это может быть один из следующих вариантов:
Изолированная библиотека классов рабочих процессов, скомпилированная функция C# выполняется в процессе, изолированном от среды выполнения.
Следующие примеры зависят от версии расширения для заданного режима C#.
В этом примере используются ссылки на параметры приложения и включается обработка ошибок. Сначала определите тип модели:
public class ToDoItem
{
public string? Id { get; set; }
public string? Description { get; set; }
}
Следующая функция выполняется при вставке или обновлении в указанной базе данных и контейнере:
[Function("CosmosTrigger")]
public void Run([CosmosDBTrigger(
databaseName: "%COSMOS_DATABASE_NAME%",
containerName: "%COSMOS_CONTAINER_NAME%",
Connection = "COSMOS_CONNECTION",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true)] IReadOnlyList<ToDoItem> documents,
FunctionContext context)
{
if (documents is not null && documents.Any())
{
_logger.LogInformation("Documents modified: {count}", documents.Count);
foreach (var doc in documents)
{
try
{
_logger.LogInformation("Processing document Id: {id}", doc.Id);
// Add your business logic here
}
catch (Exception ex)
{
_logger.LogError(ex, "Error processing document {id}", doc.Id);
// Continue processing remaining documents
}
}
}
}
[Function("health")]
public IActionResult HealthCheck([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "health")] HttpRequest req)
{
return new OkResult();
}
В предыдущем примере используются ссылки на параметры приложения (%VAR_NAME%) вместо жестко закодированных значений. Сведения о конфигурации см. на вкладке "Параметры приложения" и руководство по локальной разработке.
Эта функция вызывается при вставке или обновлении в указанной базе данных и контейнере.
Из-за изменений схемы в пакете SDK Azure Cosmos DB версии 4.x расширения Azure Cosmos DB требуется azure-functions-java-library версии 3.0.0 для функций Java.
@FunctionName("CosmosDBTriggerFunction")
public void run(
@CosmosDBTrigger(
name = "items",
databaseName = "ToDoList",
containerName = "Items",
leaseContainerName="leases",
connection = "AzureCosmosDBConnection",
createLeaseContainerIfNotExists = true
)
Object inputItem,
final ExecutionContext context
) {
context.getLogger().info("Items modified: " + inputItems.size());
}
В библиотеке среды выполнения функций Java используйте заметку @CosmosDBTrigger для параметров, значение которых исходит от Azure Cosmos DB. Используйте эту заметку с собственными типами Java, обычными объектами Java (POJOs) или значениями, допускаемыми значением NULL, с помощью Optional<T>.
В следующем примере показана функция триггера Azure Cosmos DB TypeScript. Функция записывает сообщения журнала при добавлении или изменении записей Azure Cosmos DB.
import { app, InvocationContext } from '@azure/functions';
export async function cosmosDBTrigger1(documents: unknown[], context: InvocationContext): Promise<void> {
context.log(`Cosmos DB function processed ${documents.length} documents`);
}
app.cosmosDB('cosmosDBTrigger1', {
connection: '<connection-app-setting>',
databaseName: 'Tasks',
containerName: 'Items',
createLeaseContainerIfNotExists: true,
handler: cosmosDBTrigger1,
});
В следующем примере показана функция триггера Azure Cosmos DB JavaScript. Функция записывает сообщения журнала при добавлении или изменении записей Azure Cosmos DB.
const { app } = require('@azure/functions');
app.cosmosDB('cosmosDBTrigger1', {
connection: '<connection-app-setting>',
databaseName: 'Tasks',
containerName: 'Items',
createLeaseContainerIfNotExists: true,
handler: (documents, context) => {
context.log(`Cosmos DB function processed ${documents.length} documents`);
},
});
В следующем примере показано, как запустить функцию в качестве изменений данных в Azure Cosmos DB.
{
"type": "cosmosDBTrigger",
"name": "documents",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "<connection-app-setting>",
"databaseName": "Tasks",
"collectionName": "Items",
"createLeaseCollectionIfNotExists": true
}
Обратите внимание, что некоторые имена атрибутов привязки изменились в версии 4.x расширения Azure Cosmos DB.
В файле run.ps1 вы имеете доступ к документу, активирующему функцию, через параметр $Documents.
param($Documents, $TriggerMetadata)
Write-Host "First document Id modified : $($Documents[0].id)"
В следующем примере показана привязка триггера Azure Cosmos DB. Пример зависит от того, используется ли модель программирования v1 или версии Python 2.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="CosmosDBTrigger")
@app.cosmos_db_trigger(arg_name="documents",
database_name="%COSMOS_DATABASE_NAME%",
container_name="%COSMOS_CONTAINER_NAME%",
connection="COSMOS_CONNECTION",
lease_container_name="leases",
create_lease_container_if_not_exists="true")
def cosmos_trigger(documents: func.DocumentList) -> str:
if documents:
for doc in documents:
try:
logging.info('Processing document id: %s', doc['id'])
# Add your business logic here
except Exception as e:
logging.error('Error processing document %s: %s', doc.get('id', 'unknown'), str(e))
# Continue processing remaining documents
@app.function_name(name="health")
@app.route(route="health", methods=["GET"])
def health_check(req: func.HttpRequest) -> func.HttpResponse:
"""Health check endpoint for monitoring."""
return func.HttpResponse("OK", status_code=200)
В предыдущем примере используются ссылки на параметры приложения (%VAR_NAME%) вместо жестко закодированных значений.
Параметры приложения
Настройте эти параметры приложения для подключений на основе удостоверений:
| Setting | Description | Пример |
|---|---|---|
COSMOS_DATABASE_NAME |
Имя базы данных Azure Cosmos DB | my-database |
COSMOS_CONTAINER_NAME |
Имя контейнера для мониторинга | my-container |
COSMOS_CONNECTION__accountEndpoint |
конечная точка учетной записи Azure Cosmos DB | https://mycosmosdb.documents.azure.com:443/ |
COSMOS_CONNECTION__credential |
Для UAMI задано значение managedidentity |
managedidentity |
COSMOS_CONNECTION__clientId |
Идентификатор клиента управляемой идентичности, назначенной пользователем | 00000000-0000-0000-0000-000000000000 |
Локальная разработка
Для локальной разработки local.settings.json создайте файл:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"COSMOS_DATABASE_NAME": "my-database",
"COSMOS_CONTAINER_NAME": "my-container",
"COSMOS_CONNECTION__accountEndpoint": "https://mycosmosdb.documents.azure.com:443/"
}
}
Подсказка
Для локальной разработки опущений COSMOS_CONNECTION__credential и COSMOS_CONNECTION__clientId.
DefaultAzureCredential пытается выполнить несколько учетных данных, включая учетные данные входа Azure CLI.
Необходимые условия для локальной разработки:
-
Azure CLI с завершенным
az login - Запущен эмулятор хранилища Azurite (
azurite --silent)
Атрибуты
Библиотеки C# для определения функции используются как внутрипроцессные, так и CosmosDBTriggerAttribute библиотеки C#. Вместо этого скрипт C# использует файл конфигурации function.json, как описано в руководстве по скриптам C#.
Определенные свойства зависят от модели процесса и версии расширения:
Изолированные библиотеки рабочих процессов используют CosmosDBTriggerAttribute из пространства имен Майкрософт.Azure.Functions.Worker, которое определяет следующие свойства:
| Свойство атрибута | Description |
|---|---|
| Соединение | Имя коллекции параметров или параметров приложения, указывающее, как подключиться к отслеживаемой учетной записи Azure Cosmos DB. Дополнительные сведения см. в разделе Соединения. |
| DatabaseName | Имя базы данных Azure Cosmos DB с отслеживаемой контейнером. |
| Имя контейнера | Имя отслеживаемого контейнера. |
| LeaseConnection | (Необязательно) Имя параметра или коллекции параметров приложения, указывающее, как подключиться к учетной записи Azure Cosmos DB, содержащей контейнер аренды. Если значение не задано, используется значение Connection. Этот параметр задается автоматически при создании привязки на портале. Connection string для контейнера аренды должны иметь разрешения на запись. |
| LeaseDatabaseName | (Необязательно.) Имя базы данных, в которой содержится контейнер, используемый для хранения аренд. Если значение не задано, используется значение параметра databaseName. |
| LeaseContainerName | (Необязательно.) Имя контейнера, используемого для хранения аренд. Если значение не задано, используется значение leases. |
| CreateLeaseContainerIfNotExists | (Необязательно.) Если задано значение true, контейнер аренд создается автоматически, если он еще не создан. Значение по умолчанию — false. При использовании удостоверений Microsoft Entra, если задано значение true, создание контейнеров не разрешенной операции и функция не сможет запуститься. |
| LeasesContainerThroughput | (Необязательно.) Определяет количество единиц запроса для назначения при создании контейнера аренд. Этот параметр используется, только если для CreateLeaseContainerIfNotExists задано значение true. Этот параметр задается автоматически при создании привязки с помощью портала. |
| LeaseContainerPrefix | (Необязательно.) Если этот параметр задан, значение добавляется в качестве префикса к арендам, созданным в контейнере аренд для этой функции. Использование префикса позволяет двум отдельным Функции Azure совместно использовать один контейнер аренды с помощью разных префиксов. |
| FeedPollDelay | (Необязательно.) Определяет задержку между опросами секции на наличие новых изменений в веб-канале, после того как все текущие изменения будут утеряны (в миллисекундах). Значение по умолчанию равно 5000 миллисекунд, или 5 секундам. |
| LeaseAcquireInterval | (Дополнительно) Если параметр задан, то он определяет интервал для запуска задачи вычисления при условии равномерности распределения секций между известными экземплярами узла (в миллисекундах). По умолчанию это 13000 (13 секунд). |
| LeaseExpirationInterval | (Дополнительно) Если параметр задан, то он определяет интервал, за который берется аренда, представляющая секцию (в миллисекундах). Если аренда не будет обновлена в течение этого интервала, это приведет к ее истечению и владение секцией перейдет к другому экземпляру. По умолчанию это 60000 (60 секунд). |
| LeaseRenewInterval | (Дополнительно) Если параметр задан, то он определяет интервал продления для всех аренд в разделах, которые на данный момент занятые экземплярами (в миллисекундах). По умолчанию это 17000 (17 секунд). |
| MaxItemsPerInvocation | (Необязательно.) Если это свойство задано, оно устанавливает максимальное число полученных элементов на вызов функции. Если операции в отслеживаемом контейнере выполняются с помощью хранимых процедур, область транзакции сохраняется при считывании элементов из канала изменений. В результате число полученных элементов может быть выше указанного значения, чтобы элементы, измененные одной транзакцией, возвращались как часть одного атомарного пакета. |
| StartFromBeginning | (Необязательно.) Этот параметр указывает триггеру считывать изменения с начала истории изменений контейнера, а не с текущего момента времени. Считывание с начала возможно только при первом запуске триггера, так как при последующих запусках контрольные точки уже будут сохранены. Если установить для этого параметра значение true при уже созданных арендах, этот параметр не будет иметь никакого эффекта. |
| StartFromTime | (Необязательно.) Возвращает или задает дату и время для начала инициализации операции чтения канала изменений. Рекомендуемый формат — ISO 8601 с указателем UTC, например 2021-02-16T14:19:29Z. Такой подход используется только для задания начального состояния триггера. После того как триггер перешел в состояние аренды, изменение этого значения не будет иметь никакого эффекта. |
| PreferredLocations | (Необязательно) Определяет предпочтительные расположения (регионы) для геореплицированных учетных записей базы данных в службе Azure Cosmos DB. Значения должны быть разделены запятыми. Например, "Восточная часть США,Центрально-южная часть США,Северная Европа". |
Декораторы
Применяется только к модели программирования Python версии 2.
Для функций Python версии 2, определенных с помощью декоратора, cosmos_db_trigger (extension 4.x) поддерживает следующие свойства:
| Свойство | Description |
|---|---|
arg_name |
Имя переменной, используемое в коде функции, представляющей список документов с изменениями. |
database_name |
Имя базы данных Azure Cosmos DB. Поддерживает %VAR_NAME% синтаксис для ссылки на параметры приложения. |
container_name |
Имя отслеживаемого контейнера Azure Cosmos DB. Поддерживает %VAR_NAME% синтаксис. |
connection |
Имя параметра приложения или префикса параметров для подключений на основе удостоверений (например, COSMOS_CONNECTION разрешает и COSMOS_CONNECTION__accountEndpointт. д.). |
lease_container_name |
Имя контейнера, используемого для хранения аренды. |
create_lease_container_if_not_exists |
При trueавтоматическом создании контейнера аренды, если он не существует. |
Сведения о функциях Python, определенных с помощью
Заметки
Из-за изменений схемы в пакете SDK Azure Cosmos DB версии 4.x расширения Azure Cosmos DB требуется azure-functions-java-library версии 3.0.0 для функций Java.
Используйте заметку @CosmosDBTrigger для параметров, которые считывают данные из Azure Cosmos DB. Эта заметка поддерживает следующие свойства:
| Свойство атрибута | Description |
|---|---|
| Подключение | Имя коллекции параметров или параметров приложения, указывающее, как подключиться к отслеживаемой учетной записи Azure Cosmos DB. Дополнительные сведения см. в разделе Соединения. |
| name | Имя функции. |
| databaseName | Имя базы данных Azure Cosmos DB с отслеживаемой контейнером. |
| containerName | Имя отслеживаемого контейнера. |
| leaseConnectionStringSetting | (Необязательно) Имя параметра или коллекции параметров приложения, указывающее, как подключиться к учетной записи Azure Cosmos DB, содержащей контейнер аренды. Если значение не задано, используется значение Connection. Этот параметр задается автоматически при создании привязки на портале. Connection string для контейнера аренды должны иметь разрешения на запись. |
| leaseDatabaseName | (Необязательно.) Имя базы данных, в которой содержится контейнер, используемый для хранения аренд. Если значение не задано, используется значение параметра databaseName. |
| leaseContainerName | (Необязательно.) Имя контейнера, используемого для хранения аренд. Если значение не задано, используется значение leases. |
| createLeaseContainerIfNotExists | (Необязательно.) Если задано значение true, контейнер аренд создается автоматически, если он еще не создан. Значение по умолчанию — false. При использовании удостоверений Microsoft Entra, если задано значение true, создание контейнеров не разрешенной операции и приложение-функция не может запускаться. |
| leasesContainerThroughput | (Необязательно.) Определяет количество единиц запроса для назначения при создании контейнера аренд. Этот параметр используется, только если для CreateLeaseContainerIfNotExists задано значение true. Этот параметр задается автоматически при создании привязки с помощью портала. |
| leaseContainerPrefix | (Необязательно.) Если этот параметр задан, значение добавляется в качестве префикса к арендам, созданным в контейнере аренд для этой функции. Использование префикса позволяет двум отдельным Функции Azure совместно использовать один контейнер аренды с помощью разных префиксов. |
| feedPollDelay | (Необязательно.) Определяет задержку между опросами секции на наличие новых изменений в веб-канале, после того как все текущие изменения будут утеряны (в миллисекундах). Значение по умолчанию равно 5000 миллисекунд, или 5 секундам. |
| leaseAcquireInterval | (Дополнительно) Если параметр задан, то он определяет интервал для запуска задачи вычисления при условии равномерности распределения секций между известными экземплярами узла (в миллисекундах). По умолчанию это 13000 (13 секунд). |
| leaseExpirationInterval | (Дополнительно) Если параметр задан, то он определяет интервал, за который берется аренда, представляющая секцию (в миллисекундах). Если аренда не продлевается в течение этого интервала, срок ее действия истекает, а владение секцией переходит к другому экземпляру. По умолчанию это 60000 (60 секунд). |
| leaseRenewInterval | (Необязательно) Если задано, он определяет интервал продления для всех арендных разделов, хранящиеся в настоящее время экземпляром. По умолчанию это 17000 (17 секунд). |
| maxItemsPerInvocation | (Необязательно.) Если это свойство задано, оно устанавливает максимальное число полученных элементов на вызов функции. Если операции в отслеживаемом контейнере выполняются с помощью хранимых процедур, область транзакции сохраняется при считывании элементов из канала изменений. В результате число полученных элементов может быть выше указанного значения, чтобы элементы, измененные одной транзакцией, возвращались как часть одного атомарного пакета. |
| startFromBeginning | (Необязательно.) Этот параметр указывает триггеру считывать изменения с начала истории изменений контейнера, а не с текущего момента времени. Считывание с начала возможно только при первом запуске триггера, так как при последующих запусках контрольные точки уже будут сохранены. Если установить для этого параметра значение true при уже созданных арендах, этот параметр не будет иметь никакого эффекта. |
| preferredLocations | (Необязательно) Определяет предпочтительные расположения (регионы) для геореплицированных учетных записей базы данных в службе Azure Cosmos DB. Значения должны быть разделены запятыми. Например: East US,South Central US,North Europe. |
Настройка
Применяется только к модели программирования Python версии 1.
В следующей таблице описываются свойства, которые можно задать в объекте options , который передается методу app.cosmosDB() .
typeСвойства directionи name свойства не применяются к модели версии 4.
В следующей таблице описаны свойства конфигурации привязки, задаваемые в файле function.json, свойства в котором различаются по версии расширения:
| Свойство в function.json | Description |
|---|---|
| type | Должен иметь значениеcosmosDBTrigger. |
| direction | Должен иметь значениеin. Этот параметр устанавливается автоматически при создании триггера на портале Azure. |
| name | Имя переменной, используемое в коде функции, представляющей список документов с изменениями. |
| Подключение | Имя коллекции параметров или параметров приложения, указывающее, как подключиться к отслеживаемой учетной записи Azure Cosmos DB. Дополнительные сведения см. в разделе Соединения. |
| databaseName | Имя базы данных Azure Cosmos DB с отслеживаемой контейнером. |
| containerName | Имя отслеживаемого контейнера. |
| leaseConnection | (Необязательно) Имя параметра или контейнера приложения, указывающего, как подключиться к учетной записи Azure Cosmos DB, содержащей контейнер аренды. Если значение не задано, используется значение connection. Этот параметр задается автоматически при создании привязки на портале. Connection string для контейнера аренды должны иметь разрешения на запись. |
| leaseDatabaseName | (Необязательно.) Имя базы данных, в которой содержится контейнер, используемый для хранения аренд. Если значение не задано, используется значение параметра databaseName. |
| leaseContainerName | (Необязательно.) Имя контейнера, используемого для хранения аренд. Если значение не задано, используется значение leases. |
| createLeaseContainerIfNotExists | (Необязательно.) Если задано значение true, контейнер аренд создается автоматически, если он еще не создан. Значение по умолчанию — false. При использовании удостоверений Microsoft Entra, если задано значение true, создание контейнеров не разрешенной операции и функция не сможет запуститься. |
| leasesContainerThroughput | (Необязательно.) Определяет количество единиц запроса для назначения при создании контейнера аренд. Этот параметр используется, только если для createLeaseContainerIfNotExists задано значение true. Этот параметр задается автоматически при создании привязки с помощью портала. |
| leaseContainerPrefix | (Необязательно.) Если этот параметр задан, значение добавляется в качестве префикса к арендам, созданным в контейнере аренд для этой функции. Использование префикса позволяет двум отдельным Функции Azure совместно использовать один контейнер аренды с помощью разных префиксов. |
| feedPollDelay | (Необязательно.) Определяет задержку между опросами секции на наличие новых изменений в веб-канале, после того как все текущие изменения будут утеряны (в миллисекундах). Значение по умолчанию равно 5000 миллисекунд, или 5 секундам. |
| leaseAcquireInterval | (Дополнительно) Если параметр задан, то он определяет интервал для запуска задачи вычисления при условии равномерности распределения секций между известными экземплярами узла (в миллисекундах). По умолчанию это 13000 (13 секунд). |
| leaseExpirationInterval | (Дополнительно) Если параметр задан, то он определяет интервал, за который берется аренда, представляющая секцию (в миллисекундах). Если аренда не будет обновлена в течение этого интервала, это приведет к ее истечению и владение секцией перейдет к другому экземпляру. По умолчанию это 60000 (60 секунд). |
| leaseRenewInterval | (Дополнительно) Если параметр задан, то он определяет интервал продления для всех аренд в разделах, которые на данный момент занятые экземплярами (в миллисекундах). По умолчанию это 17000 (17 секунд). |
| maxItemsPerInvocation | (Необязательно.) Если это свойство задано, оно устанавливает максимальное число полученных элементов на вызов функции. Если операции в отслеживаемом контейнере выполняются с помощью хранимых процедур, область транзакции сохраняется при считывании элементов из канала изменений. В результате число полученных элементов может быть выше указанного значения, чтобы элементы, измененные одной транзакцией, возвращались как часть одного атомарного пакета. |
| startFromBeginning | (Необязательно.) Этот параметр указывает триггеру считывать изменения с начала истории изменений контейнера, а не с текущего момента времени. Считывание с начала возможно только при первом запуске триггера, так как при последующих запусках контрольные точки уже будут сохранены. Если установить для этого параметра значение true при уже созданных арендах, этот параметр не будет иметь никакого эффекта. |
| startFromTime | (Необязательно.) Возвращает или задает дату и время для начала инициализации операции чтения канала изменений. Рекомендуемый формат — ISO 8601 с указателем UTC, например 2021-02-16T14:19:29Z. Такой подход используется только для задания начального состояния триггера. После того как триггер перешел в состояние аренды, изменение этого значения не будет иметь никакого эффекта. |
| preferredLocations | (Необязательно) Определяет предпочтительные расположения (регионы) для геореплицированных учетных записей базы данных в службе Azure Cosmos DB. Значения должны быть разделены запятыми. Например, "Восточная часть США,Центрально-южная часть США,Северная Европа". |
Полные примеры см. в разделе "Пример".
Использование
Триггеру требуется вторая коллекция, которая используется для хранения аренды в разделах. Триггер работает только в том случае, если доступны как отслеживаемая коллекция, так и коллекция, содержащая аренды.
Внимание
Если вы настроите несколько функций для использования триггера Azure Cosmos DB для одной коллекции, каждая функция должна использовать выделенную коллекцию аренды или указать другую LeaseCollectionPrefix для каждой функции. В противном случае активируется только одна из функций. Сведения о префиксе см. в разделе Атрибуты.
Внимание
Если вы настроите несколько функций для использования триггера Azure Cosmos DB для одной коллекции, каждая функция должна использовать выделенную коллекцию аренды или указать другую leaseCollectionPrefix для каждой функции. В противном случае активируется только одна из функций. Сведения о префиксе см. в разделе Заметки.
Внимание
Если вы настроите несколько функций для использования триггера Azure Cosmos DB для одной коллекции, каждая функция должна использовать выделенную коллекцию аренды или указать другую leaseCollectionPrefix для каждой функции. В противном случае активируется только одна из функций. Сведения о префиксе см. в разделе с конфигурацией.
Триггер не указывает, был ли документ обновлен или вставлен. Он просто предоставляет сам документ. Если необходимо обрабатывать обновления и вставлять изменения по-другому, реализуйте поля метки времени для вставки или обновления.
Тип параметра, поддерживаемый триггером Azure Cosmos DB, зависит от версии среды выполнения Функций, версии пакета расширения и используемой модальности C#.
Если требуется, чтобы функция обрабатывала один документ, триггер Cosmos DB может привязаться к следующим типам:
| Тип | Description |
|---|---|
| Сериализуемые в JSON типы | Функции пытаются десериализировать данные JSON документа из канала изменений Cosmos DB в обычный тип объекта CLR (POCO). |
Если требуется, чтобы функция обрабатывала пакет документов, триггер Cosmos DB может привязаться к следующим типам:
| Тип | Description |
|---|---|
IEnumerable<T>где T является сериализуемым типом JSON |
Перечисление сущностей, включенных в пакет. Каждая запись представляет один документ из канала изменений Cosmos DB. |
Связи
Конфигурация connectionStringSetting/connection и leaseConnectionStringSetting/leaseConnection свойства ссылочной среды, указывающая, как приложение подключается к Azure Cosmos DB. Они могут указать следующее:
- Имя параметра приложения, содержащего строка подключения.
- Имя общего префикса для нескольких параметров приложения, которое вместе определяет подключение к управляемому удостоверению. Этот параметр доступен только для версий
connectionиleaseConnectionиз версии расширения 4.x или выше.
Если настроенное значение одновременно точно соответствует одному параметру и является префиксом для других параметров, то используется точное совпадение.
Подсказка
Для повышения безопасности рекомендуется использовать подключения к управляемому удостоверению. Строки подключения включают учетные данные, которые могут быть предоставлены, а управляемые удостоверения устраняют необходимость управления секретами.
Если вы используете version 4.x или более поздней версии расширения вместо использования строка подключения с секретом, приложение может использовать удостоверение Microsoft Entra. Для этого определите параметры под общим префиксом, который сопоставляется со свойством подключения в конфигурации триггера и привязки.
В этом режиме расширение требует следующих параметров приложения:
| Параметр на основе шаблона | Description | Тип идентификации |
|---|---|---|
<CONNECTION_NAME_PREFIX>__accountEndpoint |
URI конечной точки учетной записи Azure Cosmos DB. | Назначаемое системой или назначаемое пользователем |
<CONNECTION_NAME_PREFIX>__credential |
Должен иметь значениеmanagedidentity. |
Назначено пользователем |
<CONNECTION_NAME_PREFIX>__clientId |
Идентификатор клиента управляемой идентификации, назначаемой пользователем. | Назначено пользователем |
Значение, которое вы заменяете <CONNECTION_NAME_PREFIX> , обрабатывается расширением привязки в качестве имени параметра подключения.
Например, если конфигурация привязки задает connection = "CosmosDBConnection" управляемое удостоверение, назначаемое пользователем, настройте следующие параметры приложения:
{
"CosmosDBConnection__accountEndpoint": "https://mycosmosdb.documents.azure.com:443/",
"CosmosDBConnection__credential": "managedidentity",
"CosmosDBConnection__clientId": "00000000-0000-0000-0000-000000000000"
}
Подсказка
Используйте управляемые удостоверения, назначаемые пользователем, для рабочих сценариев, где требуется подробный контроль над разрешениями удостоверения в нескольких ресурсах.
Дополнительные параметры в шаблоне можно использовать для дальнейшей настройки подключения. См. раздел Общие свойства подключений на основе удостоверений.
При размещении в службе Функции Azure подключения на основе удостоверений используют удостоверение управляемое удостоверение. По умолчанию используется назначаемое системой удостоверение, однако вы можете указать назначаемое пользователем удостоверение с помощью свойств credential и clientID. Обратите внимание, что настройка назначаемого пользователем удостоверения с идентификатором ресурса не поддерживается. При выполнении в других контекстах, например при локальной разработке, вместо этого используется удостоверение разработчика, хотя это можно настроить. См. раздел Локальная разработка с использованием подключений на основе удостоверений.
Предоставление разрешения удостоверению
Любое используемое удостоверение должно иметь разрешения на выполнение предполагаемых действий. Для большинства служб Azure это означает, что необходимо назначение роли в Azure RBAC с помощью встроенных или настраиваемых ролей, которые предоставляют эти разрешения.
Внимание
Иногда целевая служба может предоставлять разрешения, которые не являются обязательными для всех контекстов. Там, где это возможно, придерживайтесь принципа минимальных привилегий, предоставляя удостоверению лишь самые необходимые привилегии. Например, если приложению требуется только возможность чтения из источника данных, используйте роль, которая имеет разрешение только на чтение. Было бы неуместным назначить роль, которая также разрешает запись в эту службу, так как это разрешение не требуется для операции чтения. Соответственно необходимо еще проверить, что область действия назначенной роли ограничена только теми ресурсами, которые необходимо прочитать.
Cosmos DB не использует Azure RBAC для операций с данными. Вместо этого она использует встроенную систему RBAC Cosmos DB, созданную на основе аналогичных концепций. Вам потребуется создать назначение ролей, которое предоставляет доступ к учетной записи базы данных во время выполнения. Azure роли управления RBAC, такие как Owner недостаточно. В следующей таблице показаны встроенные роли, которые рекомендуется использовать при использовании расширения Azure Cosmos DB в обычной работе. Приложению могут потребоваться дополнительные разрешения в зависимости от написанного кода.
| Тип привязки | Пример встроенных ролей1 |
|---|---|
| Триггер2 | Встроенный участник данных Cosmos DB |
| Входные привязки | Встроенное средство чтения данных Cosmos DB |
| Выходные привязки | Встроенный участник данных Cosmos DB |
1 Эти роли нельзя использовать в назначении ролей RBAC Azure. Дополнительные сведения о назначении этих ролей см. в встроенной системной документации по RBAC Cosmos DB.
2 При использовании удостоверения Cosmos DB обрабатывает создание контейнера как операцию управления. Он недоступен в качестве операции плоскости данных для триггера. Перед настройкой функции необходимо создать контейнеры, необходимые триггеру (включая контейнер аренды).