Compartir a través de


Inicio rápido: Respuesta a eventos de Blob Storage mediante Azure Functions

En este inicio rápido, usará Visual Studio Code para compilar una aplicación que responda a eventos en un contenedor de Blob Storage. Después de probar el código localmente mediante un emulador, se implementa en una nueva aplicación de funciones sin servidor que se ejecuta en un plan de consumo flexible en Azure Functions.

El proyecto usa la extensión de la CLI para desarrolladores de Azure (azd) con Visual Studio Code para simplificar la inicialización y comprobación del código del proyecto localmente, así como la implementación del código en Azure. Esta implementación sigue los procedimientos recomendados actuales para implementaciones seguras y escalables de Azure Functions.

En este artículo se admite la versión 4 del modelo de programación de Node.js para Azure Functions.

En este artículo se admite la versión 2 del modelo de programación de Python para Azure Functions.

Prerrequisitos

  • Node.js 18.x o superior. Use el comando node --version para comprobar la versión.

Inicialización del proyecto

Use el azd init comando de la paleta de comandos para crear un proyecto de código local de Azure Functions a partir de una plantilla.

  1. En Visual Studio Code, abra una carpeta o un área de trabajo donde quiera crear el proyecto.

  2. Presione F1 para abrir la paleta de comandos, busque y ejecute el comando Azure Developer CLI (azd): Initialize App (init)y elija Seleccionar una plantilla.

    Es posible que haya un ligero retraso al azd inicializar la carpeta o el área de trabajo actuales.

  1. Cuando se le solicite, elija Seleccionar una plantilla y busque y seleccione Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI.

  2. Cuando se le solicite en el terminal, escriba un nombre de entorno único, como blobevents-dotnet.

    Este comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta o área de trabajo actual.

  1. Cuando se le solicite, elija Seleccionar una plantilla y busque y seleccione Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI.

  2. Cuando se le solicite en el terminal, escriba un nombre de entorno único, como blobevents-python.

    Este comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta o área de trabajo actual.

  1. Cuando se le solicite, elija Seleccionar una plantilla y busque y seleccione Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI.

  2. Cuando se le solicite, escriba un nombre de entorno único, como blobevents-typescript.

    Este comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta o área de trabajo actual.

  1. Cuando se le solicite, elija Seleccionar una plantilla y busque y seleccione Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI.

  2. Cuando se le solicite, escriba un nombre de entorno único, como blobevents-java.

    Este comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta o área de trabajo actual.

  1. Cuando se le solicite, elija Seleccionar una plantilla y busque y seleccione Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI.

  2. Cuando se le solicite, escriba un nombre de entorno único, como blobevents-powershell.

    Este comando extrae los archivos de proyecto del repositorio de plantillas e inicializa el proyecto en la carpeta o área de trabajo actual.

En azd, el entorno mantiene un contexto de implementación único para la aplicación y puede definir más de uno. También forma parte del nombre del grupo de recursos que crea en Azure.

Agregar el archivo local.settings.json

Functions necesita el archivo local.settings.json para configurar el host cuando se ejecuta localmente.

  1. Ejecute este comando para ir a la carpeta de la src aplicación:

    cd src
    
  1. Cree un archivo denominado local.settings.json en la src carpeta que contiene estos datos JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Cree un archivo denominado local.settings.json en la src carpeta que contiene estos datos JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Cree un archivo denominado local.settings.json en la src carpeta que contiene estos datos JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Cree un archivo denominado local.settings.json en la src carpeta que contiene estos datos JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Cree un archivo denominado local.settings.json en la src carpeta que contiene estos datos JSON:

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

Creación y activación de un entorno virtual

En la src carpeta , ejecute estos comandos para crear y activar un entorno virtual denominado .venv:

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

Si Python no instala el paquete venv en la distribución de Linux, ejecute el siguiente comando:

sudo apt-get install python3-venv

Configuración del emulador de almacenamiento local

Use el emulador de Azurite para ejecutar el proyecto de código localmente antes de crear y usar recursos de Azure.

  1. Si aún no lo ha hecho, instale Azurite.

  2. Presione F1. En la paleta de comandos, busque y ejecute el comando Azurite: Start para iniciar el emulador de almacenamiento local.

  3. En el área de Azure, expanda Área de trabajo, >Cuentas de almacenamiento conectadas, >y El emulador local, haga clic con el botón derecho (Ctrl-clic en Mac) en Contenedores de blobs, seleccione Crear contenedor de blobs... y cree estos dos contenedores de almacenamiento de blobs en el emulador local:

    • unprocessed-pdf: contenedor que el desencadenador supervisa para eventos de almacenamiento.
    • processed-pdf: contenedor donde la función envía blobs procesados como salida.
  4. Expanda Contenedores de blobs, haga clic con el botón derecho (Ctrl-clic en Mac) en unprocessed-pdf, seleccione Cargar archivos..., presione Intro para aceptar el directorio raíz y cargue los archivos PDF desde la datacarpeta del proyecto.

Cuando se ejecuta localmente, puede usar REST para desencadenar la función simulando la función que recibe un mensaje de una suscripción de eventos.

Ejecución local de la función

Visual Studio Code se integra con Azure Functions Core Tools para permitirle ejecutar este proyecto en el equipo de desarrollo local mediante el emulador de Azurite. La PDFProcessorSTORAGE variable de entorno define la conexión de la cuenta de almacenamiento, que también se establece en "UseDevelopmentStorage=true" en el archivo local.settings.json cuando se ejecuta el programa localmente.

  1. Ejecute este comando desde la carpeta del src proyecto en una consola o terminal:

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

    Cuando se inicia el host de Functions, escribe el nombre del desencadenador y el tipo de desencadenador en la salida del terminal. En Functions, la carpeta raíz del proyecto contiene el archivo host.json.

  2. Con Core Tools todavía ejecutándose en Terminal, abra eltest.http archivo del proyecto y seleccione Enviar solicitud para desencadenar la ProcessBlobUpload función enviando un evento blob de prueba al webhook del evento BLOB.

    Este paso simula la recepción de un evento de una suscripción de eventos cuando se ejecuta localmente y debería ver la información de archivo procesada y de solicitud escrita en los registros. Si no usa el Cliente REST, debe usar otra herramienta de REST segura para llamar al punto de conexión con la carga en test.http.

  3. En el área de trabajo del contenedor de blobs, expanda processed-pdf y compruebe que la función procesó el archivo PDF y lo copió con el prefijo processed-.

  4. Cuando haya terminado, presione Ctrl+C en la ventana del terminal para detener el proceso de host de func.exe.

Revisión del código (opcional)

Puede revisar el código que define el desencadenador de blobs de Event Grid en el archivo de proyecto de ProcessBlobUpload.cs. La función muestra cómo:

  • Uso BlobTrigger con Source = BlobTriggerSource.EventGrid para el procesamiento casi en tiempo real
  • Enlazar a BlobClient para el blob de origen y BlobContainerClient para el destino
  • Procesar el contenido del blob y copiarlo en otro contenedor mediante secuencias

Puede revisar el código que define el desencadenador de blobs de Event Grid en el archivo de proyecto de function_app.py. La función muestra cómo:

  • Uso @app.blob_trigger con source="EventGrid" para el procesamiento casi en tiempo real
  • Acceso al contenido del blob mediante el InputStream parámetro
  • Copia de archivos procesados en el contenedor de destino mediante el SDK de Azure Storage

Puede revisar el código que define el desencadenador de blobs de Event Grid en el archivo de proyecto de processBlobUpload.ts. La función muestra cómo:

  • Uso app.storageBlob() con source: 'EventGrid' para el procesamiento casi en tiempo real
  • Acceso al contenido del blob mediante el SDK de Azure Storage de Node.js
  • Procesar y copiar archivos en el contenedor de destino de forma asincrónica

Puede revisar el código que define el desencadenador de blobs de Event Grid en el archivo de proyecto de ProcessBlobUpload.java. La función muestra cómo:

  • Uso @BlobTrigger con source = "EventGrid" para el procesamiento casi en tiempo real
  • Acceso al contenido del blob mediante BlobInputStream el parámetro
  • Copia de archivos procesados en el contenedor de destino mediante el SDK de Azure Storage para Java

Puede revisar el código que define el desencadenador de blobs de Event Grid en el archivo de proyecto ProcessBlobUpload/run.ps1 y el function.jsoncorrespondiente. La función muestra cómo:

  • Configuración del desencadenador de blobs con "source": "EventGrid" en function.json para el procesamiento casi en tiempo real
  • Acceder al contenido de los blobs mediante cmdlets de Azure Storage de PowerShell
  • Procesamiento y copia de archivos en el contenedor de destino mediante módulos de Azure PowerShell

Después de revisar y comprobar el código de función localmente, es el momento de publicar el proyecto en Azure.

Creación e implementación de recursos de Azure

Use el azd up comando para crear la aplicación de funciones en un plan de consumo flexible junto con otros recursos de Azure necesarios, incluida la suscripción de eventos. Una vez lista la infraestructura, azd también implementa el código del proyecto en la nueva aplicación de funciones de Azure.

  1. En Visual Studio Code, presione F1 para abrir la paleta de comandos. Busque y ejecute el comando Azure Developer CLI (azd): Sign In with Azure Developer CLIy, a continuación, inicie sesión con su cuenta de Azure.

  2. En la raíz del proyecto, presione F1 para abrir la paleta de comandos. Busque y ejecute el comando Azure Developer CLI (azd): Provision and Deploy (up) para crear los recursos de Azure necesarios e implementar el código.

  3. Cuando se le solicite en la ventana Terminal, proporcione estos parámetros de implementación necesarios:

    Pronto Description
    Selección de una suscripción de Azure que se va a usar Elija la suscripción en la que desea crear los recursos.
    Nombre del entorno Un entorno que se usa para mantener un contexto de implementación único para la aplicación.
    Ubicación de Azure Región de Azure en la que se va a crear el grupo de recursos que contiene los nuevos recursos de Azure. Solo se muestran las regiones que admiten actualmente el Plan de consumo flexible.

    El azd up comando usa las respuestas a estos mensajes con los archivos de configuración de Bicep para crear y configurar estos recursos de Azure necesarios siguiendo los procedimientos recomendados más recientes:

    • Plan de consumo flexible y aplicación de funciones
    • Cuenta de Azure Storage con contenedores de blobs
    • Application Insights (recomendado)
    • Directivas y roles de acceso para la cuenta
    • Suscripción a la red de Event Grid de blob
    • Conexiones de servicio a servicio mediante identidades administradas (en lugar de cadenas de conexión almacenadas)

    Una vez completado correctamente el comando, la aplicación se ejecuta en Azure con una suscripción de eventos configurada para desencadenar la función cuando se agregan blobs al unprocessed-pdf contenedor.

  4. Tome nota de AZURE_STORAGE_ACCOUNT_NAME y AZURE_FUNCTION_APP_NAME en la salida. Estos nombres son únicos para la cuenta de almacenamiento y la aplicación de funciones en Azure, respectivamente.

Comprobación de la función implementada

  1. En Visual Studio Code, presione F1. En la paleta de comandos, busque y ejecute el comando Azure Storage: Upload Files.... Acepte el directorio raíz y, como antes, cargue uno o varios archivos PDF desde la carpeta del data proyecto.

  2. Cuando se le solicite, seleccione el nombre de la nueva cuenta de almacenamiento (en AZURE_STORAGE_ACCOUNT_NAME). Seleccione Blob Containers>unprocessed-pdf.

  3. Presione F1. En la paleta de comandos, busque y ejecute el comando Azure Storage: Open in Explorer. Seleccione la misma cuenta de almacenamiento >Contenedores de Blob>processed-pdf y luego Abrir en una nueva ventana.

  4. En el Explorador, verifique que los archivos PDF que usted cargó fueron procesados por su función. La salida se escribe en el contenedor processed-pdf con el prefijo processed-.

El desencadenador de blobs de Event Grid procesa los archivos en cuestión de segundos de carga. Esta velocidad muestra las funcionalidades casi en tiempo real de este enfoque en comparación con los desencadenadores de blobs basados en sondeo tradicionales.

Reimplementación del código

Ejecute el azd up comando tantas veces como sea necesario aprovisionar los recursos de Azure e implementar actualizaciones de código en la aplicación de funciones.

Nota:

El paquete de implementación más reciente siempre sobrescribe los archivos de código implementados.

Las respuestas iniciales a azd mensajes y las variables de entorno generadas por azd se almacenan localmente en el entorno con nombre. Use el comando azd env get-values para revisar todas las variables del entorno que se usaron al crear recursos de Azure.

Limpieza de recursos

Cuando haya terminado de trabajar con la aplicación de funciones y los recursos relacionados, use este comando para eliminar la aplicación de funciones y sus recursos relacionados de Azure. Esta acción le ayuda a evitar incurrir en costos adicionales:

azd down --no-prompt

Nota:

La --no-prompt opción indica azd que elimine el grupo de recursos sin una confirmación de usted.

Este comando no afecta al proyecto de código local.