Escolha uma estratégia de acesso a ficheiros para o Funções do Azure

Este artigo compara duas formas de aceder a ficheiros a partir do Funções do Azure: ligações de armazenamento e montagens de armazenamento Ficheiros do Azure. Aprende-se as compensações entre cada abordagem, identifica-se quando as montagens são a escolha certa e encontram-se padrões para cenários do mundo real.

As encadernações de armazenamento funcionam em todos os planos de alojamento. As montagens de armazenamento são exclusivas do Linux e não são suportadas pelo plano Consumption.

Sugestão

Se precisar de armazenamento de dados estruturados em vez de acesso a ficheiros, o Funções do Azure fornece extensões de binding para SQL do Azure e Azure Cosmos DB, ou pode usar qualquer base de dados com ligação a um cliente SDK.

Se quiseres passar diretamente ao código de trabalho, vê o Tutorial: Análise de texto durável com uma partilha Ficheiros do Azure montada para processamento paralelo de ficheiros ou Tutorial: Processar imagens usando FFmpeg numa partilha Ficheiros do Azure montada para alojar grandes binários numa montagem.

Observação

Os exemplos de código deste artigo estão disponíveis no repositório GitHub Funções do Azure Flex Consumption with Ficheiros do Azure OS Mount Samples.

Opções de acesso a ficheiros num relance

Quando precisa de aceder a ficheiros a partir das suas funções, tem três opções principais:

Abordagem Vantagens Cons Melhor para Mais informações
Encadernações de armazenamento Simples, nativo para a nuvem, seguro Overhead de rede, consistência eventual Mover dados para/de serviços de nuvem (filas, blobs) Blob, Queue, Tabela
Montagem de armazenamento (Ficheiros do Azure) Acesso direto a ficheiros, semântica POSIX, binários grandes Apenas em Linux, mais lento que o disco local Ficheiros grandes, executáveis partilhados, acesso frequente O que é um suporte de armazenamento?

Nem todas as opções estão disponíveis em todos os planos de alojamento:

Plano de alojamento Ligações de armazenamento Montagem de armazenamento (Ficheiros do Azure)
Consumo Flexível
Elástico Premium
Dedicado (Serviço de Aplicativo)
Consumo (apenas Windows)

O resto deste artigo foca-se nas montagens: quando são a escolha certa e como utilizá-las em segurança.

O que é um suporte de armazenamento?

Uma montagem de armazenamento é uma partilha de ficheiros em rede que se monta como se fosse um diretório local. Quando monta uma partilha Ficheiros do Azure na sua aplicação de funções, o caminho aparece no sistema de ficheiros do contentor de funções:

┌─────────────────────────────────────┐
│  Your function code                 │
│  (reads/writes to /mnt/mydata/)     │
├─────────────────────────────────────┤
│  POSIX file-system layer            │
│  (appears as a local directory)     │
├─────────────────────────────────────┤
│  SMB protocol (over network)        │
├─────────────────────────────────────┤
│  Azure Files share                  │
│  (in your storage account)          │
└─────────────────────────────────────┘

O teu código usa APIs padrão do sistema de ficheiros (por exemplo, open(), os.listdir() em Python, ou chamadas equivalentes noutras linguagens) sem saber que está a comunicar pela rede. Esta configuração fornece semântica POSIX, o que significa que o seu código parece uma E/S local de ficheiros.

Quando não usar suportes

As montagens não são a escolha certa para todos os cenários. Considere estas alternativas:

Scenario Alternativa recomendada
Dados transitórios pequenos Armazenamento de Filas do Azure
Armazenamento de Blobs do Azure
Pequenas leituras/escritas frequentes Azure Cosmos DB ou Cache do Azure para Redis
Streaming em tempo real Hubs de Eventos do Azure ou Hub IoT do Azure
Partilha de dados entre regiões Replicação de Armazenamento Blob

Importante

As montagens de armazenamento só funcionam em Linux e não são suportadas no plano Consumption.

Comparar opções de armazenamento

Considere estas opções ao processar 1.000 imagens (1 MB cada) armazenadas numa pasta de referência:

Abordagem Mecanismo Chamadas de rede Custo relativo Melhor para
Ligação de armazenamento por blobs Descarregue cada ficheiro 1.000 pedidos GET Alta largura de banda + latência Acesso pontual ou pouco frequente
Suporte de armazenamento Ler a partir de partilha Configuração de um único suporte Largura de banda mínima Acesso repetido ou de alto volume
Base de dados externa Azure Cosmos DB Uma pergunta Cargas da RU + latência de rede Dados estruturados com consultas complexas

Observação

Os seguintes exemplos de código usam Python, mas o mesmo padrão aplica-se a qualquer linguagem que suporte APIs de sistema de ficheiros, incluindo C#, Java, JavaScript e PowerShell.

files = container_client.list_blobs(name_starts_with="reference/")
for blob in files:
    stream = container_client.download_blob(blob.name)

Para ficheiros partilhados grandes com acesso repetido, use montagens de partilha. Vamos investigar cenários mais detalhados que usam montagens de partilha.

Cenários de partilha de montagem

Estes cenários de exemplo também beneficiam da utilização de partilhas de armazenamento montadas:

Scenario Problema resolvido Exemplo
Análise paralela de ficheiros Evite empacotar grandes dados de referência ou descarregá-los por invocação Modelos de ML, tabelas de consulta, dados de corpus partilhados por 1.000+ instâncias
Executáveis partilhados Mantenha os binários grandes fora do pacote de implementação ffmpeg, ImageMagick ou outras ferramentas de 500+ MB
Partilha de dados entre aplicações Partilhe ficheiros entre aplicações de produtor e de consumo sem passar mensagens A aplicação A escreve os resultados, e a aplicação B lê-os do mesmo ponto de montagem.

Selecione cada separador para ver detalhes sobre o cenário específico:

Caso de uso: Tem 1.000 tarefas de análise que precisam todas de ler do mesmo conjunto de ficheiros de dados de referência (por exemplo, modelos de ML, tabelas de consulta ou dados de corpus).

Observação

Para um guia completo deste padrão, veja Tutorial: Análise de texto durável com uma partilha Ficheiros do Azure montada.

O problema: Sem suportes, temos duas opções subótimas:

  • Empacota os ficheiros de referência com a tua função: Esta abordagem resulta num enorme artefacto de implementação, arranques lentos a frio e redundância de armazenamento.
  • Descarregar sempre a partir do Armazenamento de Blobs: Esta abordagem introduz latência de rede em cada invocação de função e desperdiça largura de banda.

A solução baseada em montagens: Todas as instâncias leem diretamente da partilha montada. Após a inicialização da montagem, não há overhead de rede por pedido nem armazenamento redundante.

┌─────────────────────────┐
│  Function Instance 1    │
│  Function Instance 2    ├──→  /mnt/models/  ──→  Azure Files share
│  Function Instance 3    │     (shared mount)
└─────────────────────────┘

Padrão de implementação: (Python)

import os
from pathlib import Path

MOUNT_PATH = "/mnt/models"

def analyze_data(item: str) -> dict:
    """Activity function: reads from shared mount."""
    model_path = Path(MOUNT_PATH) / "model.pkl"
    
    # Direct file I/O — no SDK call, no network overhead
    with open(model_path, "rb") as f:
        model = pickle.load(f)
    
    result = model.predict(item)
    return {"item": item, "score": result}

Pontos principais:

  • Todas as instâncias da tua app de funções veem a mesma montagem.
  • As leituras de ficheiros são compatíveis com POSIX. Usas APIs padrão do sistema de ficheiros.
  • Não é necessário autenticar por leitura (a montagem é autenticada uma vez no arranque).
  • As alterações escritas por uma instância são imediatamente visíveis para as outras.

Considerações de segurança:

  • Chave da conta de armazenamento: Os montagens de armazenamento Ficheiros do Azure no Flex Consumption autenticam-se usando uma chave de acesso à conta de armazenamento configurada nas definições de montagem da aplicação funcional. Identidade gerida com Storage File Data SMB Share Contributor RBAC não é suportada para montagens SMB no Funções do Azure. Mantenha a sua chave de acesso segura e rode-a periodicamente.
  • Opção só de leitura: Se a sua carga de trabalho não precisar de escrever, restringa a montagem a apenas leitura.
  • Quotas: Defina quotas de partilha do Ficheiros do Azure para evitar custos excessivos caso as instâncias escrevam ficheiros grandes.

Limites de montagem

Estes limites de armazenamento do Ficheiros do Azure aplicam-se a todos os planos de alojamento que suportam montagens:

Limit Value
Tamanho da partilha Até 100 TiB
Tamanho do ficheiro Até 4 TiB
Capacidade de processamento ~60 MB/s (padrão), ~100+ MB/s (premium)
Concorrência Muitos (SMB lida com isso), mas escreve em modo de serialização

Para mais informações, consulte alvos de escala Ficheiros do Azure.

Estes limites variam consoante o plano de alojamento suportado:

Limit Consumo Flexível Elástico Premium Dedicado (Serviço de Aplicativo)
Pontos de montagem por aplicação 5 5 5
Protocols Apenas PME SMB, NFS, Azure Blobs (apenas leitura) SMB, NFS, Azure Blobs (apenas leitura)

Para evitar custos de armazenamento descontrolados, defina uma quota na sua partilha Ficheiros do Azure:

az storage share-rm update \
  --resource-group $RESOURCE_GROUP \
  --storage-account $STORAGE_ACCOUNT \
  --name myshare \
  --quota 100  # 100 GB limit

Autenticação de montagem

As montagens de armazenamento Ficheiros do Azure e o SDK do Azure usam mecanismos de autenticação diferentes:

  • Montagens de armazenamento (SMB): Autentique-se usando uma chave de acesso à conta de armazenamento durante a montagem. A chave está armazenada na configuração do site da aplicação de funções (azureStorageAccounts). A identidade gerida não é atualmente suportada para montagens SMB no Funções do Azure.
  • SDK do Azure (REST API): Para acesso programático usando o Armazenamento do Azure SDK, use identidade gerida sempre que possível.

Este exemplo do Bicep configura a montagem de armazenamento usando a chave secreta partilhada da conta de armazenamento:

resource mountConfig 'Microsoft.Web/sites/config@2023-12-01' = {
  parent: functionApp
  name: 'azurestorageaccounts'
  properties: {
    dataMount: {
      type: 'AzureFiles'
      shareName: shareName
      mountPath: '/mounts/data'
      accountName: storageAccountName
      accessKey: storageAccount.listKeys().keys[0].value
    }
  }
}

Importante

Roda periodicamente as chaves de armazenamento da conta. Quando rodares as chaves, atualiza a configuração de montagem em cada aplicação de função que referencia a conta.

Melhores práticas

  • Utilize montagens de leitura apenas sempre que possível. Se a sua função só lê a partir da montagem, configure-a como apenas leitura para evitar escritas acidentais.

  • Monitorizar o acesso aos ficheiros. Ative diagnósticos na sua conta de armazenamento para monitorizar padrões de acesso à montagem.

    az monitor metrics list \
      --resource /subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT/fileServices/default \
      --metric Transactions
    
  • Limpe arquivos temporários. Se as suas funções escrevem para o sistema de ficheiros, implemente procedimentos de limpeza para evitar crescimento ilimitado.

    from pathlib import Path
    import time
    
    MOUNT_PATH = "/mnt/temp"
    MAX_AGE = 24 * 60 * 60  # 24 hours
    
    def cleanup_old_files():
        cutoff = time.time() - MAX_AGE
        for f in Path(MOUNT_PATH).iterdir():
            if f.stat().st_mtime < cutoff:
                f.unlink()
    

Resolver problemas nas montagens de armazenamento

A tabela seguinte lista problemas comuns com montagens de armazenamento Ficheiros do Azure em aplicações de funções:

Issue Resolução
Binário ou ficheiro não encontrado no caminho da montagem Verifica se o ficheiro está na partilha correta de ficheiros do Azure. Verifica se o caminho de montagem configurado na aplicação de funções corresponde ao caminho referenciado pelo teu código. No portal do Azure, verifique Configurações>Configuração>Mapeamentos de Caminhos.
Permissão negada ao aceder a ficheiros montados As montagens de armazenamento autenticam-se usando uma chave de acesso à conta de armazenamento. Confirma se a chave na configuração da montagem está correta e não foi alterada. Quando rodares as chaves, atualiza a configuração de montagem em cada aplicação de função que referencia a conta.
O binário não tem permissões de execução O Ficheiros do Azure preserva permissões POSIX definidas no momento do upload. Recarrega o binário depois de correr chmod +x localmente, ou define permissões após o upload.
A montagem adiciona latência aos arranques a frio A inicialização da montagem SMB adiciona aproximadamente 200-500 ms na primeira execução. Invocações subsequentes reutilizam a montagem. Para aplicações sensíveis à latência, considere a funcionalidade de instâncias sempre prontas .