Partilhar via


Quickstart: Responder a eventos de armazenamento de blobs utilizando Azure Functions

Neste quickstart, usas o Visual Studio Code para construir uma aplicação que responde a eventos num contentor de Blob Storage. Depois de testar o código localmente usando um emulador, implementa-o numa nova aplicação de funções sem servidor executada num plano de Consumo Flex no Azure Functions.

O projeto utiliza a extensão Azure Developer CLI (azd) com Visual Studio Code para simplificar a inicialização e verificação local do código do seu projeto, bem como a implementação do seu código no Azure. Essa implantação segue as práticas recomendadas atuais para implantações seguras e escaláveis do Azure Functions.

Este artigo suporta a versão 4 do modelo de programação Node.js para o Azure Functions.

Este artigo suporta a versão 2 do modelo de programação Python para o Azure Functions.

Pré-requisitos

  • Node.js 18.x ou superior. Use o node --version comando para verificar sua versão.

Inicializar o projeto

Use o azd init comando da paleta de comandos para criar um projeto de código Azure Functions local a partir de um template.

  1. No Visual Studio Code, abra uma pasta ou espaço de trabalho onde você deseja criar seu projeto.

  2. Pressiona F1 para abrir a paleta de comandos, procura e executa o comando Azure Developer CLI (azd): Initialize App (init), depois escolhe Selecionar um modelo.

    Pode haver um pequeno atraso enquanto azd inicializa a pasta ou o espaço de trabalho atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, procure e selecione Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI.

  2. Quando solicitado no terminal, insira um nome único do ambiente, como blobevents-dotnet.

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou espaço de trabalho atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, procure e selecione Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI.

  2. Quando solicitado no terminal, insira um nome único do ambiente, como blobevents-python.

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou espaço de trabalho atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, procure e selecione Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI.

  2. Quando solicitado, insira um nome de ambiente exclusivo, como blobevents-typescript.

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou espaço de trabalho atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, procure e selecione Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI.

  2. Quando solicitado, insira um nome de ambiente exclusivo, como blobevents-java.

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou espaço de trabalho atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, procure e selecione Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI.

  2. Quando solicitado, insira um nome de ambiente exclusivo, como blobevents-powershell.

    Este comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou espaço de trabalho atual.

No azd, o ambiente mantém um contexto de implantação exclusivo para seu aplicativo e você pode definir mais de um. Também faz parte do nome do grupo de recursos que você cria no Azure.

Adicionar o ficheiro local.settings.json

O Functions precisa do ficheiro local.settings.json para configurar o host quando está a correr localmente.

  1. Execute este comando para ir à src pasta da app:

    cd src
    
  1. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Crie um arquivo chamado local.settings.json na src pasta que contém esses dados JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    

Criar e ativar um ambiente virtual

Na src pasta, execute estes comandos para criar e ativar um ambiente virtual chamado .venv:

python3 -m venv .venv
source .venv/bin/activate

Se o Python não instalar o pacote venv na sua distribuição Linux, execute o seguinte comando:

sudo apt-get install python3-venv

Configurar um emulador de armazenamento local

Use o emulador Azurite para executar seu projeto de código localmente antes de criar e usar recursos do Azure.

  1. Se ainda não o fez, instale o Azurite.

  2. Pressione F1. Na paleta de comandos, procure e execute o comando Azurite: Start para iniciar o emulador de armazenamento local.

  3. Na área Azure , expanda Workspace>Attached Storage Accounts>Local Emulator, clique com o botão direito (Ctrl-click no Mac) Blob Containers, selecione Criar Blob Container..., e crie estes dois contentores de armazenamento blob no emulador local:

    • unprocessed-pdf: contentor que o gatilho monitoriza para eventos de armazenamento.
    • processed-pdf: contentor onde a função envia blobs processados como saída.
  4. Expanda os Blob Containers, clique com o botão direito (ou Ctrl-click no Mac) em unprocessed-pdf, selecione Carregar Ficheiros..., pressione Enter para aceitar o diretório raiz e carregue os ficheiros PDF da data pasta do projeto.

Quando é executado localmente, pode usar o REST para ativar a função simulando que a função recebe uma mensagem de uma subscrição de evento.

Executar a função localmente

O Visual Studio Code integra-se com as ferramentas principais do Azure Functions para permitir que você execute esse projeto em seu computador de desenvolvimento local usando o emulador Azurite. A variável de ambiente PDFProcessorSTORAGE define a ligação à conta de armazenagem, que também está definida como "UseDevelopmentStorage=true" no ficheiro local.settings.json quando é executado localmente.

  1. Execute este comando a partir da src pasta do projeto num terminal ou prompt de comandos:

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    Quando o host Functions inicia, ele escreve o nome do trigger e o tipo de trigger na saída do terminal. No Functions, a pasta raiz do projeto contém o ficheiro host.json.

  2. Com o Core Tools ainda a funcionar no Terminal, abra o ficheiro test.http no seu projeto e selecione Enviar Solicitação para ativar a função ProcessBlobUpload enviando um evento de teste para o webhook do evento blob.

    Este passo simula o recebimento de um evento a partir de uma subscrição de eventos quando executado localmente, e deverá ver a informação do pedido e do ficheiro processado escrita nos logs. Se não estiver a usar o Cliente REST, deve usar outra ferramenta REST segura para chamar o endpoint com a carga útil em test.http.

  3. Na área de Espaço de Trabalho do contentor do blob, expanda processed-pdf e verifique se a função processou o ficheiro PDF e copiou-o para um prefixo processed-.

  4. Quando terminar, pressione Ctrl+C na janela do terminal para interromper o processo do func.exe host.

Rever o código (opcional)

Pode rever o código que define o gatilho do blob da Grade de Eventos no ficheiro do projeto ProcessBlobUpload.cs. A função demonstra como:

  • Usar BlobTrigger com Source = BlobTriggerSource.EventGrid para processamento quase em tempo real
  • Associe a BlobClient para o blob de origem e a BlobContainerClient para o destino
  • Processar o conteúdo do blob e copiá-lo para outro contentor usando streams

Podes rever o código que define o gatilho do blob da Grade de Eventos no ficheiro do projeto function_app.py. A função demonstra como:

  • Usar @app.blob_trigger com source="EventGrid" para processamento quase em tempo real
  • Aceder ao conteúdo do blob usando o InputStream parâmetro
  • Copiar ficheiros processados para o contentor de destino usando o Azure Storage SDK

Pode rever o código que define o acionador do blob no Event Grid no ficheiro de projeto processBlobUpload.ts. A função demonstra como:

  • Usar app.storageBlob() com source: 'EventGrid' para processamento quase em tempo real
  • Aceder ao conteúdo blob usando o Node.js Azure Storage SDK
  • Processar e copiar ficheiros para o contentor de destino de forma assíncrona

Podes rever o código que define o disparador do blob Event Grid no ficheiro do projeto ProcessBlobUpload.java. A função demonstra como:

  • Usar @BlobTrigger com source = "EventGrid" para processamento quase em tempo real
  • Aceder ao conteúdo do blob usando BlobInputStream parâmetro
  • Copiar ficheiros processados para o contentor de destino usando o Azure Storage SDK para Java

Pode rever o código que define o acionador de blobs do Event Grid no ficheiro de projeto ProcessBlobUpload/run.ps1 e no correspondente function.json. A função demonstra como:

  • Configurar o blob trigger com "source": "EventGrid" em function.json para processamento quase em tempo real
  • Aceder ao conteúdo blob usando os cmdlets Azure Storage do PowerShell
  • Processar e copiar ficheiros para o contentor de destino usando módulos Azure PowerShell

Depois de revisar e verificar seu código de função localmente, é hora de publicar o projeto no Azure.

Criar recursos Azure e implementar

Use o azd up comando para criar a aplicação de funções num plano Flex Consumption juntamente com outros recursos necessários do Azure, incluindo a subscrição do evento. Depois de a infraestrutura estar pronta, azd também implementa o código do teu projeto na nova aplicação de funções no Azure.

  1. No Visual Studio Code, pressione F1 para abrir a paleta de comandos. Procure e execute o comando Azure Developer CLI (azd): Sign In with Azure Developer CLI, depois inicie sessão usando a sua conta Azure.

  2. Na raiz do projeto, pressione F1 para abrir a paleta de comandos. Procura e executa o comando Azure Developer CLI (azd): Provision and Deploy (up) para criar os recursos Azure necessários e implementa o teu código.

  3. Quando solicitado na janela Terminal, forneça estes parâmetros de implantação necessários:

    Pronta Description
    Selecione uma Assinatura do Azure para usar Escolhe a subscrição onde queres criar os teus recursos.
    Nome do ambiente Um ambiente usado para manter um contexto de implantação exclusivo para seu aplicativo.
    localização do Azure Região do Azure na qual criar o grupo de recursos que contém os novos recursos do Azure. Apenas as regiões que atualmente suportam o plano Flex Consumption são mostradas.

    O azd up comando utiliza as tuas respostas a estes prompts com os ficheiros de configuração do Bicep para criar e configurar estes recursos necessários do Azure, seguindo as melhores práticas mais recentes:

    • Plano Flex Consumption e aplicação funcional
    • Conta Azure Storage com contentores blob
    • Application Insights (recomendado)
    • Políticas e funções de acesso para a sua conta
    • Subscrição do Event Grid para eventos blob
    • Ligações de serviço a serviço usando identidades geridas (em vez de cadeias de ligação armazenadas)

    Depois de o comando ser concluído com sucesso, a sua aplicação corre no Azure com uma subscrição de evento configurada para ativar a sua função quando os blobs são adicionados ao unprocessed-pdf contentor.

  4. Toma nota do AZURE_STORAGE_ACCOUNT_NAME e do AZURE_FUNCTION_APP_NAME na saída. Estes nomes são únicos para a sua conta de armazenamento e aplicação de funções no Azure, respetivamente.

Verificar a função implementada

  1. No Visual Studio Code, pressione F1. Na paleta de comandos, procure e execute o comando Azure Storage: Upload Files.... Aceite o diretório raiz e, como antes, carregue um ou mais ficheiros PDF da data pasta do projeto.

  2. Quando solicitado, selecione o nome da sua nova conta de armazenamento (de AZURE_STORAGE_ACCOUNT_NAME). Selecione Blob Containers>unprocessed-pdf.

  3. Pressione F1. Na paleta de comandos, procure e execute o comando Azure Storage: Open in Explorer. Selecione a mesma conta >de armazenamento Blob Containers>processed-pdf, depois Abra numa nova janela.

  4. No Explorador, verifica se os ficheiros PDF que carregaste foram processados pela tua função. A saída é escrita no processed-pdf contentor com o prefixo processed-.

O blob da Grelha de Eventos processa ficheiros em segundos após o upload. Esta velocidade demonstra as capacidades quase em tempo real desta abordagem em comparação com os gatilhos tradicionais baseados em sondagens.

Reimplantar seu código

Executa o azd up comando tantas vezes quanto precisares tanto para provisionar os teus recursos Azure como para implementar atualizações de código na tua aplicação de funções.

Observação

Os arquivos de código implantados são sempre substituídos pelo pacote de implantação mais recente.

Suas respostas iniciais a azd prompts e quaisquer variáveis de ambiente geradas por azd são armazenadas localmente em seu ambiente nomeado. Use o azd env get-values comando para revisar todas as variáveis em seu ambiente que foram usadas ao criar recursos do Azure.

Limpeza de recursos

Quando terminares de trabalhar com a tua function app e recursos relacionados, usa este comando para eliminar a function app e os seus recursos relacionados do Azure. Esta ação ajuda-o a evitar custos adicionais:

azd down --no-prompt

Observação

A --no-prompt opção instrui azd a excluir seu grupo de recursos sem uma confirmação sua.

Este comando não afeta seu projeto de código local.