Associações de armazenamento do Blob do Azure para o Azure FunctionsAzure Blob storage bindings for Azure Functions

Este artigo explica como trabalhar com associações de armazenamento de blob do Azure no Azure Functions.This article explains how to work with Azure Blob storage bindings in Azure Functions. O Azure Functions dá suporte a associações de saída, gatilho e entrada para blobs.Azure Functions supports trigger, input, and output bindings for blobs. O artigo inclui uma seção para cada associação:The article includes a section for each binding:

Essas são as informações de referência para desenvolvedores do Azure Functions.This is reference information for Azure Functions developers. Se for novo no Azure Functions, comece com os seguintes recursos:If you're new to Azure Functions, start with the following resources:

Observação

Use o gatilho de Grade de Eventos em vez do disparador do armazenamento de Blob apenas para contas de armazenamento de blob, para alta escala ou para reduzir a latência.Use the Event Grid trigger instead of the Blob storage trigger for blob-only storage accounts, for high scale, or to reduce latency. Para saber mais, veja a seção Gatilho a seguir.For more information, see the Trigger section.

Pacotes - Functions 1. xPackages - Functions 1.x

As associações de armazenamento de Blob são fornecidas no Microsoft.Azure.WebJobs pacote NuGet, versão 2. x.The Blob storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. O código-fonte do pacote está no repositório GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

O suporte para essa associação é fornecido automaticamente em todos os ambientes de desenvolvimento.Support for this binding is automatically provided in all development environments. Você não precisa instalar o pacote ou registrar a extensão manualmente.You don't have to manually install the package or register the extension.

Versão do SDK de Armazenamento do Microsoft Azure em Funções 1. xAzure Storage SDK version in Functions 1.x

Em Funções de 1. x, os gatilhos de armazenamento e associações usam a versão 7.2.1 do SDK de Armazenamento do Microsoft Azure (windowsazure pacote NuGet).In Functions 1.x, the Storage triggers and bindings use version 7.2.1 of the Azure Storage SDK (WindowsAzure.Storage NuGet package). Se você referenciar uma versão diferente do SDK do armazenamento e associar a um tipo de SDK de armazenamento na sua assinatura de função, o tempo de execução de funções pode relatar se não é possível associar a esse tipo.If you reference a different version of the Storage SDK, and you bind to a Storage SDK type in your function signature, the Functions runtime may report that it can't bind to that type. A solução é verificar as referências do projeto windowsazure 7.2.1.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

Pacotes-funções 2. x e superiorPackages - Functions 2.x and higher

As associações de armazenamento de Blobs são fornecidas no pacote NuGet Microsoft.Azure.WebJobs.Extensions.Storage, versão 3.x.The Blob storage bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x. O código-fonte do pacote está no repositório GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

A tabela a seguir informa como adicionar suporte para essa associação em cada ambiente de desenvolvimento.The following table tells how to add support for this binding in each development environment.

Ambiente de desenvolvimentoDevelopment environment Para adicionar suporteTo add support
Desenvolvimento local - biblioteca de classes do C#Local development - C# class library Instalar o pacoteInstall the package
Desenvolvimento local - script do C#, JavaScript, F#, Java e PythonLocal development - C# script, JavaScript, F#, Java and Python Registrar a extensãoRegister the extension
Desenvolvimento de portalPortal development Instalar ao adicionar uma associação de saídaInstall when adding output binding

Para saber como atualizar as extensões de associação existentes no portal sem precisar republicar o projeto de aplicativo de funções, consulte Atualizar as extensões.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

GatilhoTrigger

O gatilho de armazenamento de Blob inicia uma função quando é detectado um blob novo ou atualizado.The Blob storage trigger starts a function when a new or updated blob is detected. O conteúdo do blob é fornecido como entrada para a função.The blob contents are provided as input to the function.

O gatilho de Grade de Eventos tem suporte interno para eventos de blob e também pode ser usado para iniciar uma função quando um blob novo ou atualizado é detectado.The Event Grid trigger has built-in support for blob events and can also be used to start a function when a new or updated blob is detected. Para obter um exemplo, consulte o tutorial Redimensionamento de imagem com Grade de Eventos.For an example, see the Image resize with Event Grid tutorial.

Use a Grade de Eventos em vez do disparador de armazenamento de Blobs para os seguintes cenários:Use Event Grid instead of the Blob storage trigger for the following scenarios:

  • Contas de Armazenamento de BlobsBlob storage accounts
  • Alta escalaHigh scale
  • Minimizando a latênciaMinimizing latency

Contas de Armazenamento de BlobsBlob storage accounts

As contas de Armazenamento de Blobs são compatíveis para associações de entrada e saída de blobs, mas não para gatilhos de blob.Blob storage accounts are supported for blob input and output bindings but not for blob triggers. Os gatilhos de armazenamento de Blobs requerem uma conta de armazenamento de uso geral.Blob storage triggers require a general-purpose storage account.

Alta escalaHigh scale

A alta escala pode ser definida vagamente como contêineres que possuem mais de 100.000 blobs ou contas de armazenamento que têm mais de 100 atualizações de blobs por segundo.High scale can be loosely defined as containers that have more than 100,000 blobs in them or storage accounts that have more than 100 blob updates per second.

Problemas de latênciaLatency issues

Se seu aplicativo de funções está no plano de Consumo, pode haver um atraso de até 10 minutos no processamento de novos blobs se um aplicativo de funções ficar ocioso.If your function app is on the Consumption plan, there can be up to a 10-minute delay in processing new blobs if a function app has gone idle. Para evitar essa latência, você pode alternar para um plano do serviço de aplicativo com o Always On habilitado.To avoid this latency, you can switch to an App Service plan with Always On enabled. Você também pode usar um gatilho da Grade de Eventos com sua conta de armazenamento de Blob.You can also use an Event Grid trigger with your Blob storage account. Para obter um exemplo, confira o tutorial da Grade de Eventos.For an example, see the Event Grid tutorial.

Gatilho de armazenamento de filasQueue storage trigger

Além da Grade de Eventos, outra alternativa para blobs de processamento é o gatilho de armazenamento de Fila, mas ele não tem suporte interno para eventos de blob.Besides Event Grid, another alternative for processing blobs is the Queue storage trigger, but it has no built-in support for blob events. Você precisaria criar mensagens de fila ao criar ou atualizar blobs.You would have to create queue messages when creating or updating blobs. Suponto que você fez isso, consulte o exemplo de associação de entrada de blob mais adiante neste artigo.For an example that assumes you've done that, see the blob input binding example later in this article.

Gatilho - exemploTrigger - example

O exemplo a seguir mostra uma função C# que grava um log quando um blob é adicionado ou atualizado no contêiner samples-workitems.The following example shows a C# function that writes a log when a blob is added or updated in the samples-workitems container.

[FunctionName("BlobTriggerCSharp")]        
public static void Run([BlobTrigger("samples-workitems/{name}")] Stream myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

A cadeia de caracteres {name} no caminho do disparador de blob samples-workitems/{name} cria uma expressão de associação que você pode usar no código de função para acessar o nome de arquivo do blob disparando.The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. Para obter mais informações, consulte Padrões de nome do blob a seguir neste artigo.For more information, see Blob name patterns later in this article.

Para obter mais informações sobre o atributo BlobTrigger, consulte Gatilho - atributos.For more information about the BlobTrigger attribute, see Trigger - attributes.

Gatilho – atributosTrigger - attributes

Em bibliotecas de classe C#, use os seguintes atributos para configurar um gatilho de blob:In C# class libraries, use the following attributes to configure a blob trigger:

  • BlobTriggerAttributeBlobTriggerAttribute

    O construtor do atributo usa uma cadeia de caracteres de caminho que indica o contêiner para inspecionar e, opcionalmente, um padrão de nome de blob.The attribute's constructor takes a path string that indicates the container to watch and optionally a blob name pattern. Aqui está um exemplo:Here's an example:

    [FunctionName("ResizeImage")]
    public static void Run(
        [BlobTrigger("sample-images/{name}")] Stream image,
        [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
    {
        ....
    }
    

    Você pode definir a Connection propriedade para especificar a conta de armazenamento para usar, conforme mostrado no exemplo a seguir:You can set the Connection property to specify the storage account to use, as shown in the following example:

    [FunctionName("ResizeImage")]
    public static void Run(
        [BlobTrigger("sample-images/{name}", Connection = "StorageConnectionAppSetting")] Stream image,
        [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
    {
        ....
    }
    

    Para obter um exemplo completo, consulte exemplo de gatilho.For a complete example, see Trigger example.

  • StorageAccountAttributeStorageAccountAttribute

    Oferece uma maneira de especificar a conta de armazenamento para usar.Provides another way to specify the storage account to use. O construtor toma o nome de uma configuração de aplicativo que contenha uma cadeia de conexão de armazenamento.The constructor takes the name of an app setting that contains a storage connection string. O atributo pode ser aplicado no nível de classe, método ou parâmetro.The attribute can be applied at the parameter, method, or class level. O exemplo a seguir mostra o nível de classe e método:The following example shows class level and method level:

    [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:The storage account to use is determined in the following order:

  • A propriedade BlobTrigger do atributoConnection.The BlobTrigger attribute's Connection property.
  • O StorageAccount atributo aplicado ao mesmo parâmetro do BlobTrigger atributo.The StorageAccount attribute applied to the same parameter as the BlobTrigger attribute.
  • O StorageAccount atributo aplicado à função.The StorageAccount attribute applied to the function.
  • O StorageAccount atributo aplicado à classe.The StorageAccount attribute applied to the class.
  • A conta de armazenamento padrão para a função de aplicativo (configuração de aplicativo "AzureWebJobsStorage").The default storage account for the function app ("AzureWebJobsStorage" app setting).

Gatilho – configuraçãoTrigger - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no atributo BlobTrigger.The following table explains the binding configuration properties that you set in the function.json file and the BlobTrigger attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriptionDescription
tipotype N/Dn/a Deve ser definido como blobTrigger.Must be set to blobTrigger. Essa propriedade é definida automaticamente quando você cria o gatilho no portal do Azure.This property is set automatically when you create the trigger in the Azure portal.
directiondirection N/Dn/a Deve ser definido como in.Must be set to in. Essa propriedade é definida automaticamente quando você cria o gatilho no portal do Azure.This property is set automatically when you create the trigger in the Azure portal. As exceções são mencionadas na seção uso.Exceptions are noted in the usage section.
namename N/Dn/a O nome da variável que representa o blob no código de função.The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath O contêiner para monitorar.The container to monitor. Pode ser um padrão de nome de blob.May be a blob name pattern.
conexãoconnection ConexãoConnection O nome de uma configuração de aplicativo que contém uma cadeia de conexão de Armazenamento para usar para essa associação.The name of an app setting that contains the Storage connection string to use for this binding. Se o nome de configuração do aplicativo começar com "AzureWebJobs", você pode especificar apenas o resto do nome aqui.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Por exemplo, se você definir connection como "mystorage", o tempo de execução do Functions procurará uma configuração de aplicativo chamada "mystorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "MyStorage." Se você deixar connection vazio, o runtime de Functions usa a cadeia de caracteres de conexão de Armazenamento padrão na configuração de aplicativo chamada AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

A cadeia de conexão deve ser uma conta de armazenamento para uso geral e não uma conta de Armazenamento de Blobs.The connection string must be for a general-purpose storage account, not a Blob storage account.

Quando você estiver desenvolvendo localmente, as configurações de aplicativo serão adicionadas ao arquivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Gatilho - usoTrigger - usage

Você pode usar os seguintes tipos de parâmetro para o blob de gatilho:You can use the following parameter types for the triggering blob:

  • Stream
  • TextReader
  • string
  • Byte[]
  • Um POCO serializado como JSONA POCO serializable as JSON
  • ICloudBlob1ICloudBlob1
  • CloudBlockBlob1CloudBlockBlob1
  • CloudPageBlob1CloudPageBlob1
  • CloudAppendBlob1CloudAppendBlob1

1 Requer associação "inout" direction em function.json ou FileAccess.ReadWrite em uma biblioteca de classes C#.1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Se você tentar associar a um dos tipos de SDK de armazenamento e obter uma mensagem de erro, certifique-se de que você tem uma referência a a versão correta do SDK de armazenamento.If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

Associação para string, Byte[], ou POCO só é recomendada se o tamanho do blob for pequeno, pois o conteúdo inteiro do blob é carregado na memória.Binding to string, Byte[], or POCO is only recommended if the blob size is small, as the entire blob contents are loaded into memory. Geralmente, é preferível usar um tipo Stream ou CloudBlockBlob.Generally, it is preferable to use a Stream or CloudBlockBlob type. Para obter mais informações, consulte Concorrência e uso de memória mais adiante neste artigo.For more information, see Concurrency and memory usage later in this article.

Gatilho - padrões de nome de blobTrigger - blob name patterns

Você pode especificar um padrão de nome de blob na path propriedade em function.json ou no BlobTrigger construtor de atributo.You can specify a blob name pattern in the path property in function.json or in the BlobTrigger attribute constructor. O nome padrão pode ser uma expressão de associação ou filtro.The name pattern can be a filter or binding expression. As seções a seguir fornecem exemplos.The following sections provide examples.

Obtenha o nome de arquivo e extensãoGet file name and extension

O exemplo a seguir mostra como associar ao nome do arquivo de blob e extensão separadamente:The following example shows how to bind to the blob file name and extension separately:

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

Se um blob é nomeado original-Blob1.txt o valor das variáveis blobname e blobextension no código de função é original-Blob1 e txt.If the blob is named original-Blob1.txt, the values of the blobname and blobextension variables in function code are original-Blob1 and txt.

Filtre por nome de blobFilter on blob name

O exemplo a seguir gatilha apenas em blobs no input contêiner que iniciam com a cadeia de caracteres "original-":The following example triggers only on blobs in the input container that start with the string "original-":

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

Se o nome do blob for original-Blob1.txt, o valor da name variável no código da função é Blob1.If the blob name is original-Blob1.txt, the value of the name variable in function code is Blob1.

Filtre por tipo de arquivoFilter on file type

O exemplo a seguir é disparado apenas em arquivos .png:The following example triggers only on .png files:

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

Filtre em chaves em nomes de arquivosFilter on curly braces in file names

Para procurar as chaves em nomes de arquivos, escape as chaves usando duas chaves.To look for curly braces in file names, escape the braces by using two braces. O exemplo a seguir filtra por blobs que têm chaves no nome:The following example filters for blobs that have curly braces in the name:

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

Se o blob é nomeado {20140101}soundfile.mp3, o valor da variável name no código da função é soundfile.mp3.If the blob is named {20140101}-soundfile.mp3, the name variable value in the function code is soundfile.mp3.

Gatilho - metadadosTrigger - metadata

O gatilho de blob fornece várias propriedades de metadados.The blob trigger provides several metadata properties. 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.These properties can be used as part of binding expressions in other bindings or as parameters in your code. Esses valores têm a mesma semântica que o tipo CloudBlob.These values have the same semantics as the CloudBlob type.

PropriedadeProperty TipoType DescriçãoDescription
BlobTrigger string O caminho do blob de gatilho.The path to the triggering blob.
Uri System.Uri A URI do blob para o local principal.The blob's URI for the primary location.
Properties BlobPropertiesBlobProperties As propriedades do sistema do blob.The blob's system properties.
Metadata IDictionary<string,string> Os metadados definidos pelo usuário para o blob.The user-defined metadata for the blob.

Por exemplo, o script C# e exemplos de JavaScript a seguir registram o caminho para o blob disparando, incluindo o contêiner:For example, the following C# script and JavaScript examples log the path to the triggering blob, including the container:

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

Gatilho - recebimentos de blobTrigger - blob receipts

O Azure Functions runtime garante que nenhuma função de gatilho de blob seja chamada mais de uma vez para o mesmo blob novo ou atualizado.The Azure Functions runtime ensures that no blob trigger function gets called more than once for the same new or updated blob. Para determinar se uma versão de determinado blob foi processada, ele mantém os recebimentos de blob.To determine if a given blob version has been processed, it maintains blob receipts.

O Azure Functions armazena recibos do blob em um contêiner denominado azure-webjobs-hosts na conta de armazenamento do Azure do seu aplicativo de funções (definido na configuração do aplicativo AzureWebJobsStorage).Azure Functions stores blob receipts in a container named azure-webjobs-hosts in the Azure storage account for your function app (defined by the app setting AzureWebJobsStorage). Um recebimento de blob tem as seguintes informações:A blob receipt has the following information:

  • A função disparada (" <nome do aplicativo de funções> .Functions. <nome da função> ", por exemplo: "MyFunctionApp.Functions.CopyBlob")The triggered function ("<function app name>.Functions.<function name>", for example: "MyFunctionApp.Functions.CopyBlob")
  • O nome do contêinerThe container name
  • O tipo de blob ("BlockBlob" ou "PageBlob")The blob type ("BlockBlob" or "PageBlob")
  • O nome do blobThe blob name
  • O ETag (um identificador de versão de blob, por exemplo: "0x8D1DC6E70A277EF")The ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

Para forçar o reprocessamento de um blob, exclua manualmente o recebimento desse blob do contêiner azure-webjobs-hosts.To force reprocessing of a blob, delete the blob receipt for that blob from the azure-webjobs-hosts container manually. Embora o reprocessamento possa não ocorrer imediatamente, é garantido que ocorra em um momento posterior.While reprocessing might not occur immediately, it's guaranteed to occur at a later point in time.

Gatilho - mensagens suspeitasTrigger - poison blobs

Quando uma função de gatilho de blob falhar para um determinado blob, o Azure Functions repete essa função até cinco vezes por padrão.When a blob trigger function fails for a given blob, Azure Functions retries that function a total of 5 times by default.

Se todas as cinco tentativas falharem, o Azure Functions adiciona uma mensagem para uma fila de armazenamento denominada webjobs-blobtrigger-poison.If all 5 tries fail, Azure Functions adds a message to a Storage queue named webjobs-blobtrigger-poison. A mensagem da fila para blobs suspeitos é um objeto JSON que contém as seguintes propriedades:The queue message for poison blobs is a JSON object that contains the following properties:

  • FunctionId (no formato <nome do aplicativo de funções> .Functions. <nome da função> )FunctionId (in the format <function app name>.Functions.<function name>)
  • BlobType ("BlockBlob" ou "PageBlob")BlobType ("BlockBlob" or "PageBlob")
  • ContainerNameContainerName
  • BlobNameBlobName
  • ETag (um identificador de versão de blob, por exemplo: "0x8D1DC6E70A277EF")ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

Gatilho - concorrência e uso de memóriaTrigger - concurrency and memory usage

O gatilho de blob usa uma fila internamente, portanto, o número máximo de invocações de função concorrente é controlado pela configuração de filas em host.json.The blob trigger uses a queue internally, so the maximum number of concurrent function invocations is controlled by the queues configuration in host.json. As configurações padrão limitam a concorrência a 24 invocações.The default settings limit concurrency to 24 invocations. Esse limite aplica-se separadamente a cada função que usa um gatilho de blob.This limit applies separately to each function that uses a blob trigger.

O plano de consumo limita um aplicativo de funções em uma VM (máquina virtual) a 1,5 GB de memória.The Consumption plan limits a function app on one virtual machine (VM) to 1.5 GB of memory. A memória é usada por cada instância de execução de execução simultânea e pelo próprio runtime de Funções.Memory is used by each concurrently executing function instance and by the Functions runtime itself. Se uma função disparada por blob carregar todo o blob na memória, a memória máxima usada por essa função apenas para blobs será tamanho máximo de blob 24 *.If a blob-triggered function loads the entire blob into memory, the maximum memory used by that function just for blobs is 24 * maximum blob size. Por exemplo, um aplicativo de funções com três funções disparadas por blob e as configurações padrão teriam uma concorrência máxima por VM de 3*24 = 72 invocações de função.For example, a function app with three blob-triggered functions and the default settings would have a maximum per-VM concurrency of 3*24 = 72 function invocations.

As funções de JavaScript e Java carregam todo o blob na memória, e as funções C# fazem isso se você associar a string, Byte[] ou POCO.JavaScript and Java functions load the entire blob into memory, and C# functions do that if you bind to string, Byte[], or POCO.

Disparar - sondagemTrigger - polling

A sondagem funciona como um híbrido entre a inspeção de logs e a execução de verificações de contêiner periódicas.Polling works as a hybrid between inspecting logs and running periodic container scans. Os BLOBs são verificados em grupos de 10.000 por vez com um token de continuação usado entre intervalos.Blobs are scanned in groups of 10,000 at a time with a continuation token used between intervals.

Aviso

Além disso, logs de armazenamento são criados da "melhor forma dentro do possível".In addition, storage logs are created on a "best effort" basis. Não há nenhuma garantia de que todos os eventos são capturados.There's no guarantee that all events are captured. Sob algumas condições, logs poderão ser perdidos.Under some conditions, logs may be missed.

Se você precisar de um processamento de blob mais rápido ou confiável, crie uma mensagem de fila ao criar o blob.If you require faster or more reliable blob processing, consider creating a queue message when you create the blob. Em seguida, use um gatilho de fila em vez de um gatilho de blob para processar o blob.Then use a queue trigger instead of a blob trigger to process the blob. Outra opção é usar a Grade de Eventos; consulte o tutorial Automatize redimensionamento de imagens carregadas usando a Grade de Eventos.Another option is to use Event Grid; see the tutorial Automate resizing uploaded images using Event Grid.

EntradaInput

Use uma associação de entrada de Armazenamento de Blobs para ler blobs.Use a Blob storage input binding to read blobs.

Entrada - exemploInput - example

O exemplo a seguir é uma função C# que usa um gatilho de fila e uma associação de blob de entrada.The following example is a C# function that uses a queue trigger and an input blob binding. A mensagem da fila contém o nome do blob e a função registra o tamanho do blob.The queue message contains the name of the blob, and the function logs the size of the blob.

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read)] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

Entrada – atributosInput - attributes

Em bibliotecas de classes do C#, use o BlobAttribute.In C# class libraries, use the BlobAttribute.

O construtor do atributo usa o caminho para o blob e um parâmetro FileAccess que indica a leitura ou gravação, conforme mostrado no exemplo a seguir:The attribute's constructor takes the path to the blob and a FileAccess parameter indicating read or write, as shown in the following example:

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read)] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

Você pode definir a Connection propriedade para especificar a conta de armazenamento para usar, conforme mostrado no exemplo a seguir:You can set the Connection property to specify the storage account to use, as shown in the following example:

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read, Connection = "StorageConnectionAppSetting")] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

Você pode usar o StorageAccount atributo para especificar a conta de armazenamento no nível de classe, método ou parâmetro.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Para obter mais informações, consulte Gatilho - atributos.For more information, see Trigger - attributes.

Entrada - configuraçãoInput - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no atributo Blob.The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriptionDescription
tipotype N/Dn/a Deve ser definido como blob.Must be set to blob.
directiondirection N/Dn/a Deve ser definido como in.Must be set to in. As exceções são mencionadas na seção uso.Exceptions are noted in the usage section.
namename N/Dn/a O nome da variável que representa o blob no código de função.The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath O caminho para o blob.The path to the blob.
conexãoconnection ConexãoConnection O nome de uma configuração de aplicativo que contém uma cadeia de conexão de Armazenamento para usar para essa associação.The name of an app setting that contains the Storage connection string to use for this binding. Se o nome de configuração do aplicativo começar com "AzureWebJobs", você pode especificar apenas o resto do nome aqui.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Por exemplo, se você definir connection como "mystorage", o tempo de execução do Functions procurará uma configuração de aplicativo chamada "mystorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "MyStorage." Se você deixar connection vazio, o runtime de Functions usa a cadeia de caracteres de conexão de Armazenamento padrão na configuração de aplicativo chamada AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

A cadeia de conexão deve ser uma conta de armazenamento de finalidade geral e não uma conta de armazenamento de blobs.The connection string must be for a general-purpose storage account, not a blob-only storage account.
N/Dn/a AccessAccess Indica se você será leitura ou gravação.Indicates whether you will be reading or writing.

Quando você estiver desenvolvendo localmente, as configurações de aplicativo serão adicionadas ao arquivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Entrada - usoInput - usage

Você pode usar os seguintes tipos de parâmetro para a associação de entrada de blob:You can use the following parameter types for the blob input binding:

  • Stream
  • TextReader
  • string
  • Byte[]
  • CloudBlobContainer
  • CloudBlobDirectory
  • ICloudBlob1ICloudBlob1
  • CloudBlockBlob1CloudBlockBlob1
  • CloudPageBlob1CloudPageBlob1
  • CloudAppendBlob1CloudAppendBlob1

1 Requer associação "inout" direction em function.json ou FileAccess.ReadWrite em uma biblioteca de classes C#.1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Se você tentar associar a um dos tipos de SDK de armazenamento e obter uma mensagem de erro, certifique-se de que você tem uma referência a a versão correta do SDK de armazenamento.If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

Associação para string ou Byte[] só é recomendada se o tamanho do blob for pequeno, pois o conteúdo inteiro do blob é carregado na memória.Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. Geralmente, é preferível usar um tipo Stream ou CloudBlockBlob.Generally, it is preferable to use a Stream or CloudBlockBlob type. Para obter mais informações, consulte Concorrência e uso de memória mais adiante neste artigo.For more information, see Concurrency and memory usage earlier in this article.

SaídaOutput

Usar as associações de saída do Armazenamento de Blobs para gravar os blobs.Use Blob storage output bindings to write blobs.

Saída - exemploOutput - example

O exemplo a seguir é uma função C# que usa um gatilho de blob e duas associações de blob de saída.The following example is a C# function that uses a blob trigger and two output blob bindings. A função é gatilhada pela criação de um blob de imagem no contêiner imagens de amostra.The function is triggered by the creation of an image blob in the sample-images container. Isso cria cópias de pequeno e médio tamanho de blob de imagem.It creates small and medium size copies of the image blob.

using System.Collections.Generic;
using System.IO;
using Microsoft.Azure.WebJobs;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

public class ResizeImages
{
    [FunctionName("ResizeImage")]
    public static void Run([BlobTrigger("sample-images/{name}")] Stream image,
        [Blob("sample-images-sm/{name}", FileAccess.Write)] Stream imageSmall,
        [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageMedium)
    {
        IImageFormat format;

        using (Image<Rgba32> input = Image.Load<Rgba32>(image, out format))
        {
            ResizeImage(input, imageSmall, ImageSize.Small, format);
        }

        image.Position = 0;
        using (Image<Rgba32> input = Image.Load<Rgba32>(image, out format))
        {
            ResizeImage(input, imageMedium, ImageSize.Medium, format);
        }
    }

    public static void ResizeImage(Image<Rgba32> input, Stream output, ImageSize size, IImageFormat format)
    {
        var dimensions = imageDimensionsTable[size];

        input.Mutate(x => x.Resize(dimensions.Item1, dimensions.Item2));
        input.Save(output, format);
    }

    public enum ImageSize { ExtraSmall, Small, Medium }

    private static Dictionary<ImageSize, (int, int)> imageDimensionsTable = new Dictionary<ImageSize, (int, int)>() {
        { ImageSize.ExtraSmall, (320, 200) },
        { ImageSize.Small,      (640, 400) },
        { ImageSize.Medium,     (800, 600) }
    };

}

Saída - atributosOutput - attributes

Em bibliotecas de classes do C#, use o BlobAttribute.In C# class libraries, use the BlobAttribute.

O construtor do atributo usa o caminho para o blob e um parâmetro FileAccess que indica a leitura ou gravação, conforme mostrado no exemplo a seguir:The attribute's constructor takes the path to the blob and a FileAccess parameter indicating read or write, as shown in the following example:

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{name}")] Stream image,
    [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
{
    ...
}

Você pode definir a Connection propriedade para especificar a conta de armazenamento para usar, conforme mostrado no exemplo a seguir:You can set the Connection property to specify the storage account to use, as shown in the following example:

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{name}")] Stream image,
    [Blob("sample-images-md/{name}", FileAccess.Write, Connection = "StorageConnectionAppSetting")] Stream imageSmall)
{
    ...
}

Para obter um exemplo completo, consulte exemplo de saída.For a complete example, see Output example.

Você pode usar o StorageAccount atributo para especificar a conta de armazenamento no nível de classe, método ou parâmetro.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Para obter mais informações, consulte Gatilho - atributos.For more information, see Trigger - attributes.

Saída - configuraçãoOutput - configuration

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json e no atributo Blob.The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

Propriedade function.jsonfunction.json property Propriedade de atributoAttribute property DescriptionDescription
tipotype N/Dn/a Deve ser definido como blob.Must be set to blob.
directiondirection N/Dn/a Deve ser definido como out para uma associação de saída.Must be set to out for an output binding. As exceções são mencionadas na seção uso.Exceptions are noted in the usage section.
namename N/Dn/a O nome da variável que representa o blob no código de função.The name of the variable that represents the blob in function code. Definido como $return para referenciar o valor de retorno da função.Set to $return to reference the function return value.
pathpath BlobPathBlobPath O caminho para o contêiner de BLOB.The path to the blob container.
conexãoconnection ConexãoConnection O nome de uma configuração de aplicativo que contém uma cadeia de conexão de Armazenamento para usar para essa associação.The name of an app setting that contains the Storage connection string to use for this binding. Se o nome de configuração do aplicativo começar com "AzureWebJobs", você pode especificar apenas o resto do nome aqui.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Por exemplo, se você definir connection como "mystorage", o tempo de execução do Functions procurará uma configuração de aplicativo chamada "mystorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "MyStorage." Se você deixar connection vazio, o runtime de Functions usa a cadeia de caracteres de conexão de Armazenamento padrão na configuração de aplicativo chamada AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

A cadeia de conexão deve ser uma conta de armazenamento de finalidade geral e não uma conta de armazenamento de blobs.The connection string must be for a general-purpose storage account, not a blob-only storage account.
N/Dn/a AccessAccess Indica se você será leitura ou gravação.Indicates whether you will be reading or writing.

Quando você estiver desenvolvendo localmente, as configurações de aplicativo serão adicionadas ao arquivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Saída - usoOutput - usage

Você pode associar aos seguintes tipos para gravar BLOBs:You can bind to the following types to write blobs:

  • TextWriter
  • out string
  • out Byte[]
  • CloudBlobStream
  • Stream
  • CloudBlobContainer1CloudBlobContainer1
  • CloudBlobDirectory
  • ICloudBlob2ICloudBlob2
  • CloudBlockBlob2CloudBlockBlob2
  • CloudPageBlob2CloudPageBlob2
  • CloudAppendBlob2CloudAppendBlob2

1 Requer associação "in" direction em function.json ou FileAccess.Read em uma biblioteca de classes C#.1 Requires "in" binding direction in function.json or FileAccess.Read in a C# class library. No entanto, você pode usar o objeto de contêiner que o tempo de execução fornece para operações de gravação, como carregar blobs no contêiner.However, you can use the container object that the runtime provides to do write operations, such as uploading blobs to the container.

2 Requer associação "inout" direction em function.json ou FileAccess.ReadWrite em uma biblioteca de classes C#.2 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Se você tentar associar a um dos tipos de SDK de armazenamento e obter uma mensagem de erro, certifique-se de que você tem uma referência a a versão correta do SDK de armazenamento.If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

Em funções assíncronas, use o valor de retorno ou IAsyncCollector em vez de um parâmetro out.In async functions, use the return value or IAsyncCollector instead of an out parameter.

Associação para string ou Byte[] só é recomendada se o tamanho do blob for pequeno, pois o conteúdo inteiro do blob é carregado na memória.Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. Geralmente, é preferível usar um tipo Stream ou CloudBlockBlob.Generally, it is preferable to use a Stream or CloudBlockBlob type. Para obter mais informações, consulte Concorrência e uso de memória mais adiante neste artigo.For more information, see Concurrency and memory usage earlier in this article.

Exceções e códigos de retornoExceptions and return codes

AssociaçãoBinding ReferênciaReference
BlobBlob Códigos de erro de BlobBlob Error Codes
Blob, tabela, filaBlob, Table, Queue Códigos de erro de armazenamentoStorage Error Codes
Blob, tabela, filaBlob, Table, Queue Solução de problemasTroubleshooting

Próximos passosNext steps