Partilhar via


Azure Cosmos DB trigger para Funções do Azure 2.x e superiores

O Azure Cosmos DB Trigger usa o feed de mudança Azure Cosmos DB para ouvir inserções e atualizações entre partições. O feed de alterações publica itens novos e atualizados, não incluindo atualizações de exclusões. Para um cenário de ponta a ponta que utilize o gatilho Azure Cosmos DB, veja Quickstart: Responder a alterações na base de dados em Azure Cosmos DB usando Funções do Azure.

Para obter informações sobre detalhes de instalação e configuração, consulte a visão geral.

As decisões de dimensionamento do Cosmos DB para os planos Consumo e Premium são feitas por meio do dimensionamento baseado em metas. Para obter mais informações, consulte Dimensionamento baseado em destino.

Importante

Este artigo usa guias para oferecer suporte a várias versões do modelo de programação Node.js. O modelo v4 está geralmente disponível e foi projetado para ter uma experiência mais flexível e intuitiva para desenvolvedores JavaScript e TypeScript. Para mais detalhes sobre como funciona o modelo v4, consulte o guia para desenvolvedores Funções do Azure Node.js. Para saber mais sobre as diferenças entre v3 e v4, consulte o guia de migração.

O Funções do Azure suporta dois modelos de programação para Python. A maneira como você define suas ligações depende do modelo de programação escolhido.

O modelo de programação Python v2 permite-te definir bindings usando decoradores diretamente no teu código de função Python. Para mais informações, consulte o guia para desenvolvedores Python.

Este artigo suporta 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 em seu aplicativo de função, que pode ser uma das seguintes:

Uma biblioteca de classes de processo de trabalho isolada compilada função C# é executada em um processo isolado do tempo de execução.

Os exemplos a seguir dependem da versão de extensão para o modo C# fornecido.

Este exemplo utiliza referências nas definições da aplicação e inclui o tratamento de erros. Primeiro, defina o seu tipo de modelo:

public class ToDoItem
{
    public string? Id { get; set; }
    public string? Description { get; set; }
}

A seguinte função executa-se quando ocorrem inserções ou atualizações na base de dados e contentor 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 definições da aplicação (%VAR_NAME%) em vez de valores codificados fixamente. Para detalhes de configuração, consulte as definições da aplicação e orientações de desenvolvimento local no separador 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 Azure Cosmos DB, a versão 4.x da extensão Azure Cosmos DB requer azure-functions-java-library V3.0.0 para Java funções.

    @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 de funções Java, use a anotação @CosmosDBTrigger em parâmetros cujo valor provém de Azure Cosmos DB. Use esta anotação com tipos nativos de Java, objetos Java simples (POJOs) ou valores anuláveis usando Optional<T>.

O exemplo seguinte mostra um trigger Azure Cosmos DB TypeScript. A função escreve mensagens de registo quando registos do Azure Cosmos DB 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 seguinte mostra um gatilho Azure Cosmos DB JavaScript. A função escreve mensagens de registo quando registos do Azure Cosmos DB 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 seguinte mostra como executar uma função à medida que os dados mudam no Azure Cosmos DB.

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

Note que alguns dos nomes dos atributos de ligação mudaram na versão 4.x da extensão Azure Cosmos DB.

No arquivo run.ps1, você tem acesso ao documento que aciona a função por meio do $Documents parâmetro.

param($Documents, $TriggerMetadata) 

Write-Host "First document Id modified : $($Documents[0].id)" 

O exemplo seguinte mostra uma ligação de trigger do Azure Cosmos DB. O exemplo depende se usas o modelo de programação Python v1 ou v2.

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 definições da aplicação (%VAR_NAME%) em vez de valores codificados fixamente.

Definições da aplicação

Configure estas definições de aplicação para ligações baseadas em identidade:

Configuração Description Exemplo
COSMOS_DATABASE_NAME Nome da base de dados Azure Cosmos DB my-database
COSMOS_CONTAINER_NAME Nome do contentor a monitorizar my-container
COSMOS_CONNECTION__accountEndpoint Azure Cosmos DB account endpoint https://mycosmosdb.documents.azure.com:443/
COSMOS_CONNECTION__credential Definido para managedidentity UAMI managedidentity
COSMOS_CONNECTION__clientId ID de cliente da identidade gerida atribuída ao utilizador 00000000-0000-0000-0000-000000000000

Desenvolvimento local

Para desenvolvimento local, crie um local.settings.json ficheiro:

{
    "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/"
    }
}

Sugestão

Para o desenvolvimento local, omitir COSMOS_CONNECTION__credential e COSMOS_CONNECTION__clientId. O DefaultAzureCredential tenta várias credenciais por ordem, incluindo as suas credenciais de CLI do Azure de login.

Pré-requisitos para o desenvolvimento local:

Atributos

Tanto as bibliotecas C# em processo como as isoladas são usadas 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 tanto do modelo de processo como da versão de extensão:

Bibliotecas de processos trabalhadores isolados usam CosmosDBTriggerAttribute do espaço de nomes Microsoft.Azure.Functions.Worker, que define estas propriedades:

Propriedade Attribute Description
Ligação O nome de uma configuração de aplicação ou coleção de definições que especifica como se ligar à conta do Azure Cosmos DB que está a ser monitorizada. Para obter mais informações, consulte Conexões.
Nome do Banco de Dados O nome da base de dados Azure Cosmos DB com o contentor a ser monitorizado.
Nome do contêiner O nome do contêiner que está sendo monitorado.
LeaseConnection (Opcional) O nome de uma configuração de aplicação ou coleção de definições que especifica como se ligar à conta do Azure Cosmos DB que contém o contentor do arrendamento.

Quando não definido, o Connection valor é usado. Este parâmetro é definido automaticamente quando a ligação é criada no portal. A cadeia de ligação para o contentor do arrendamento deve ter permissões de escrita.
LeaseDatabaseName (Opcional) O nome do banco de dados que contém o contêiner usado para armazenar concessões . Quando não está definido, o databaseName valor da configuração é usado.
LeaseContainerName (Opcional) O nome do contêiner usado para armazenar locações. Quando não definido, o valor leases é usado.
CreateLeaseContainerIfNotExists (Opcional) Quando definido como true, o contêiner de concessões é criado automaticamente quando ainda não existe. O valor predefinido é false. Ao usar Microsoft Entra identidades, se definir o valor para true, criar contentores não é uma operação permitida e a sua Função não poderá arrancar.
LeasesContainerThroughput (Opcional) Define o número de Unidades de Solicitação a serem atribuídas quando o contêiner de concessões é criado. Essa configuração só é usada quando CreateLeaseContainerIfNotExists está definida como true. Este parâmetro é definido automaticamente quando a associação é criada usando o portal.
LeaseContainerPrefix (Opcional) Quando definido, o valor é adicionado como um prefixo às concessões criadas no contêiner Lease para essa função. A utilização de um prefixo permite que duas Funções do Azure separadas partilhem o mesmo contentor de arrendamento usando prefixos diferentes.
FeedPollDelay (Opcional) O tempo (em milissegundos) para o atraso entre a sondagem de uma partição para novas alterações no feed, depois que todas as alterações atuais são drenadas. O padrão é 5.000 milissegundos ou 5 segundos.
LeaseAcquireInterval (Opcional) Quando definido, ele define, em milissegundos, o intervalo para iniciar uma tarefa para calcular se as partições são distribuídas uniformemente entre 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 ao ler itens do feed de alterações. Como resultado, o número de itens recebidos pode ser maior do 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 ao Gatilho para ler as alterações desde o início do histórico de alterações do contêiner em vez de começar no momento atual. A leitura desde o início só funciona na primeira vez que o gatilho é iniciado, pois nas execuções subsequentes, os pontos de verificação já estão armazenados. Definir essa opção para true quando houver concessões já criadas não terá efeito.
StartFromTime (Opcional) Obtém ou define a data e a hora a partir das quais inicializar a operação de leitura do feed de alterações. O formato recomendado é 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, alterar esse valor não terá efeito.
Locais preferidos (Opcional) Define localizações preferenciais (regiões) para contas de base de dados geo-replicadas no serviço Azure Cosmos DB. Os valores devem ser separados por vírgula. Por exemplo, "Leste dos EUA, Centro-Sul dos EUA, Norte da Europa".

Decoradores

Aplica-se apenas ao modelo de programação Python v2.

Para Python funções v2 definidas pelo uso de um decorador, o cosmos_db_trigger (Extensão 4.x) suporta as seguintes propriedades:

Property Description
arg_name O nome da variável usada no código da função que representa a lista de documentos com alterações.
database_name O nome da base de dados Azure Cosmos DB. Suporta %VAR_NAME% sintaxe para referenciar as definições da aplicação.
container_name O nome do contentor Azure Cosmos DB a ser monitorizado. Suporta %VAR_NAME% sintaxe.
connection O nome de uma configuração ou prefixo de uma aplicação para ligações baseadas em identidade (por exemplo, COSMOS_CONNECTION resolve para COSMOS_CONNECTION__accountEndpoint, e assim sucessivamente).
lease_container_name O nome do contentor usado para armazenar contratos de arrendamento.
create_lease_container_if_not_exists Quando true, cria automaticamente o contentor de arrendamento se este não existir.

Para Python funções definidas usando function.json, veja a secção Configuration.

Anotações

Devido a alterações de esquema no SDK Azure Cosmos DB, a versão 4.x da extensão Azure Cosmos DB requer azure-functions-java-library V3.0.0 para Java funções.

Use a anotação @CosmosDBTrigger em parâmetros que leem dados de Azure Cosmos DB. A anotação suporta as seguintes propriedades:

Propriedade Attribute Description
conexão O nome de uma configuração de aplicação ou coleção de definições que especifica como se ligar à conta do Azure Cosmos DB que está a ser monitorizada. Para obter mais informações, consulte Conexões.
Designação O nome da função.
Nome do banco de dados O nome da base de dados Azure Cosmos DB com o contentor a ser monitorizado.
containerName O nome do contêiner que está sendo monitorado.
leaseConnectionStringSetting (Opcional) O nome de uma configuração de aplicação ou coleção de definições que especifica como se ligar à conta do Azure Cosmos DB que contém o contentor do arrendamento.

Quando não definido, o Connection valor é usado. Este parâmetro é definido automaticamente quando a ligação é criada no portal. A cadeia de ligação para o contentor do arrendamento deve ter permissões de escrita.
leaseDatabaseName (Opcional) O nome do banco de dados que contém o contêiner usado para armazenar concessões . Quando não está definido, o databaseName valor da configuração é usado.
leaseContainerName (Opcional) O nome do contêiner usado para armazenar locações. Quando não definido, o valor leases é usado.
createLeaseContainerIfNotExists (Opcional) Quando definido como true, o contêiner de concessões é criado automaticamente quando ainda não existe. O valor predefinido é false. Ao usar Microsoft Entra identidades, se definir o valor para true, criar contentores não é uma operação permitida e a sua aplicação de funções não pode iniciar.
leasesContainerThroughput (Opcional) Define o número de Unidades de Solicitação a serem atribuídas quando o contêiner de concessões é criado. Essa configuração só é usada quando CreateLeaseContainerIfNotExists está definida como true. Este parâmetro é definido automaticamente quando a associação é criada usando o portal.
leaseContainerPrefix (Opcional) Quando definido, o valor é adicionado como um prefixo às concessões criadas no contêiner Lease para essa função. A utilização de um prefixo permite que duas Funções do Azure separadas partilhem o mesmo contentor de arrendamento usando prefixos diferentes.
feedPollDelay (Opcional) O tempo (em milissegundos) para o atraso entre a sondagem de uma partição para novas alterações no feed, depois que todas as alterações atuais são drenadas. O padrão é 5.000 milissegundos ou 5 segundos.
leaseAcquireInterval (Opcional) Quando definido, ele define, em milissegundos, o intervalo para iniciar uma tarefa para calcular se as partições são distribuídas uniformemente entre 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 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 ao ler itens do feed de alterações. Como resultado, o número de itens recebidos pode ser maior do 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 ao Gatilho para ler as alterações desde o início do histórico de alterações do contêiner em vez de começar no momento atual. A leitura desde o início só funciona na primeira vez que o gatilho é iniciado, pois nas execuções subsequentes, os pontos de verificação já estão armazenados. Definir essa opção para true quando houver concessões já criadas não terá efeito.
preferredLocations (Opcional) Define localizações preferenciais (regiões) para contas de base de dados geo-replicadas no serviço Azure Cosmos DB. Os valores devem ser separados por vírgula. Por exemplo, East US,South Central US,North Europe.

Configuração

Aplica-se apenas ao modelo de programação Python v1.

A tabela seguinte explica as propriedades que pode definir no options objeto que passa ao app.cosmosDB() método. As typepropriedades , direction, e name não se aplicam ao modelo v4.

A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json, onde as propriedades diferem de acordo com a versão da extensão:

function.json propriedade Description
type Deve ser definido como cosmosDBTrigger.
direção Deve ser definido como in. Este parâmetro é definido automaticamente quando cria o gatilho no portal Azure.
Designação O nome da variável usada no código da função que representa a lista de documentos com alterações.
conexão O nome de uma configuração de aplicação ou coleção de definições que especifica como se ligar à conta do Azure Cosmos DB que está a ser monitorizada. Para obter mais informações, consulte Conexões.
Nome do banco de dados O nome da base de dados Azure Cosmos DB com o contentor a ser monitorizado.
containerName O nome do contêiner que está sendo monitorado.
arrendarConexão (Opcional) O nome de uma configuração de aplicação ou contentor de definição que especifica como se ligar à conta do Azure Cosmos DB que contém o contentor do arrendamento.

Quando não definido, o connection valor é usado. Este parâmetro é definido automaticamente quando a ligação é criada no portal. A cadeia de ligação para o contentor do arrendamento deve ter permissões de escrita.
leaseDatabaseName (Opcional) O nome do banco de dados que contém o contêiner usado para armazenar concessões . Quando não está definido, o databaseName valor da configuração é usado.
leaseContainerName (Opcional) O nome do contêiner usado para armazenar locações. Quando não definido, o valor leases é usado.
createLeaseContainerIfNotExists (Opcional) Quando definido como true, o contêiner de concessões é criado automaticamente quando ainda não existe. O valor predefinido é false. Ao usar Microsoft Entra identidades, se definir o valor para true, criar contentores não é uma operação permitida e a sua Função não poderá arrancar.
leasesContainerThroughput (Opcional) Define o número de Unidades de Solicitação a serem atribuídas quando o contêiner de concessões é criado. Essa configuração só é usada quando createLeaseContainerIfNotExists está definida como true. Este parâmetro é definido automaticamente quando a associação é criada usando o portal.
leaseContainerPrefix (Opcional) Quando definido, o valor é adicionado como um prefixo às concessões criadas no contêiner Lease para essa função. A utilização de um prefixo permite que duas Funções do Azure separadas partilhem o mesmo contentor de arrendamento usando prefixos diferentes.
feedPollDelay (Opcional) O tempo (em milissegundos) para o atraso entre a sondagem de uma partição para novas alterações no feed, depois que todas as alterações atuais são drenadas. O padrão é 5.000 milissegundos ou 5 segundos.
leaseAcquireInterval (Opcional) Quando definido, ele define, em milissegundos, o intervalo para iniciar uma tarefa para calcular se as partições são distribuídas uniformemente entre 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 ao ler itens do feed de alterações. Como resultado, o número de itens recebidos pode ser maior do 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 ao Gatilho para ler as alterações desde o início do histórico de alterações do contêiner em vez de começar no momento atual. A leitura desde o início só funciona na primeira vez que o gatilho é iniciado, pois nas execuções subsequentes, os pontos de verificação já estão armazenados. Definir essa opção para true quando houver concessões já criadas não terá efeito.
startFromTime (Opcional) Obtém ou define a data e a hora a partir das quais inicializar a operação de leitura do feed de alterações. O formato recomendado é 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, alterar esse valor não terá efeito.
preferredLocations (Opcional) Define localizações preferenciais (regiões) para contas de base de dados geo-replicadas no serviço Azure Cosmos DB. Os valores devem ser separados por vírgula. Por exemplo, "Leste dos EUA, Centro-Sul dos EUA, Norte da Europa".

Para exemplos completos, veja a secção de Exemplos.

Utilização

O gatilho requer uma segunda coleção que ele usa para armazenar concessões sobre as partições. O gatilho só funciona se tanto a cobrança que está a monitorizar como a coleção que contém os contratos de arrendamento estiverem disponíveis.

Importante

Se configurar várias funções para usarem um gatilho Azure Cosmos DB para a mesma coleção, cada função deve usar uma coleção dedicada de arrendamento 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 configurar várias funções para usarem um gatilho Azure Cosmos DB para a mesma coleção, cada função deve usar uma coleção dedicada de arrendamento 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 configurar várias funções para usarem um gatilho Azure Cosmos DB para a mesma coleção, cada função deve usar uma coleção dedicada de arrendamento 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 Configuração.

O gatilho não indica se um documento foi atualizado ou inserido. Apenas fornece o próprio documento. Se precisares de gerir atualizações e inserções de forma diferente, implementa campos de carimbo temporal para inserção ou atualização.

O tipo de parâmetro suportado pelo gatilho do Azure Cosmos DB depende da versão de runtime das Funções, da versão do pacote de extensão e da modalidade C# utilizada.

Quando você deseja que a função processe um único documento, o gatilho do Cosmos DB pode se vincular aos seguintes tipos:

Tipo Description
Tipos serializáveis JSON As funções tentam desserializar os dados JSON do documento do feed de alteração do Cosmos DB para um tipo de objeto CLR (POCO) simples.

Quando você deseja que a função processe um lote de documentos, o gatilho do Cosmos DB pode se vincular aos seguintes tipos:

Tipo Description
IEnumerable<T>onde T é um tipo serializável JSON Uma enumeração de entidades incluídas no lote. Cada entrada representa um documento do feed de alterações do Cosmos DB.

Ligações

As propriedades e referenciam a configuração do ambiente que especifica como a aplicação se liga à Azure Cosmos DB. Podem especificar:

  • O nome de uma configuração de aplicação que contém uma cadeia de ligação.
  • O nome de um prefixo partilhado para múltiplas definições de aplicação, que em conjunto definem uma ligação de identidade gerida. Esta opção só está disponível para as connection versões e leaseConnection da versão 4.x ou superior da extensão.

Se o valor configurado for uma correspondência exata para uma única configuração e uma correspondência de prefixo para outras configurações, a correspondência exata será usada.

Sugestão

As ligações de identidade gerida são recomendadas em detrimento das cadeias de ligação para melhorar a segurança. As cadeias de ligação incluem credenciais que podem ser expostas, enquanto as identidades geridas eliminam a necessidade de gerir segredos.

Se estiveres a usar versão 4.x ou superior da extensão, em vez de usar um cadeia de ligação com um segredo, podes fazer com que a aplicação use uma identidade Microsoft Entra. Para isso, defina definições sob um prefixo comum que corresponda à propriedade de ligação na configuração de trigger e binding.

Neste modo, a extensão requer as seguintes definições de aplicação:

Cenário baseado em modelos Description Tipo de identidade
<CONNECTION_NAME_PREFIX>__accountEndpoint O endpoint endpoint da conta Azure Cosmos DB URI. Atribuído pelo sistema ou pelo utilizador
<CONNECTION_NAME_PREFIX>__credential Deve ser definido como managedidentity. Atribuída pelo utilizador
<CONNECTION_NAME_PREFIX>__clientId A ID do cliente da identidade gerenciada atribuída pelo usuário. Atribuída pelo utilizador

O valor por que substituires <CONNECTION_NAME_PREFIX> é tratado pela extensão de ligação como o nome da definição de ligação.

Por exemplo, se a sua configuração de binding especificar connection = "CosmosDBConnection" uma identidade gerida atribuída pelo utilizador, configure as seguintes definições de aplicação:

{
    "CosmosDBConnection__accountEndpoint": "https://mycosmosdb.documents.azure.com:443/",
    "CosmosDBConnection__credential": "managedidentity",
    "CosmosDBConnection__clientId": "00000000-0000-0000-0000-000000000000"
}

Sugestão

Use identidades geridas atribuídas pelo utilizador para cenários de produção onde precisa de controlo detalhado sobre permissões de identidade em múltiplos recursos.

Pode usar definições adicionais no modelo para personalizar ainda mais a ligação. Consulte Propriedades comuns para conexões baseadas em identidade.

Quando alojadas no serviço Funções do Azure, as ligações baseadas em identidade utilizam uma identidade gerida. A identidade atribuída ao sistema é usada por padrão, embora uma identidade atribuída ao usuário possa ser especificada com as credential propriedades e clientID . Observe que nãosuporte para a configuração de uma identidade atribuída pelo usuário com uma ID de recurso. Quando executado em outros contextos, como desenvolvimento local, sua identidade de desenvolvedor é usada, embora isso possa ser personalizado. Consulte Desenvolvimento local com conexões baseadas em identidade.

Conceder permissão à identidade

Qualquer identidade que esteja sendo usada deve ter permissões para executar as ações pretendidas. Para a maioria dos serviços Azure, isto significa que precisa de atribuir um papel no Azure RBAC, usando papéis incorporados ou personalizados que forneçam essas permissões.

Importante

Algumas permissões podem ser expostas pelo serviço de destino que não são necessárias para todos os contextos. Sempre que possível, aderir ao princípio do menor privilégio, concedendo à identidade apenas os privilégios necessários. Por exemplo, se o aplicativo só precisa ser capaz de ler de uma fonte de dados, use uma função que só tenha permissão para ler. Seria inadequado atribuir uma função que também permita escrever a esse serviço, pois isso seria uma permissão excessiva para uma operação de leitura. Da mesma forma, convém garantir que a atribuição de função tenha escopo apenas sobre os recursos que precisam ser lidos.

O Cosmos DB não utiliza o Azure RBAC para operações de dados. Em vez disso, ele usa um sistema RBAC integrado do Cosmos DB que é construído em conceitos semelhantes. Você precisará criar uma atribuição de função que forneça acesso à sua conta de banco de dados em tempo de execução. Azure cargos de gestão RBAC como Proprietário não são suficientes. A tabela seguinte mostra os papéis incorporados recomendados ao utilizar a extensão Azure Cosmos DB em funcionamento normal. Seu aplicativo pode exigir permissões adicionais com base no código que você escreve.

Tipo de vinculação Exemplo de funçõesinternas 1
Gatilho2 Colaborador de dados integrado do Cosmos DB
Vinculação de entrada Leitor de dados integrado do Cosmos DB
Vinculação de saída Colaborador de dados integrado do Cosmos DB

1 Estas funções não podem ser usadas numa atribuição de função Azure RBAC. Consulte a documentação do sistema RBAC integrado 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êineres 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 que você crie os contêineres necessários para o gatilho (incluindo o contêiner de concessão) antes de configurar sua função.

Próximos passos