Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O gatilho Azure Cosmos DB usa o Azure Cosmos DB feed de alterações para escutar inserções e atualizações entre partições. O feed de alterações publica itens novos e atualizados, sem incluir as atualizações de exclusões. Para obter um cenário de ponta a ponta que usa o gatilho Azure Cosmos DB, consulte Quickstart: responder a alterações de banco de dados em Azure Cosmos DB usando Azure Functions.
Para obter informações sobre a instalação e detalhes de configuração, confira a visão geral.
As decisões de colocação em escala do Cosmos DB para os planos Consumo e Premium são feitas por meio da colocação em escala baseada no destino. Para obter mais informações, confira Colocação em escala baseada em destino.
Importante
Este artigo usa guias para dar suporte a várias versões do modelo de programação Node.js. O modelo v4 normalmente está disponível e foi projetado para oferecer uma experiência mais flexível e intuitiva para desenvolvedores de JavaScript e TypeScript. Para obter mais detalhes sobre como o modelo v4 funciona, consulte o Azure Functions Node.js guia do desenvolvedor. Para saber mais sobre as diferenças entre os modelos v3 e a v4, consulte o Guia de migração.
Azure Functions dá suporte a dois modelos de programação para Python. A maneira como você define suas associações depende do modelo de programação escolhido.
O modelo de programação Python v2 permite definir associações usando decoradores diretamente em seu código de função Python. Para obter mais informações, consulte o guia do desenvolvedor Python.
Este artigo dá suporte a ambos os modelos de programação.
Exemplo
O uso do gatilho depende da versão do pacote de extensão e da modalidade C# usada no aplicativo de funções, que pode ser:
Uma função C# compilada da biblioteca de classes do processo de trabalho isolado é executada em um processo isolado do runtime.
Os exemplos a seguir dependem da versão da extensão para o modo C# fornecido.
Este exemplo usa referências de configurações de aplicativo e inclui tratamento de erros. Primeiro, defina seu tipo de modelo:
public class ToDoItem
{
public string? Id { get; set; }
public string? Description { get; set; }
}
A função a seguir é executada quando ocorrem inserções ou atualizações no banco de dados e contêiner especificados:
[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();
}
O exemplo anterior usa referências de configurações de aplicativo (%VAR_NAME%) em vez de valores codificados. Para obter detalhes de configuração, consulte as configurações do aplicativo e as diretrizes de desenvolvimento local na guia em processo.
Essa função é invocada quando há inserções ou atualizações no banco de dados e no contêiner especificados.
Devido a alterações de esquema no SDK do Azure Cosmos DB, a versão 4.x da extensão Azure Cosmos DB requer azure-functions-java-library V3.0.0 para funções 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());
}
Na biblioteca de runtime Java functions, use a anotação @CosmosDBTrigger em parâmetros cujo valor vem de Azure Cosmos DB. Use essa anotação com tipos de Java nativos, POJOs (objetos Java simples) ou valores anuláveis usando Optional<T>.
O exemplo a seguir mostra uma função Azure Cosmos DB trigger TypeScript. A função grava mensagens de log quando Azure Cosmos DB registros são adicionados ou modificados.
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,
});
O exemplo a seguir mostra um gatilho Azure Cosmos DB A funçãoJavaScript. A função grava mensagens de log quando Azure Cosmos DB registros são adicionados ou modificados.
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`);
},
});
O exemplo a seguir mostra como executar uma função como alterações de dados em Azure Cosmos DB.
{
"type": "cosmosDBTrigger",
"name": "documents",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "<connection-app-setting>",
"databaseName": "Tasks",
"collectionName": "Items",
"createLeaseCollectionIfNotExists": true
}
Observe que alguns dos nomes de atributo de associação foram alterados na versão 4.x da extensão Azure Cosmos DB.
No arquivo run.ps1, você tem acesso ao documento que dispara a função por meio do parâmetro $Documents.
param($Documents, $TriggerMetadata)
Write-Host "First document Id modified : $($Documents[0].id)"
O exemplo a seguir mostra uma associação de gatilho Azure Cosmos DB. O exemplo depende se você usa o v1 ou v2 Python modelo de programação.
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)
O exemplo anterior usa referências de configurações de aplicativo (%VAR_NAME%) em vez de valores codificados.
Definições da aplicação
Defina estas configurações de aplicativo para conexões baseadas em identidade:
| Configurações | Descrição | Exemplo |
|---|---|---|
COSMOS_DATABASE_NAME |
Nome do banco de dados Azure Cosmos DB | my-database |
COSMOS_CONTAINER_NAME |
Nome do contêiner a ser monitorado | my-container |
COSMOS_CONNECTION__accountEndpoint |
Azure Cosmos DB ponto de extremidade da conta | https://mycosmosdb.documents.azure.com:443/ |
COSMOS_CONNECTION__credential |
Definido como managedidentity para UAMI |
managedidentity |
COSMOS_CONNECTION__clientId |
ID do cliente da identidade gerenciada atribuída pelo usuário | 00000000-0000-0000-0000-000000000000 |
Desenvolvimento local
Para desenvolvimento local, crie um local.settings.json arquivo:
{
"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/"
}
}
Dica
Para desenvolvimento local, omita COSMOS_CONNECTION__credential e COSMOS_CONNECTION__clientId. O DefaultAzureCredential tenta várias credenciais em ordem, incluindo suas credenciais de logon CLI do Azure.
Pré-requisitos para desenvolvimento local:
-
CLI do Azure com
az loginconcluído -
Emulador de armazenamento do Azurite em execução (
azurite --silent)
Atributos
As bibliotecas C# em processo e isoladas usam CosmosDBTriggerAttribute para definir a função. Em vez disso, o script C# usa um arquivo de configuração function.json, conforme descrito no guia de script C#.
As propriedades específicas dependem do modelo de processo e da versão da extensão:
Bibliotecas de processo de trabalho isoladas usam CosmosDBTriggerAttribute do namespace Microsoft.Azure.Functions.Worker, que define estas propriedades:
| Propriedade de atributo | Descrição |
|---|---|
| Conexão | O nome de uma coleção de configurações ou configuração de aplicativo que especifica como se conectar à conta Azure Cosmos DB que está sendo monitorada. Para mais informações, consulte as Conexões. |
| DatabaseName | O nome do banco de dados Azure Cosmos DB com o contêiner sendo monitorado. |
| ContainerName | O nome do contêiner que está sendo monitorado. |
| LeaseConnection | (Opcional) O nome de uma coleção de configurações ou configuração de aplicativo que especifica como se conectar à conta Azure Cosmos DB que contém o contêiner de concessão. Quando não definido, o valor Connection é usado. Esse parâmetro é definido automaticamente quando a associação é criada no portal. O cadeia de conexão do contêiner de concessões deve ter permissões de gravação. |
| LeaseDatabaseName | (Opcional) O nome do banco de dados que contém o contêiner usado para armazenar as concessões. Quando não definido, o valor da configuração databaseName é usado. |
| LeaseContainerName | (Opcional) O nome do contêiner usado para armazenar concessões. Quando não definido, o valor leases é usado. |
| CreateLeaseContainerIfNotExists | (Opcional) Quando definido como true, a coleção de contêineres é criada automaticamente quando ela ainda não existe. O valor padrão é false. Ao usar Microsoft Entra identidades se você definir o valor como true, a criação de contêineres não será an operação permitida e sua Função não poderá ser iniciada. |
| LeasesContainerThroughput | (Opcional) Define o número de Unidades de Solicitação que será atribuído quando o contêiner de concessões for criado. Essa configuração é usada apenas quando CreateLeaseContainerIfNotExists está definido como true. Esse parâmetro é definido automaticamente quando a associação é criada usando o portal. |
| LeaseContainerPrefix | (Opcional) Quando definido, o valor é adicionado como um prefixo nas concessões criadas no contêiner de concessões desta função. O uso de um prefixo permite que dois Azure Functions separados compartilhem o mesmo contêiner de concessão usando prefixos diferentes. |
| FeedPollDelay | (Opcional) O horário (em milissegundos) do atraso entre a sondagem de uma partição quanto a novas alterações no feed, depois que todas as alterações atuais forem esvaziadas. O padrão é cinco mil milissegundos (ou cinco segundos). |
| LeaseAcquireInterval | (Opcional) Quando definido, ele define, em milissegundos, o intervalo para disparar uma tarefa para computar se as partições são distribuídas uniformemente entre as instâncias de host conhecidas. O padrão é 13000 (13 segundos). |
| LeaseExpirationInterval | (Opcional), Quando definido, ele define, em milissegundos, o intervalo para o qual a concessão é tomada em uma concessão que representa uma partição. Se a concessão não for renovada dentro deste intervalo, ela será expirada e a propriedade da partição será movida para outra instância. O padrão é 60000 (60 segundos). |
| LeaseRenewInterval | (Opcional) Quando definido, ele define, em milissegundos, o intervalo de renovação para todas as concessões para partições atualmente mantidas por uma instância. O padrão é 17000 (17 segundos). |
| MaxItemsPerInvocation | (Opcional) Quando definida, essa propriedade define o número máximo de itens recebidos por chamada de função. Se as operações no contêiner monitorado forem executadas por meio de procedimentos armazenados, o escopo da transação será preservado durante a leitura de itens do feed de alterações. Como resultado, o número de itens recebidos pode ser maior que o valor especificado para que os itens alterados pela mesma transação sejam retornados como parte de um lote atômico. |
| startFromBeginning | (Opcional) Essa opção informa que o gatilho deve ler as alterações desde o início do histórico de alterações do contêiner, em vez de iniciar na hora atual. Ler do começo funciona apenas na primeira vez em que gatilho inicia, pois nas execuções subsequentes os pontos de verificação já estão armazenados. Configurar essa opção como true quando já houver concessões já criadas não terá nenhum efeito. |
| StartFromTime | (Opcional) Obtém ou define a data e a hora a partir da qual inicializar a operação de leitura do feed de alterações. O formato recomendado é o ISO 8601 com o designador UTC, como 2021-02-16T14:19:29Z. Isso é usado apenas para definir o estado inicial do gatilho. Depois que o gatilho tiver um estado de concessão, a alteração desse valor não terá nenhum efeito. |
| PreferredLocations | (Opcional) Define locais preferenciais (regiões) para contas de banco de dados replicadas geograficamente no serviço Azure Cosmos DB. Os valores devem ser separados por vírgulas. Por exemplo, "Leste dos EUA, Centro-Sul dos EUA, Norte da Europa". |
Decoradores
Aplica somente para o modelo de programação Python v2.
Para Python funções v2 definidas usando um decorador, o cosmos_db_trigger (Extensão 4.x) dá suporte às seguintes propriedades:
| Propriedade | Descrição |
|---|---|
arg_name |
O nome da variável usado no código de função que representa a lista de documentos com alterações. |
database_name |
O nome do banco de dados Azure Cosmos DB.
%VAR_NAME% Dá suporte à sintaxe para fazer referência às configurações do aplicativo. |
container_name |
O nome do contêiner de Azure Cosmos DB que está sendo monitorado.
%VAR_NAME% Dá suporte à sintaxe. |
connection |
O nome de uma configuração de aplicativo ou prefixo de configuração para conexões baseadas em identidade (por exemplo, COSMOS_CONNECTION resolve para COSMOS_CONNECTION__accountEndpointe assim por diante). |
lease_container_name |
O nome do contêiner usado para armazenar concessões. |
create_lease_container_if_not_exists |
Quando true, criará automaticamente o contêiner de concessão se ele não existir. |
Para Python funções definidas usando function.json, consulte a seção Configuration.
Anotações
Devido a alterações de esquema no SDK do Azure Cosmos DB, a versão 4.x da extensão Azure Cosmos DB requer azure-functions-java-library V3.0.0 para funções Java.
Use a anotação @CosmosDBTrigger em parâmetros que leem dados de Azure Cosmos DB. Essa anotação dá suporte às seguintes propriedades:
| Propriedade de atributo | Descrição |
|---|---|
| connection | O nome de uma coleção de configurações ou configuração de aplicativo que especifica como se conectar à conta Azure Cosmos DB que está sendo monitorada. Para mais informações, consulte as Conexões. |
| name | O nome da função. |
| databaseName | O nome do banco de dados Azure Cosmos DB com o contêiner sendo monitorado. |
| containerName | O nome do contêiner que está sendo monitorado. |
| leaseConnectionStringSetting | (Opcional) O nome de uma coleção de configurações ou configuração de aplicativo que especifica como se conectar à conta Azure Cosmos DB que contém o contêiner de concessão. Quando não definido, o valor Connection é usado. Esse parâmetro é definido automaticamente quando a associação é criada no portal. O cadeia de conexão do contêiner de concessões deve ter permissões de gravação. |
| leaseDatabaseName | (Opcional) O nome do banco de dados que contém o contêiner usado para armazenar as concessões. Quando não definido, o valor da configuração databaseName é usado. |
| leaseContainerName | (Opcional) O nome do contêiner usado para armazenar concessões. Quando não definido, o valor leases é usado. |
| createLeaseContainerIfNotExists | (Opcional) Quando definido como true, a coleção de contêineres é criada automaticamente quando ela ainda não existe. O valor padrão é false. Ao usar Microsoft Entra identidades se você definir o valor como true, a criação de contêineres não é an operação permitida e seu aplicativo de funções não tem permissão para iniciar. |
| leasesContainerThroughput | (Opcional) Define o número de Unidades de Solicitação que será atribuído quando o contêiner de concessões for criado. Essa configuração é usada apenas quando CreateLeaseContainerIfNotExists está definido como true. Esse parâmetro é definido automaticamente quando a associação é criada usando o portal. |
| leaseContainerPrefix | (Opcional) Quando definido, o valor é adicionado como um prefixo nas concessões criadas no contêiner de concessões desta função. O uso de um prefixo permite que dois Azure Functions separados compartilhem o mesmo contêiner de concessão usando prefixos diferentes. |
| feedPollDelay | (Opcional) O horário (em milissegundos) do atraso entre a sondagem de uma partição quanto a novas alterações no feed, depois que todas as alterações atuais forem esvaziadas. O padrão é cinco mil milissegundos (ou cinco segundos). |
| leaseAcquireInterval | (Opcional) Quando definido, ele define, em milissegundos, o intervalo para disparar uma tarefa para computar se as partições são distribuídas uniformemente entre as instâncias de host conhecidas. O padrão é 13000 (13 segundos). |
| leaseExpirationInterval | (Opcional), Quando definido, ele define, em milissegundos, o intervalo para o qual a concessão é tomada em uma concessão que representa uma partição. Se a concessão não for renovada dentro desse intervalo, ela expirará e a propriedade da partição será movida para outra instância. O padrão é 60000 (60 segundos). |
| leaseRenewInterval | (Opcional) Quando definido, ele define, em milissegundos, o intervalo de renovação para todas as concessões de partições atualmente mantidas por uma instância. O padrão é 17000 (17 segundos). |
| maxItemsPerInvocation | (Opcional) Quando definida, essa propriedade define o número máximo de itens recebidos por chamada de função. Se as operações no contêiner monitorado forem executadas por meio de procedimentos armazenados, o escopo da transação será preservado durante a leitura de itens do feed de alterações. Como resultado, o número de itens recebidos pode ser maior que o valor especificado para que os itens alterados pela mesma transação sejam retornados como parte de um lote atômico. |
| startFromBeginning | (Opcional) Essa opção informa que o gatilho deve ler as alterações desde o início do histórico de alterações do contêiner, em vez de iniciar na hora atual. Ler do começo funciona apenas na primeira vez em que gatilho inicia, pois nas execuções subsequentes os pontos de verificação já estão armazenados. Configurar essa opção como true quando já houver concessões já criadas não terá nenhum efeito. |
| preferredLocations | (Opcional) Define locais preferenciais (regiões) para contas de banco de dados replicadas geograficamente no serviço Azure Cosmos DB. Os valores devem ser separados por vírgulas. Por exemplo, East US,South Central US,North Europe. |
Configuração
Aplica somente para o modelo de programação Python v1.
A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json. Essas propriedades se diferenciam pela versão da extensão:
| Propriedade function.json | Descrição |
|---|---|
| tipo | Deve ser definido como cosmosDBTrigger. |
| direction | Deve ser definido como in. Esse parâmetro é definido automaticamente quando você cria o gatilho no portal Azure. |
| name | O nome da variável usado no código de função que representa a lista de documentos com alterações. |
| connection | O nome de uma coleção de configurações ou configuração de aplicativo que especifica como se conectar à conta Azure Cosmos DB que está sendo monitorada. Para mais informações, consulte as Conexões. |
| databaseName | O nome do banco de dados Azure Cosmos DB com o contêiner sendo monitorado. |
| containerName | O nome do contêiner que está sendo monitorado. |
| leaseConnection | (Opcional) O nome de uma configuração de aplicativo ou contêiner de configuração que especifica como se conectar à conta Azure Cosmos DB que contém o contêiner de concessão. Quando não definido, o valor connection é usado. Esse parâmetro é definido automaticamente quando a associação é criada no portal. O cadeia de conexão do contêiner de concessões deve ter permissões de gravação. |
| leaseDatabaseName | (Opcional) O nome do banco de dados que contém o contêiner usado para armazenar as concessões. Quando não definido, o valor da configuração databaseName é usado. |
| leaseContainerName | (Opcional) O nome do contêiner usado para armazenar concessões. Quando não definido, o valor leases é usado. |
| createLeaseContainerIfNotExists | (Opcional) Quando definido como true, a coleção de contêineres é criada automaticamente quando ela ainda não existe. O valor padrão é false. Ao usar Microsoft Entra identidades se você definir o valor como true, a criação de contêineres não será an operação permitida e sua Função não poderá ser iniciada. |
| leasesContainerThroughput | (Opcional) Define o número de Unidades de Solicitação que será atribuído quando o contêiner de concessões for criado. Essa configuração é usada apenas quando createLeaseContainerIfNotExists está definido como true. Esse parâmetro é definido automaticamente quando a associação é criada usando o portal. |
| leaseContainerPrefix | (Opcional) Quando definido, o valor é adicionado como um prefixo nas concessões criadas no contêiner de concessões desta função. O uso de um prefixo permite que dois Azure Functions separados compartilhem o mesmo contêiner de concessão usando prefixos diferentes. |
| feedPollDelay | (Opcional) O horário (em milissegundos) do atraso entre a sondagem de uma partição quanto a novas alterações no feed, depois que todas as alterações atuais forem esvaziadas. O padrão é cinco mil milissegundos (ou cinco segundos). |
| leaseAcquireInterval | (Opcional) Quando definido, ele define, em milissegundos, o intervalo para disparar uma tarefa para computar se as partições são distribuídas uniformemente entre as instâncias de host conhecidas. O padrão é 13000 (13 segundos). |
| leaseExpirationInterval | (Opcional), Quando definido, ele define, em milissegundos, o intervalo para o qual a concessão é tomada em uma concessão que representa uma partição. Se a concessão não for renovada dentro deste intervalo, ela será expirada e a propriedade da partição será movida para outra instância. O padrão é 60000 (60 segundos). |
| leaseRenewInterval | (Opcional) Quando definido, ele define, em milissegundos, o intervalo de renovação para todas as concessões para partições atualmente mantidas por uma instância. O padrão é 17000 (17 segundos). |
| maxItemsPerInvocation | (Opcional) Quando definida, essa propriedade define o número máximo de itens recebidos por chamada de função. Se as operações no contêiner monitorado forem executadas por meio de procedimentos armazenados, o escopo da transação será preservado durante a leitura de itens do feed de alterações. Como resultado, o número de itens recebidos pode ser maior que o valor especificado para que os itens alterados pela mesma transação sejam retornados como parte de um lote atômico. |
| startFromBeginning | (Opcional) Essa opção informa que o gatilho deve ler as alterações desde o início do histórico de alterações do contêiner, em vez de iniciar na hora atual. Ler do começo funciona apenas na primeira vez em que gatilho inicia, pois nas execuções subsequentes os pontos de verificação já estão armazenados. Configurar essa opção como true quando já houver concessões já criadas não terá nenhum efeito. |
| startFromTime | (Opcional) Obtém ou define a data e a hora a partir da qual inicializar a operação de leitura do feed de alterações. O formato recomendado é o ISO 8601 com o designador UTC, como 2021-02-16T14:19:29Z. Isso é usado apenas para definir o estado inicial do gatilho. Depois que o gatilho tiver um estado de concessão, a alteração desse valor não terá nenhum efeito. |
| preferredLocations | (Opcional) Define locais preferenciais (regiões) para contas de banco de dados replicadas geograficamente no serviço Azure Cosmos DB. Os valores devem ser separados por vírgulas. Por exemplo, "Leste dos EUA, Centro-Sul dos EUA, Norte da Europa". |
Para obter exemplos completos, consulte a seção Exemplo.
Uso
O gatilho requer uma segunda coleção que ele usa para armazenar concessões sobre as partições. O gatilho só funcionará se a coleção que você está monitorando e a coleção que contém as concessões estiverem disponíveis.
Importante
Se você configurar várias funções para usar um gatilho Azure Cosmos DB para a mesma coleção, cada função deverá usar uma coleção de concessão dedicada ou especificar um LeaseCollectionPrefix diferente para cada função. Caso contrário, apenas uma das funções é acionada. Para obter informações sobre o prefixo, consulte a seção Atributos.
Importante
Se você configurar várias funções para usar um gatilho Azure Cosmos DB para a mesma coleção, cada função deverá usar uma coleção de concessão dedicada ou especificar um leaseCollectionPrefix diferente para cada função. Caso contrário, apenas uma das funções é acionada. Para obter informações sobre o prefixo, consulte a seção Anotações.
Importante
Se você configurar várias funções para usar um gatilho Azure Cosmos DB para a mesma coleção, cada função deverá usar uma coleção de concessão dedicada ou especificar um leaseCollectionPrefix diferente para cada função. Caso contrário, apenas uma das funções é acionada. Para obter informações sobre o prefixo, veja a seção de Configuração.
O gatilho não indica se um documento foi atualizado ou inserido. Ele apenas fornece o documento em si. Se você precisar lidar com atualizações e inserções de forma diferente, implemente campos de carimbo de data/hora para inserção ou atualização.
O tipo de parâmetro compatível com o gatilho Azure Cosmos DB depende da versão do runtime do Functions, da versão do pacote de extensão e da modalidade C# usada.
Quando você deseja que a função processe um único documento, o gatilho do Cosmos DB pode ser associado aos seguintes tipos:
| Tipo | Descrição |
|---|---|
| Tipos serializáveis JSON | O Functions tenta desserializar os dados JSON do documento do feed de alterações do Cosmos DB em um tipo de objeto CLR (POCO) simples. |
Quando você desejar que a função processe um lote de documentos, o gatilho do Cosmos DB pode ser associado aos seguintes tipos:
| Tipo | Descrição |
|---|---|
IEnumerable<T> em T é um tipo serializável por JSON |
Uma enumeração de entidades incluídas no lote. Cada entrada representa um documento do feed de alterações do Cosmos DB. |
conexões
As propriedades connectionStringSetting/connection e leaseConnectionStringSetting/leaseConnection referenciam a configuração do ambiente que especifica como o aplicativo se conecta ao Azure Cosmos DB. Eles podem especificar:
- O nome de uma configuração de aplicativo que contém um cadeia de conexão.
- O nome de um prefixo compartilhado para várias configurações de aplicativo, que juntas definem uma conexão de identidade gerenciada. Essa opção só está disponível para as versões
connectioneleaseConnectiondaconnection.
Se o valor configurado for uma combinação exata para uma única configuração e um correspondência de prefixo para outras configurações, a correspondência exata será usada.
Dica
As conexões de identidade gerenciada são recomendadas em cadeias de conexão para melhorar a segurança. As cadeias de conexão incluem credenciais que podem ser expostas, enquanto as identidades gerenciadas eliminam a necessidade de gerenciar segredos.
Se você estiver usando version 4.x ou superior da extensão, em vez de usar um cadeia de conexão com um segredo, poderá fazer com que o aplicativo use uma identidade Microsoft Entra. Para fazer isso, defina as configurações em um prefixo comum que mapeia para a propriedade de conexão na configuração de gatilho e associação.
Nesse modo, a extensão requer as seguintes configurações de aplicativo:
| Configuração baseada em modelo | Descrição | Tipo de identidade |
|---|---|---|
<CONNECTION_NAME_PREFIX>__accountEndpoint |
O URI do ponto de extremidade da conta Azure Cosmos DB. | Atribuído pelo sistema ou atribuído pelo usuário |
<CONNECTION_NAME_PREFIX>__credential |
Deve ser definido como managedidentity. |
Atribuído pelo usuário |
<CONNECTION_NAME_PREFIX>__clientId |
O ID do cliente da identidade gerenciada atribuída ao usuário. | Atribuído pelo usuário |
O valor que você substitui <CONNECTION_NAME_PREFIX> é tratado pela extensão de associação como o nome da configuração de conexão.
Por exemplo, se a configuração de associação especificar connection = "CosmosDBConnection" com uma identidade gerenciada atribuída pelo usuário, defina as seguintes configurações de aplicativo:
{
"CosmosDBConnection__accountEndpoint": "https://mycosmosdb.documents.azure.com:443/",
"CosmosDBConnection__credential": "managedidentity",
"CosmosDBConnection__clientId": "00000000-0000-0000-0000-000000000000"
}
Dica
Use identidades gerenciadas atribuídas pelo usuário para cenários de produção em que você precisa de controle refinado sobre permissões de identidade em vários recursos.
Você pode usar configurações adicionais no modelo para personalizar ainda mais a conexão. Confira Propriedades comuns para conexões baseadas em identidade.
Quando hospedadas no serviço Azure Functions, as conexões baseadas em identidade usam uma identidade manada. A identidade atribuída pelo sistema é usada por padrão, embora a identidade atribuída pelo usuário possa ser especificada com as propriedades credential e clientID. Observe que não há suporte para configurar uma identidade atribuída pelo usuário com uma ID de recurso. Quando executado em outros contextos, como desenvolvimento local, a identidade do desenvolvedor é usada, embora isso possa ser personalizado. Confira Desenvolvimento local com conexões baseadas em identidade.
Conceder permissão para a identidade
Qualquer identidade que esteja sendo usada deve ter permissões para executar as ações pretendidas. Para a maioria dos serviços Azure, isso significa que você precisa atribuir uma função em Azure RBAC, usando funções internas ou personalizadas que forneçam essas permissões.
Importante
Algumas permissões que não são necessárias em todos os contextos podem ser expostas pelo serviço de destino. Sempre que possível, siga o princípio do privilégio mínimo, concedendo à identidade apenas os privilégios necessários. Por exemplo, se o aplicativo precisar apenas ser capaz de ler uma fonte de dados, use uma função que só tenha permissão de leitura. Seria inapropriado atribuir uma função que também permitisse a gravação nesse serviço, pois seria um excesso de permissões para uma operação de leitura. Da mesma forma, seria melhor garantir que a atribuição da função tivesse o escopo apenas sobre os recursos que precisam ser lidos.
O Cosmos DB não usa Azure RBAC para operações de dados. Em vez disso, ele usa um sistema RBAC interno do Cosmos DB que se baseia em conceitos semelhantes. Será necessário criar uma atribuição de função que forneça acesso a sua conta de banco de dados em runtime. Azure funções de Gerenciamento RBAC, como Owner não são suficientes. A tabela a seguir mostra funções internas recomendadas ao usar a extensão Azure Cosmos DB em operação normal. Seu aplicativo pode exigir permissões adicionais com base no código escrito por você.
| Tipo de associação | Exemplo de funções internas1 |
|---|---|
| Gatilho2 | Colaborador de dados internos do Cosmos DB |
| Associação de entrada | Leitor de dados internos do Cosmos DB |
| Associação de saída | Colaborador de dados internos do Cosmos DB |
1 Essas funções não podem ser usadas em uma atribuição de função RBAC Azure. Confira a documentação do sistema RBAC interno do Cosmos DB para obter detalhes sobre como atribuir essas funções.
2 Ao usar a identidade, o Cosmos DB trata a criação de contêiner como uma operação de gerenciamento. Ele não está disponível como uma operação de plano de dados para o gatilho. Você precisará garantir a criação dos contêineres necessários para o gatilho (incluindo o contêiner de concessão) antes de configurar a função.