Gatilho de armazenamento de Blob do Azure para o Azure Functions

O gatilho de armazenamento de Blob inicia uma função quando um blob novo ou atualizado é detetado. O conteúdo do blob é fornecido como entrada para a função.

Gorjeta

Há várias maneiras de executar seu código de função com base em alterações em blobs em um contêiner de armazenamento. Se você optar por usar o gatilho de armazenamento de Blob, observe que há duas implementações oferecidas: uma baseada em sondagem (mencionada neste artigo) e uma baseada em eventos. É recomendável usar a implementação baseada em eventos, pois ela tem latência menor do que a outra. Além disso, o plano Flex Consumption suporta apenas o gatilho de armazenamento de Blob baseado em eventos.

Para obter detalhes sobre as diferenças entre as duas implementações do gatilho de armazenamento de Blob, bem como outras opções de acionamento, consulte Trabalhando com blobs.

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

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 obter mais detalhes sobre como o modelo v4 funciona, consulte o Guia do desenvolvedor do Azure Functions Node.js. Para saber mais sobre as diferenças entre v3 e v4, consulte o guia de migração.

O Azure Functions 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 definir ligações usando decoradores diretamente em seu código de função Python. Para obter mais informações, consulte o guia do desenvolvedor do Python.

Este artigo suporta ambos os modelos de programação.

Exemplo

Uma função C# pode ser criada usando um dos seguintes modos C#:

  • Modelo de trabalho isolado: função C# compilada que é executada em um processo de trabalho isolado do tempo de execução. O processo de trabalho isolado é necessário para suportar funções C# em execução nas versões LTS e não-LTS .NET e .NET Framework. As extensões para funções isoladas do processo de trabalho usam Microsoft.Azure.Functions.Worker.Extensions.* namespaces.
  • Modelo em processo: função C# compilada que é executada no mesmo processo que o tempo de execução do Functions. Em uma variação desse modelo, as funções podem ser executadas usando scripts em C#, que são suportados principalmente para edição de portal em C#. As extensões para funções em processo usam Microsoft.Azure.WebJobs.Extensions.* namespaces.

Importante

O suporte para o modelo em processo terminará em 10 de novembro de 2026. É altamente recomendável que você migre seus aplicativos para o modelo de trabalho isolado para obter suporte total.

O exemplo a seguir é uma função C# que é executada em um processo de trabalho isolado e usa um gatilho de blob com ligações de blob de entrada e saída de blob. A função é acionada pela criação de um blob no contêiner test-samples-trigger . Ele lê um arquivo de texto do contêiner test-samples-input e cria um novo arquivo de texto em um contêiner de saída com base no nome do arquivo acionado.

public static class BlobFunction
{
    [Function(nameof(BlobFunction))]
    [BlobOutput("test-samples-output/{name}-output.txt")]
    public static string Run(
        [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
        [BlobInput("test-samples-input/sample1.txt")] string myBlob,
        FunctionContext context)
    {
        var logger = context.GetLogger("BlobFunction");
        logger.LogInformation("Triggered Item = {myTriggerItem}", myTriggerItem);
        logger.LogInformation("Input Item = {myBlob}", myBlob);

        // Blob Output
        return "blob-output content";
    }
}

Esta função grava myblob um log quando um blob é adicionado ou atualizado no contêiner.

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

O exemplo a seguir mostra um código TypeScript de gatilho de blob. A função grava um log quando um blob é adicionado ou atualizado no samples-workitems contêiner.

A cadeia de caracteres {name} no caminho samples-workitems/{name} do gatilho de blob cria uma expressão de vinculação que você pode usar no código da função para acessar o nome do arquivo do blob de acionamento. Para obter mais informações, consulte Padrões de nome de blob mais adiante neste artigo.

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    handler: storageBlobTrigger1,
});

O exemplo a seguir mostra um código JavaScript de gatilho de blob. A função grava um log quando um blob é adicionado ou atualizado no samples-workitems contêiner.

A cadeia de caracteres {name} no caminho samples-workitems/{name} do gatilho de blob cria uma expressão de vinculação que você pode usar no código da função para acessar o nome do arquivo do blob de acionamento. Para obter mais informações, consulte Padrões de nome de blob mais adiante neste artigo.

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

O exemplo a seguir demonstra como criar uma função que é executada quando um arquivo é adicionado ao source contêiner de armazenamento de blob.

O arquivo de configuração de função (function.json) inclui uma associação com o type de blobTrigger e direction definido como in.

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

Aqui está o código associado para o arquivo run.ps1 .

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

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

Este exemplo usa tipos de SDK para acessar diretamente o objeto subjacente BlobClient fornecido pelo gatilho de armazenamento de Blob:

import logging

import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.blob_trigger(
    arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_trigger(client: blob.BlobClient):
    logging.info(
        f"Python blob trigger function processed blob \n"
        f"Properties: {client.get_blob_properties()}\n"
        f"Blob content head: {client.download_blob().read(size=1)}"
    )

Para obter exemplos de como usar outros tipos de SDK, consulte os ContainerClient exemplos e StorageStreamDownloader .

Para saber mais, incluindo como habilitar associações de tipo SDK em seu projeto, consulte Associações de tipo SDK.

Este exemplo registra informações dos metadados de blob de entrada.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob", 
                  path="PATH/TO/BLOB",
                  connection="CONNECTION_SETTING")
def test_function(myblob: func.InputStream):
   logging.info(f"Python blob trigger function processed blob \n"
                f"Name: {myblob.name}\n"
                f"Blob Size: {myblob.length} bytes")

Atributos

As bibliotecas C# do processo de trabalho em processo e isoladas usam o atributo BlobAttribute 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#.

O construtor do atributo usa os seguintes parâmetros:

Parâmetro Description
BlobPath O caminho para o blob.
Ligação O nome de uma configuração de aplicativo ou coleção de configurações que especifica como se conectar aos Blobs do Azure. Consulte Conexões.
Acesso Indica se você estará lendo ou escrevendo.
Source Define a origem do evento de acionamento. Use BlobTriggerSource.EventGrid para um gatilho de blob baseado em Grade de Eventos, que fornece latência muito menor. O padrão é BlobTriggerSource.LogsAndContainerScan, que usa o mecanismo de sondagem padrão para detetar alterações no contêiner.

Aqui está um BlobTrigger atributo em uma assinatura de método:

[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
    [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
    [BlobInput("test-samples-input/sample1.txt")] string myBlob,
    FunctionContext context)

Quando estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na Values coleção.

Decoradores

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

Para funções Python v2 definidas usando decoradores, as seguintes propriedades no blob_trigger decorador definem o gatilho de armazenamento de Blob:

Property Description
arg_name Declara o nome do parâmetro na assinatura da função. Quando a função é acionada, o valor desse parâmetro tem o conteúdo da mensagem de fila.
path O recipiente a monitorizar. Pode ser um padrão de nome de blob.
connection A cadeia de ligação da conta de armazenamento.
source Define a origem do evento de acionamento. Use EventGrid para um gatilho de blob baseado em Grade de Eventos, que fornece latência muito menor. O padrão é LogsAndContainerScan, que usa o mecanismo de sondagem padrão para detetar alterações no contêiner.

Para funções Python definidas usando function.json, consulte a seção Configuração .

Anotações

O @BlobTrigger atributo é usado para lhe dar acesso ao blob que disparou a função. Consulte o exemplo de gatilho para obter detalhes. Use a source propriedade para definir a origem do evento de acionamento. Use EventGrid para um gatilho de blob baseado em Grade de Eventos, que fornece latência muito menor. O padrão é LogsAndContainerScan, que usa o mecanismo de sondagem padrão para detetar alterações no contêiner. |

Configuração

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

A tabela a seguir explica as propriedades que você pode definir no options objeto passado para o app.storageBlob() método.

Property Description
path O recipiente a monitorizar. Pode ser um padrão de nome de blob.
conexão O nome de uma configuração de aplicativo ou coleção de configurações que especifica como se conectar aos Blobs do Azure. Consulte Conexões.
fonte Define a origem do evento de acionamento. Use EventGrid para um gatilho de blob baseado em Grade de Eventos, que fornece latência muito menor. O padrão é LogsAndContainerScan, que usa o mecanismo de sondagem padrão para detetar alterações no contêiner.

A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json .

function.json propriedade Description
type Deve ser definido como blobTrigger. Essa propriedade é definida automaticamente quando você cria o gatilho no portal do Azure.
direção Deve ser definido como in. Essa propriedade é definida automaticamente quando você cria o gatilho no portal do Azure. As exceções são observadas na seção de uso .
Designação O nome da variável que representa o blob no código da função.
path O recipiente a monitorizar. Pode ser um padrão de nome de blob.
conexão O nome de uma configuração de aplicativo ou coleção de configurações que especifica como se conectar aos Blobs do Azure. Consulte Conexões.
fonte Define a origem do evento de acionamento. Use EventGrid para um gatilho de blob baseado em Grade de Eventos, que fornece latência muito menor. O padrão é LogsAndContainerScan, que usa o mecanismo de sondagem padrão para detetar alterações no contêiner.

Consulte a seção Exemplo para obter exemplos completos.

Metadados

O gatilho de blob fornece várias propriedades de metadados. Essas propriedades podem ser usadas como parte de expressões de associação em outras associações ou como parâmetros em seu código. Esses valores têm a mesma semântica que o tipo CloudBlob .

Propriedade Type Description
BlobTrigger string O caminho para o blob de acionamento.
Uri System.Uri O URI do blob para o local principal.
Properties BlobProperties As propriedades do sistema do blob.
Metadata IDictionary<string,string> Os metadados definidos pelo usuário para o blob.

O exemplo a seguir registra o caminho para o blob de acionamento, incluindo o contêiner:

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

Metadados

O gatilho de blob fornece várias propriedades de metadados. Essas propriedades podem ser usadas como parte de expressões de associação em outras associações ou como parâmetros em seu código.

Property Description
blobTrigger O caminho para o blob de acionamento.
uri O URI do blob para o local principal.
properties As propriedades do sistema do blob.
metadata Os metadados definidos pelo usuário para o blob.

Os metadados podem ser obtidos da triggerMetadata propriedade do objeto fornecido context , conforme mostrado no exemplo a seguir, que registra o caminho para o blob de acionamento (blobTrigger), incluindo o contêiner:

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

Metadados

Os metadados estão disponíveis através do $TriggerMetadata parâmetro.

Utilização

Os tipos de vinculação suportados pelo gatilho Blob dependem da versão do pacote de extensão e da modalidade C# usada em seu aplicativo de função.

O gatilho de blob pode se ligar aos seguintes tipos:

Tipo Description
string O conteúdo de blob como uma cadeia de caracteres. Use quando o conteúdo do blob for texto simples.
byte[] Os bytes do conteúdo do blob.
Tipos serializáveis JSON Quando um blob contém dados JSON, o Functions tenta desserializar os dados JSON em um tipo de objeto CLR (POCO) simples.
Fluxo1 Um fluxo de entrada do conteúdo do blob.
BlobClient1,
BlockBlobClient1,
PageBlobClient1,
AppendBlobClient1,
BlobBaseClient1
Um cliente conectado ao blob. Esse conjunto de tipos oferece mais controle para processar o blob e pode ser usado para gravar novamente no blob se a conexão tiver permissão suficiente.

1 Para usar esses tipos, você precisa fazer referência a Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0 ou posterior e às dependências comuns para associações de tipo SDK.

A ligação ao string, ou Byte[] só é recomendada quando o tamanho do blob é pequeno. Isso é recomendado porque todo o conteúdo do blob é carregado na memória. Para a maioria dos blobs, use um Stream ou BlobClient tipo. Para obter mais informações, consulte Simultaneidade e uso de memória.

Se você receber uma mensagem de erro ao tentar vincular a um dos tipos de SDK de armazenamento, certifique-se de ter uma referência à versão correta do SDK de armazenamento.

Você também pode usar o StorageAccountAttribute para especificar a conta de armazenamento a ser usada. Você pode fazer isso quando precisar usar uma conta de armazenamento diferente de outras funções na biblioteca. O construtor leva o nome de uma configuração de aplicativo que contém uma cadeia de conexão de armazenamento. O atributo pode ser aplicado no nível de parâmetro, método ou classe. O exemplo a seguir mostra o nível da classe e o nível do método:

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

A conta de armazenamento a ser usada é determinada na seguinte ordem:

  • A BlobTrigger propriedade do Connection atributo.
  • O StorageAccount atributo aplicado ao mesmo parâmetro que o BlobTrigger atributo.
  • O StorageAccount atributo aplicado à função.
  • O StorageAccount atributo aplicado à classe.
  • A conta de armazenamento padrão para o aplicativo de função, que é definida na configuração do AzureWebJobsStorage aplicativo.

O @BlobTrigger atributo é usado para lhe dar acesso ao blob que disparou a função. Consulte o exemplo de gatilho para obter detalhes.

Acesse os dados de blob como o primeiro argumento para sua função.

Acesse os dados do blob por meio de um parâmetro que corresponda ao nome designado pelo parâmetro name da ligação no arquivo function.json .

Acesse dados de blob por meio do parâmetro digitado como InputStream. Consulte o exemplo de gatilho para obter detalhes.

O Functions também dá suporte a associações de tipo SDK Python para armazenamento de Blob do Azure, que permite trabalhar com dados de blob usando estes tipos de SDK subjacentes:

Importante

O suporte a tipos de SDK para Python está atualmente em pré-visualização e só é suportado para o modelo de programação Python v2. Para obter mais informações, consulte Tipos de SDK em Python.

Ligações

A connection propriedade é uma referência à configuração do ambiente que especifica como o aplicativo deve se conectar aos Blobs do Azure. Pode especificar:

  • O nome de uma configuração de aplicativo que contém uma cadeia de conexão
  • O nome de um prefixo compartilhado para várias configurações de aplicativo, definindo em conjunto uma conexão baseada em identidade.

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.

Connection string

Para obter uma cadeia de conexão, siga as etapas mostradas em Gerenciar chaves de acesso da conta de armazenamento. A cadeia de conexão deve ser para uma conta de armazenamento de uso geral, não uma conta de armazenamento de Blob.

Essa cadeia de conexão deve ser armazenada em uma configuração de aplicativo com um nome correspondente ao valor especificado pela connection propriedade da configuração de ligação.

Se o nome da configuração do aplicativo começar com "AzureWebJobs", você poderá especificar apenas o restante do nome aqui. Por exemplo, se você definir connection como "MyStorage", o tempo de execução do Functions procurará uma configuração de aplicativo chamada "AzureWebJobsMyStorage". Se você deixar connection vazio, o tempo de execução do Functions usará a cadeia de conexão de armazenamento padrão na configuração do aplicativo chamada AzureWebJobsStorage.

Conexões baseadas em identidade

Se você estiver usando a versão 5.x ou superior da extensão (pacote 3.x ou superior para pilhas de idiomas non-.NET), em vez de usar uma cadeia de conexão com um segredo, você pode fazer com que o aplicativo use uma identidade do Microsoft Entra. Para usar uma identidade, defina as configurações sob um prefixo comum que mapeia para a connection propriedade na configuração de gatilho e ligação.

Se você estiver definindo connection como "AzureWebJobsStorage", consulte Conectando-se ao armazenamento de host com uma identidade. Para todas as outras conexões, a extensão requer as seguintes propriedades:

Property Modelo de variável de ambiente Description Valor de exemplo
URI do serviço de Blob <CONNECTION_NAME_PREFIX>__serviceUri1 O URI do plano de dados do serviço de blob ao qual você está se conectando, usando o esquema HTTPS. https://< storage_account_name.blob.core.windows.net>

<CONNECTION_NAME_PREFIX>__blobServiceUri 1 pode ser usado como um alias. Se a configuração de conexão será usada por um gatilho de blob, blobServiceUri também deve ser acompanhada por queueServiceUri. Ver abaixo.

O serviceUri formulário não pode ser usado quando a configuração geral da conexão deve ser usada em blobs, filas e/ou tabelas. O URI só pode designar o serviço de blob. Como alternativa, você pode fornecer um URI especificamente para cada serviço, permitindo que uma única conexão seja usada. Se ambas as versões forem fornecidas, o formulário multisserviço será usado. Para configurar a conexão para vários serviços, em vez de <CONNECTION_NAME_PREFIX>__serviceUri, defina:

Property Modelo de variável de ambiente Description Valor de exemplo
URI do serviço de Blob <CONNECTION_NAME_PREFIX>__blobServiceUri O URI do plano de dados do serviço de blob ao qual você está se conectando, usando o esquema HTTPS. https://< storage_account_name.blob.core.windows.net>
URI do Serviço de Fila (necessário para gatilhos deblob 2) <CONNECTION_NAME_PREFIX>__queueServiceUri O URI do plano de dados de um serviço de fila, usando o esquema HTTPS. Esse valor só é necessário para gatilhos de blob. https://< storage_account_name.queue.core.windows.net>

2 O gatilho de blob lida com falhas em várias tentativas gravando blobs venenosos em uma fila. No formulário, a serviceUri AzureWebJobsStorage conexão é usada. No entanto, ao especificar blobServiceUri, um URI de serviço de fila também deve ser fornecido com queueServiceUri. É recomendável que você use o serviço da mesma conta de armazenamento que o serviço de blob. Você também precisa certificar-se de que o gatilho pode ler e gravar mensagens no serviço de fila configurado atribuindo uma função como Colaborador de Dados da Fila de Armazenamento.

Outras propriedades podem ser definidas para personalizar a conexão. Consulte Propriedades comuns para conexões baseadas em identidade.

Quando hospedadas no serviço Azure Functions, as conexões baseadas em identidade usam uma identidade gerenciada. 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 do Azure, isso significa que você precisa atribuir uma função no RBAC do Azure, usando funções internas ou personalizadas que fornecem 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.

Você precisa criar uma atribuição de função que forneça acesso ao seu contêiner de blob em tempo de execução. Funções de gerenciamento como Proprietário não são suficientes. A tabela a seguir mostra as funções internas recomendadas ao usar a extensão de Armazenamento de Blob em operação normal. Seu aplicativo pode exigir permissões adicionais com base no código que você escreve.

Tipo de vinculação Exemplo de funções internas
Acionador Proprietário de dados de blob de armazenamento e contribuidorde dados da fila de armazenamento 1

Permissões extras também devem ser concedidas à conexão AzureWebJobsStorage.2
Vinculação de entrada Leitor de Dados do Armazenamento de Blobs
Vinculação de saída Proprietário dos Dados do Armazenamento de Blobs

1 O gatilho de blob lida com falhas em várias tentativas gravando blobs venenosos em uma fila na conta de armazenamento especificada pela conexão.

2 A conexão AzureWebJobsStorage é usada internamente para blobs e filas que habilitam o gatilho. Se estiver configurado para usar uma conexão baseada em identidade, ele precisará de permissões extras além do requisito padrão. As permissões necessárias são cobertas pelas funções Proprietário de Dados de Blob de Armazenamento, Colaborador de Dados da Fila de Armazenamento e Colaborador de Conta de Armazenamento. Para saber mais, consulte Conectando-se ao armazenamento do host com uma identidade.

Padrões de nome de blob

Você pode especificar um padrão de nome de path blob na propriedade em function.json ou no construtor de atributo BlobTrigger . O padrão de nome pode ser um filtro ou uma expressão de ligação. As seguintes secções fornecem exemplos.

Gorjeta

Um nome de contêiner não pode conter um resolvedor no padrão de nome.

Obter nome de arquivo e extensão

O exemplo a seguir mostra como vincular ao nome do arquivo de blob e à extensão separadamente:

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

Se o blob for nomeado original-Blob1.txt, os blobname valores das variáveis e blobextension no código da função serão original-Blob1 e txt.

Filtrar no nome do blob

O exemplo a seguir é acionado somente em blobs no input contêiner que começam com a cadeia de caracteres "original-":

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

Se o nome do blob for original-Blob1.txt, o name valor da variável no código da função será Blob1.txt.

Filtrar por tipo de ficheiro

O exemplo a seguir é acionado somente em arquivos .png :

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

Filtrar chaves em nomes de arquivo

Para procurar chaves em nomes de arquivos, fuja das chaves usando duas chaves. O exemplo a seguir filtra blobs que têm chaves no nome:

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

Se o blob for nomeado {20140101}-soundfile.mp3, o valor da name variável no código da função será soundfile.mp3.

Sondagem e latência

A sondagem funciona como um híbrido entre a inspeção de logs e a execução de verificações periódicas de contêineres. Os blobs são verificados em grupos de 10.000 de cada vez com um token de continuação usado entre intervalos. Se seu aplicativo de função estiver no plano de consumo, pode haver um atraso de até 10 minutos no processamento de novos blobs se um aplicativo de função estiver ocioso.

Aviso

Os logs de armazenamento são criados com base no "melhor esforço". Não há garantia de que todos os eventos sejam capturados. Em algumas condições, os logs podem ser perdidos.

Se você precisar de um processamento de blob mais rápido ou confiável, considere mudar sua hospedagem para usar um plano do Serviço de Aplicativo com o Always On ativado, o que pode resultar em custos maiores. Você também pode considerar o uso de um gatilho diferente do clássico gatilho de blob de sondagem. Para obter mais informações e uma comparação das várias opções de acionamento para contêineres de armazenamento de blob, consulte Gatilho em um contêiner de blob.

Recibos de Blob

O tempo de execução do Azure Functions garante que nenhuma função de gatilho de blob seja chamada mais de uma vez para o mesmo blob novo ou atualizado. Para determinar se uma determinada versão de blob foi processada, ele mantém recibos de blob.

O Azure Functions armazena recibos de blob em um contêiner chamado azure-webjobs-hosts na conta de armazenamento do Azure para seu aplicativo de função (definido pela configuração AzureWebJobsStoragedo aplicativo). Um recibo de blob tem as seguintes informações:

  • A função acionada (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>, por exemplo: MyFunctionApp.Functions.CopyBlob)
  • O nome do contêiner
  • O tipo de blob (BlockBlob ou PageBlob)
  • O nome do blob
  • O ETag (um identificador de versão de blob, por exemplo: 0x8D1DC6E70A277EF)

Para forçar o reprocessamento de um blob, exclua manualmente o recibo de blob desse blob do contêiner azure-webjobs-hosts . Embora o reprocessamento possa não ocorrer imediatamente, é garantido que ocorrerá em um momento posterior. Para reprocessar imediatamente, o blob scaninfo em azure-webjobs-hosts/blobscaninfo pode ser atualizado. Todos os blobs com um carimbo de data/hora modificado pela última vez após a LatestScan propriedade serão verificados novamente.

Bolhas venenosas

Quando uma função de gatilho de blob falha para um determinado blob, o Azure Functions tenta novamente essa função um total de cinco vezes por padrão.

Se todas as 5 tentativas falharem, o Azure Functions adicionará uma mensagem a uma fila de armazenamento chamada webjobs-blobtrigger-poison. O número máximo de novas tentativas é configurável. A mesma configuração MaxDequeueCount é usada para manipulação de blob venenoso e manipulação de mensagens de fila de veneno. A mensagem de fila para blobs temporários é um objeto JSON que contém as seguintes propriedades:

  • FunctionId (no formato <FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>)
  • BlobType (BlockBlob ou PageBlob)
  • ContainerName
  • BlobName
  • ETag (um identificador de versão de blob, por exemplo: 0x8D1DC6E70A277EF)

Uso de memória e simultaneidade

Quando você se associa a um tipo de saída que não oferece suporte a streaming, como string, ou Byte[], o tempo de execução deve carregar o blob inteiro na memória mais de uma vez durante o processamento. Isso pode resultar em um uso de memória maior do que o esperado ao processar blobs. Sempre que possível, use um tipo de suporte a fluxo. O suporte a tipos depende do modo C# e da versão da extensão. Para obter mais informações, consulte Tipos de vinculação.

Neste momento, o tempo de execução deve carregar o blob inteiro na memória mais de uma vez durante o processamento. Isso pode resultar em um uso de memória maior do que o esperado ao processar blobs.

O uso de memória pode ser ainda mais afetado quando várias instâncias de função estão processando simultaneamente dados de blob. Se você estiver tendo problemas de memória usando um gatilho de Blob, considere reduzir o número de execuções simultâneas permitidas. É claro que reduzir a simultaneidade pode ter o efeito colateral de aumentar o acúmulo de blobs esperando para serem processados. Os limites de memória do seu aplicativo de função dependem do plano. Para obter mais informações, consulte Limites de serviço.

A maneira como você pode controlar o número de execuções simultâneas depende da versão da extensão de armazenamento que você está usando.

Ao usar a versão 5.0.0 da extensão de armazenamento ou uma versão posterior, você controla a simultaneidade de gatilho usando a maxDegreeOfParallelism configuração na configuração de blobs no host.json.

Os limites aplicam-se separadamente a cada função que usa um gatilho de blob.

host.json propriedades

O arquivo host.json contém configurações que controlam o comportamento do gatilho de blob. Consulte a seção Configurações de host.json para obter detalhes sobre as configurações disponíveis.

Próximos passos