Considerações de armazenamento do Azure Functions

O Azure Functions requer uma conta de armazenamento do Azure quando você cria uma instância de aplicativo de funções. Os seguintes serviços de armazenamento podem ser usados pelo aplicativo de funções:

Serviço de armazenamento Uso de funções
Armazenamento de Blobs do Azure Mantenha o estado de associações e as chaves de função.
Também usado pelos hubs de tarefas no Durable Functions.
Arquivos do Azure Compartilhamento de arquivos usado para armazenar e executar o código do aplicativo de funções em um Plano de consumo e Plano Premium.
Arquivos do Azure são configurados por padrão, mas você pode criar um aplicativo sem Arquivos do Azure, sob determinadas condições.
Armazenamento de Filas do Azure Usado pelos hubs de tarefas no Durable Functions.
Armazenamento de Tabelas do Azure Usado pelos hubs de tarefas no Durable Functions.

Importante

Ao usar o plano de hospedagem de Consumo/Premium, o código da função e os arquivos de configuração da associação são armazenados nos Arquivos do Azure na conta de armazenamento principal. Ao excluir a conta de armazenamento principal, esse conteúdo será excluído e não poderá ser recuperado.

Requisitos da conta de armazenamento

Quando você cria um aplicativo de funções, é necessário criar ou vincular uma conta de armazenamento do Azure de uso geral que oferece suporte ao armazenamento de Tabelas, Blobs e Filas. Isso ocorre porque o Functions usa o Armazenamento do Azure para operações como gerenciamento de gatilhos e log de execuções de função. Algumas contas de armazenamento não oferecem suporte a filas e tabelas. Essas contas incluem contas de armazenamento somente blob e Armazenamento Premium do Azure.

Para saber mais sobre tipos de conta de armazenamento, confira Introdução aos serviços de Armazenamento do Microsoft Azure.

Embora seja possível usar uma conta de armazenamento existente com o aplicativo de funções, verifique se ela atende a esses requisitos. As contas de armazenamento criadas como parte do fluxo de criação do aplicativo de funções têm a garantia de atender a esses requisitos de conta de armazenamento no portal do Azure. No portal, as contas sem suporte são filtradas ao escolher uma conta de armazenamento existente durante a criação de um aplicativo de funções. Nesse fluxo, você só tem permissão para escolher contas de armazenamento existentes na mesma região que o aplicativo de funções que está criando. Para saber mais, veja Local da conta de armazenamento.

Orientações sobre a Conta de armazenamento

Cada aplicativo de funções exige uma conta de armazenamento para ser operado. Se essa conta for excluída, o aplicativo de funções não será executado. Para solucionar problemas relacionados ao armazenamento, consulte Como solucionar problemas relacionados ao armazenamento. As considerações adicionais a seguir se aplicam à Conta de armazenamento usada pelos aplicativos de funções.

Local da conta de armazenamento

Para obter o melhor desempenho, o aplicativo de funções deve usar uma conta de armazenamento na mesma região, o que reduz a latência. O portal do Azure impõe essa prática recomendada. Se, por algum motivo, você precisar usar uma conta de armazenamento em uma região diferente do aplicativo de funções, deverá criar o aplicativo de funções fora do portal.

Configuração da conta de armazenamento

A conexão da conta de armazenamento é mantida na configuração de aplicativo AzureWebJobsStorage.

As cadeias de conexão da conta de armazenamento deverão ser atualizadas se você regenerar as chaves de armazenamento. Leia mais sobre o gerenciamento de chaves de armazenamento aqui.

Contas de armazenamento compartilhadas

É possível que vários aplicativos de funções compartilhem a mesma conta de armazenamento sem nenhum problema. Por exemplo, no Visual Studio, você pode desenvolver vários aplicativos usando o Emulador de Armazenamento do Azure. Nesse caso, o emulador age como uma única conta de armazenamento. A mesma conta de armazenamento usada pelo aplicativo de funções também pode ser usada para armazenar os dados do aplicativo. No entanto, essa abordagem nem sempre é uma boa ideia em um ambiente de produção.

Considerações sobre políticas de gerenciamento de ciclo de vida

O Functions usa o armazenamento de Blob para manter informações importantes, como chaves de acesso de função. Quando você aplica uma política de gerenciamento de ciclo de vida à sua conta de Armazenamento de Blobs, a política pode remover os blobs necessários para o host do Functions. Por isso, você não deve aplicar essas políticas à conta de armazenamento usada pelas funções. Se você precisar aplicar essa política, lembre-se de excluir contêineres usados por funções, que geralmente são prefixadas com azure-webjobs ou scm.

Otimizar o desempenho de armazenamento

Use uma conta de armazenamento separada para cada aplicativo de funções para maximizar o desempenho. Isso será especialmente importante ao disparar as funções do Durable Functions ou do Hub de Eventos, que geram um alto volume de transações de armazenamento. Quando a lógica de aplicativo interagir com o Armazenamento do Azure, de modo direto (usando o SDK de Armazenamento) ou por meio de uma das associações de armazenamento, você deverá usar uma conta de armazenamento dedicada. Por exemplo, caso uma função disparada pelo Hub de Eventos esteja gravando dados no armazenamento de blobs, use duas contas de armazenamento—uma para o aplicativo de funções e outra para os blobs que estão sendo armazenados pela função.

Criptografia do armazenamento de dados

O Armazenamento do Azure criptografa todos os dados em uma conta de armazenamento em repouso. Para obter mais informações, consulte Criptografia do Armazenamento do Azure para dados em repouso.

Por padrão, os dados são criptografados com chaves gerenciadas pela Microsoft. Para obter controle adicional sobre as chaves de criptografia, você pode fornecer chaves gerenciadas pelo cliente para usar para criptografia de dados de blob e arquivo. Essas chaves devem estar presentes no Azure Key Vault para que o Functions possa acessar a conta de armazenamento. Para saber mais, confira Criptografia em repouso usando chaves gerenciadas pelo cliente.

Residência de dados na região

Quando todos os dados do cliente devem permanecer em uma única região, a conta de armazenamento associada ao aplicativo de funções deve ser uma com redundância na região. Uma conta de armazenamento redundante na região também deve ser usada com o Azure Durable Functions.

Outros dados do cliente gerenciados pela plataforma são armazenados apenas dentro da região ao hospedar em um ASE (Ambiente do Serviço de Aplicativo) com balanceamento de carga internamente. Para saber mais, veja Redundância de zona do ASE.

Criar um aplicativo sem Arquivos do Azure

Arquivos do Azure são configurados, por padrão, em planos Premium e em planos de Consumo que não sejam em Linux, para servir como um sistema de arquivos compartilhado em cenários de alta escala. O sistema de arquivos é usado pela plataforma para alguns recursos, como streaming de log, mas garante, principalmente, a consistência do conteúdo da função implantada. Quando um aplicativo é implantado, usando uma URL de pacote externo, o conteúdo do aplicativo é servido de um sistema de arquivos somente leitura separado, portanto, os Arquivos do Azure podem ser omitidos, se desejado. Nesses casos, um sistema de arquivos gravável é fornecido, mas não há garantia de que seja compartilhado com todas as instâncias do aplicativo de funções.

Quando os Arquivos do Azure não forem usados, você deverá levar em conta o seguinte:

  • Você precisa implantar a partir de uma URL de pacote externo.
  • Seu aplicativo não pode depender de um sistema compartilhado de arquivos graváveis.
  • O aplicativo não pode usar o runtime v1 do Functions.
  • Experiências de streaming de log em clientes, como o portal do Azure de padrão para logs do sistema de arquivos. Em vez disso, você deve confiar em logs do Application Insights.

Se as informações acima forem contabilizadas corretamente, você pode criar o aplicativo sem Arquivos do Azure. Crie o aplicativo de funções sem especificar as configurações dos aplicativos WEBSITE_CONTENTAZUREFILECONNECTIONSTRING e WEBSITE_CONTENTSHARE. Para isso, gere um modelo do ARM para uma implantação padrão, remova essas duas configurações e, em seguida, implante o modelo.

Como o Functions usa os Arquivos do Azure durante partes do processo de expansão dinâmica, o dimensionamento pode ser limitado ao ser executado sem os Arquivos do Azure nos planos de Consumo e Premium.

Montar compartilhamento de arquivos

Essa funcionalidade só estará disponível quando estiver em execução no Linux.

Você pode montar compartilhamentos de arquivos existentes do Azure para os aplicativos de funções do Linux. Ao montar um compartilhamento em seu aplicativo de funções do Linux, você pode aproveitar os modelos de machine learning existentes ou outros dados em suas funções. Use o comando az webapp config storage-account add para montar um compartilhamento existente para o aplicativo de funções do Linux.

Nesse comando, share-name é o nome do compartilhamento de arquivos do Azure existente e custom-id pode ser qualquer cadeia de caracteres que defina exclusivamente o compartilhamento quando montado no aplicativo de funções. Além disso, mount-path é o caminho do qual o compartilhamento é acessado no aplicativo de funções. mount-path deve estar no formato /dir-name e não pode começar com /home.

Para obter um exemplo completo, consulte os scripts em Criar um aplicativo de funções Python e montar um compartilhamento de arquivos do Azure.

No momento, apenas um storage-type de AzureFiles é compatível. Só é possível montar cinco compartilhamentos para um determinado aplicativo de funções. A montagem de um compartilhamento de arquivos pode aumentar o tempo de inicialização a frio em pelo menos 200-300ms ou até mais quando a conta de armazenamento está em uma região diferente.

O compartilhamento montado está disponível para o código de função no mount-path especificado. Por exemplo, quando mount-path é /path/to/mount, você pode acessar o diretório de destino por APIs do sistema de arquivos, como no exemplo de Python a seguir:

import os
...

files_in_share = os.listdir("/path/to/mount")

Próximas etapas

Saiba mais sobre as opções de hospedagem do Azure Functions.