Compartilhar via


Início Rápido: Responder a eventos de armazenamento de blobs usando o Azure Functions

Neste início rápido, você usará o Visual Studio Code para criar um aplicativo que responde a eventos em um contêiner de Armazenamento de Blobs. Depois de testar o código localmente usando um emulador, você o implanta em um novo aplicativo de funções sem servidor em execução em um plano de Consumo Flex no Azure Functions.

O projeto usa a extensão da CLI do Desenvolvedor do Azure (azd) com o Visual Studio Code para simplificar a inicialização e a verificação do código do projeto localmente, bem como a implantação do código no Azure. Esta implantação segue as melhores práticas atuais para implantações seguras e escaláveis do Azure Functions.

Este artigo dá suporte à versão 4 do modelo de programação Node.js para o Azure Functions.

Este artigo dá suporte à versão 2 do modelo de programação do Python para o Azure Functions.

Pré-requisitos

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

Inicializar o projeto

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

  1. No Visual Studio Code, abra uma pasta ou workspace em que você deseja criar seu projeto.

  2. Pressione F1 para abrir a paleta de comandos, pesquise e execute o comando Azure Developer CLI (azd): Initialize App (init)e escolha Selecionar um modelo.

    Pode haver um pequeno atraso ao azd inicializar a pasta ou o workspace atual.

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

  2. Quando solicitado no terminal, insira um nome de ambiente exclusivo, como blobevents-dotnet.

    Esse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou workspace atual.

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

  2. Quando solicitado no terminal, insira um nome de ambiente exclusivo, como blobevents-python.

    Esse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou workspace atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, pesquise 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.

    Esse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou workspace atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, pesquise 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.

    Esse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou workspace atual.

  1. Quando solicitado, escolha Selecionar um modelo e, em seguida, pesquise 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.

    Esse comando extrai os arquivos de projeto do repositório de modelos e inicializa o projeto na pasta ou workspace atual.

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

Adicionar o arquivo local.settings.json

O Functions precisa do arquivo local.settings.json para configurar o host ao ser executado localmente.

  1. Execute este comando para ir para a pasta do src aplicativo:

    cd src
    
  1. Crie um arquivo chamado local.settings.json na pasta src que contenha 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 pasta src que contenha 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 pasta src que contenha 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 pasta src que contenha 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 pasta src que contenha esses dados JSON:

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

Criar e ativar um ambiente virtual

src Na 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 distribuição do Linux, execute o seguinte comando:

sudo apt-get install python3-venv

Configurar o emulador de armazenamento local

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

  1. Caso ainda não tenha feito isso, instale o Azurite.

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

  3. Na área do Azure, expanda Workspace>Contas de Armazenamento Anexadas>Emulador Local, clique com o botão direito do mouse (Ctrl-click no Mac) em Contêineres de Blob, selecione Criar Contêiner de Blobs... e crie estes dois contêineres de armazenamento de blobs no emulador local:

    • unprocessed-pdf: contêiner que o gatilho monitora em busca de eventos de armazenamento.
    • processed-pdf: contêiner em que a função envia blobs processados como saída.
  4. Expanda Contêineres de Blob, clique com o botão direito do mouse (ou Ctrl-clique no Mac) em unprocessed-pdf, selecione Carregar Arquivos..., pressione Enter para aceitar o diretório raiz e carregue os arquivos PDF da pasta do projeto data.

Ao executar localmente, você pode usar REST para disparar a função simulando a função que recebe uma mensagem de uma assinatura de evento.

Executar a função localmente

O Visual Studio Code integra-se às ferramentas do Azure Functions Core para permitir que você execute esse projeto em seu computador de desenvolvimento local usando o emulador do Azurite. A variável de ambiente PDFProcessorSTORAGE define a conexão da conta de armazenamento, que também é configurada no arquivo local.settings.json como "UseDevelopmentStorage=true" ao executar localmente.

  1. Execute este comando na pasta do projeto src em um terminal ou prompt de comando:

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

    Quando o host do Functions é iniciado, ele grava o nome do gatilho e o tipo de gatilho na saída do terminal. No Functions, a pasta raiz do projeto contém o arquivo host.json.

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

    Esta etapa simula o recebimento de um evento de uma assinatura de eventos quando executado localmente, e você deverá ver a solicitação e as informações do arquivo processado registradas nos logs. Se você não estiver usando o REST Client, deverá usar outra ferramenta REST segura para chamar o endpoint com a carga útil em test.http.

  3. Na área de trabalho do contêiner de blob, expanda processed-pdf e verifique se a função processou o arquivo PDF e copiou-o com um prefixo processed-.

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

Examinar o código (opcional)

Você pode revisar o código que define o gatilho de blob do Event Grid no arquivo de projeto ProcessBlobUpload.cs. A função demonstra como:

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

Você pode revisar o código que define o gatilho de blob do Event Grid no arquivo de projeto function_app.py. A função demonstra como:

  • Usar @app.blob_trigger com source="EventGrid" para processamento quase em tempo real
  • Acessar o conteúdo do blob usando o InputStream parâmetro
  • Copiar arquivos processados para o contêiner de destino usando o SDK de Armazenamento do Azure

Você pode revisar o código que define o gatilho de blob do Event Grid no arquivo de projeto processBlobUpload.ts. A função demonstra como:

  • Usar app.storageBlob() com source: 'EventGrid' para processamento quase em tempo real
  • Usar o SDK de Armazenamento do Azure para Node.js para acessar o conteúdo do blob.
  • Processar e copiar arquivos para o contêiner de destino de forma assíncrona

Você pode revisar o código que define o gatilho de blob do Event Grid no arquivo ProcessBlobUpload.java. A função demonstra como:

  • Usar @BlobTrigger com source = "EventGrid" para processamento quase em tempo real
  • Acessar o conteúdo do blob usando BlobInputStream o parâmetro
  • Copiar arquivos processados para o contêiner de destino usando o SDK de Armazenamento do Azure para Java

Você pode examinar o código que define o gatilho de blob do Event Grid no arquivo de projeto ProcessBlobUpload/run.ps1 e o function.json correspondente. A função demonstra como:

  • Configurar o blob trigger com "source": "EventGrid" no function.json para processamento quase em tempo real
  • Acessar o conteúdo de blob usando cmdlets de armazenamento do PowerShell Azure
  • Processar e copiar arquivos para o contêiner de destino usando módulos do Azure PowerShell

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

Criar recursos do Azure e implantar

Use o comando azd up para criar o aplicativo de funções em um plano de Consumo Flexível, junto com outros recursos necessários do Azure, incluindo a assinatura do evento. Depois que a infraestrutura estiver pronta, azd também implantará o código do projeto no novo aplicativo de funções no Azure.

  1. No Visual Studio Code, pressione F1 para abrir a paleta de comandos. Pesquise e execute o comando Azure Developer CLI (azd): Sign In with Azure Developer CLIe entre usando sua conta do Azure.

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

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

    Rápido Description
    Selecione uma Assinatura do Azure a ser usada Escolha a assinatura na qual você deseja criar seus recursos.
    Nome do ambiente Um ambiente que é 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. Somente regiões que atualmente dão suporte para o plano de Consumo Flex são mostradas.

    O azd up comando usa suas respostas a esses prompts com os arquivos de configuração do Bicep para criar e configurar esses recursos necessários do Azure, seguindo as práticas recomendadas mais recentes:

    • plano de Consumo Flex e aplicativo de funções
    • Conta do Armazenamento do Azure com contêineres de blob
    • Application Insights (recomendado)
    • Políticas de acesso e funções para sua conta
    • Assinatura da Grade de Eventos para eventos de blob
    • Conexões de serviço a serviço usando identidades gerenciadas (em vez de cadeias de conexão armazenadas)

    Depois que o comando for concluído com êxito, seu aplicativo será executado no Azure com uma assinatura de evento configurada para disparar sua função quando os blobs forem adicionados ao unprocessed-pdf contêiner.

  4. Anote os AZURE_STORAGE_ACCOUNT_NAME e AZURE_FUNCTION_APP_NAME na saída. Esses nomes são exclusivos para sua conta de armazenamento e aplicativo de funções no Azure, respectivamente.

Verificar a função implantada

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

  2. Quando solicitado, selecione o nome da nova conta de armazenamento (de AZURE_STORAGE_ACCOUNT_NAME). Selecione Contêineres de Blob>PDF não processado.

  3. Pressione F1. Na paleta de comandos, pesquise e execute o comando Azure Storage: Open in Explorer. Selecione a mesma conta > de armazenamento Contêineres de Blob>processed-pdf, então Abra em nova janela.

  4. No Explorer, verifique se os arquivos PDF carregados foram processados pela função. A saída é gravada no contêiner processed-pdf com o prefixo processed-.

O acionador de blob do Event Grid processa arquivos em questão de segundos após o upload. Essa velocidade demonstra as funcionalidades quase em tempo real dessa abordagem em comparação com os gatilhos tradicionais de blob baseados em sondagem.

Reimplantar seu código

Execute o azd up comando quantas vezes precisar para provisionar seus recursos do Azure e implantar atualizações de código em seu aplicativo de funções.

Observação

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

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

Limpar os recursos

Quando terminar de trabalhar com seu aplicativo de funções e recursos relacionados, use esse comando para excluir o aplicativo de funções e seus recursos relacionados do Azure. Esta ação ajuda você a evitar incorrer em custos adicionais:

azd down --no-prompt

Observação

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

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