Tutorial: Desencadenamiento de Azure Functions en contenedores de blobs mediante una suscripción de eventos

Si usa versiones anteriores del desencadenador de Blob Storage con Azure Functions, a menudo obtiene ejecuciones retrasadas ya que el desencadenador sondea el contenedor de blobs en busca de actualizaciones. Para reducir la latencia, desencadene la función mediante una suscripción de eventos al mismo contenedor. La suscripción de eventos usa la infraestructura de Event Grid para reenviar los cambios en el contenedor a medida que se producen. Puede implementar esta funcionalidad con las extensiones de Azure Functions más recientes.

En este artículo se muestra cómo crear una función que se ejecute en función de los eventos que se produzcan cuando se agregue un blob a un contenedor. Usará Visual Studio Code para el desarrollo local y para comprobar que la función funciona localmente antes de implementar el proyecto en Azure.

  • Cree una cuenta de almacenamiento general v2 en Azure Storage.
  • Cree un contenedor en Blob Storage.
  • Cree una función desencadenada por Blob Storage controlada por eventos.
  • Cree una suscripción de eventos a un contenedor de blobs.
  • Realice la depuración local mediante ngrok cargando archivos.
  • Implemente en Azure y cree una suscripción de eventos filtrada.

Importante

En este artículo se usan pestañas para admitir varias versiones del modelo de programación de Node.js. El modelo v4 está disponible de forma general y está diseñado para que los desarrolladores de JavaScript y TypeScript tengan una experiencia más flexible e intuitiva. Para más detalles acerca de cómo funciona el modelo v4, consulte la Guía para desarrolladores de Node.js de Azure Functions. Para obtener más información sobre las diferencias entre v3 y v4, consulte la Guía de migración.

Requisitos previos

  • La utilidad ngrok, que proporciona a Azure una manera de llamar a la función que se ejecuta localmente.

  • Extensión de Azure Storage para Visual Studio Code, versión mínima 5.x.

Nota:

La extensión de Azure Storage para Visual Studio Code está actualmente en versión preliminar.

Crear una cuenta de almacenamiento

Para usar una suscripción de eventos con Azure Storage, necesitará una cuenta de almacenamiento de uso general v2. De manera predeterminada, puede crear esta cuenta de almacenamiento desde el proyecto de Visual Studio Code cuando tenga la extensión de Azure Storage instalada.

  1. En Visual Studio Code, abra la paleta de comandos (presione F1) y escriba Azure Storage: Create Storage Account.... Escriba la siguiente información cuando se le indique:

    Prompt Acción
    Escriba el nombre de la nueva cuenta de almacenamiento Proporcione un nombre único global. Los nombres de cuenta de almacenamiento deben tener entre 3 y 24 caracteres de longitud con solo letras minúsculas y números. Para facilitar la identificación, usaremos el mismo nombre para el grupo de recursos y la aplicación de funciones.
    Seleccionar una ubicación para los nuevos recursos Para mejorar el rendimiento, elija una región cercana a la suya.

    La extensión crea una cuenta de almacenamiento de uso general v2 con el nombre que ha proporcionado. El mismo nombre también se usa para el grupo de recursos que contiene la cuenta de almacenamiento.

  2. Después de crear la cuenta de almacenamiento, abra la paleta de comandos (presione F1) y escriba Azure Storage: Create Blob Container.... Escriba la siguiente información cuando se le indique:

    Prompt Acción
    Selección de un recurso Seleccione la cuenta de almacenamiento que ha creado.
    Escriba un nombre para el nuevo contenedor de blobs Escriba samples-workitems, que es el nombre del contenedor al que se hace referencia en el proyecto de código.

Ahora que ha creado el contenedor de blobs, puede crear la función que se desencadena en este contenedor y la suscripción de eventos que entrega los eventos a la función.

Creación de una función desencadenada de Blob

Cuando se usa Visual Studio Code para crear una función desencadenada de Blob Storage, también se crea un nuevo proyecto. A continuación, deberá editar la función para que consuma una suscripción de eventos como origen en lugar del contenedor de sondeo normal.

  1. Abra la aplicación de funciones en Visual Studio Code.

  2. Abra la paleta de comandos (presione F1), escriba Azure Functions: Create Function... y seleccione Crear nuevo proyecto.

  3. Seleccione una ubicación de directorio para el área de trabajo del proyecto. Asegúrese de que crea una nueva carpeta o elige una carpeta vacía en la que ubicar el área de trabajo del proyecto.

    No elija una carpeta de proyecto que ya forme parte de un área de trabajo.

  4. Escriba la siguiente información cuando se le indique:

    Prompt Acción
    Selección de un idioma Seleccione C#.
    Seleccione un entorno de ejecución .NET. Seleccione .NET 6.0 Isolated LTS para ejecutar en un proceso trabajador aislado o .NET 6.0 LTS para en proceso.
    Seleccionar una plantilla para la primera función de su proyecto Seleccione Azure Blob Storage trigger.
    Proporcionar un nombre de función Escriba BlobTriggerEventGrid.
    Proporcionar un espacio de nombres Escriba My.Functions.
    Seleccione la configuración en "local.settings.json" Seleccione Create new local app setting.
    Seleccione una cuenta de almacenamiento Seleccione en la lista la cuenta de almacenamiento que ha creado.
    Esta es la ruta de acceso dentro de la cuenta de almacenamiento que el desencadenador supervisará Acepte el valor predeterminado, samples-workitems.
    Seleccionar cómo desea que se abra el proyecto Seleccione Open in current window.
    Prompt Acción
    Selección de un idioma Seleccione Python.
    Seleccionar el intérprete de Python para crear un entorno virtual Seleccione el intérprete de Python que prefiera usar. Si no se muestra una opción, escriba la ruta de acceso completa al archivo binario de Python.
    Seleccionar una plantilla para la primera función de su proyecto Seleccione Azure Blob Storage trigger.
    Proporcionar un nombre de función Escriba BlobTriggerEventGrid.
    Seleccione la configuración en "local.settings.json" Seleccione Create new local app setting.
    Seleccione una cuenta de almacenamiento Seleccione en la lista la cuenta de almacenamiento que ha creado.
    Esta es la ruta de acceso dentro de la cuenta de almacenamiento que el desencadenador supervisará Acepte el valor predeterminado, samples-workitems.
    Seleccionar cómo desea que se abra el proyecto Seleccione Open in current window.
    Prompt Acción
    Selección de un idioma Seleccione Java.
    Seleccione una versión de Java Seleccione Java 11 o Java 8, la versión de Java en la que se ejecutan las funciones en Azure y que ha comprobado localmente.
    Proporcione un id. de grupo Seleccione com.function.
    Proporcione un id. de artefacto Seleccione BlobTriggerEventGrid.
    Proporcione una versión Seleccione 1.0-SNAPSHOT.
    Proporcione un nombre de paquete Seleccione com.function.
    Proporcione un nombre de aplicación Acepte el nombre generado que empieza por BlobTriggerEventGrid.
    Seleccione la herramienta de compilación para el proyecto de Java Seleccione Maven.
    Seleccionar cómo desea que se abra el proyecto Seleccione Open in current window.
    Prompt Acción
    Seleccionar un lenguaje para el proyecto de funciones Seleccione TypeScript.
    Selección de un modelo de programación de TypeScript Seleccione Model V4.
    Seleccionar una plantilla para la primera función de su proyecto Seleccione Azure Blob Storage trigger.
    Proporcionar un nombre de función Escriba BlobTriggerEventGrid.
    Seleccione la configuración en "local.settings.json" Seleccione Create new local app setting.
    Seleccione una cuenta de almacenamiento Seleccione la cuenta de almacenamiento que ha creado.
    Esta es la ruta de acceso dentro de la cuenta de almacenamiento que el desencadenador supervisará Acepte el valor predeterminado, samples-workitems.
    Seleccionar cómo desea que se abra el proyecto Seleccione Open in current window.
    Prompt Acción
    Seleccionar un lenguaje para el proyecto de funciones Seleccione JavaScript.
    Selección de un modelo de programación de JavaScript Seleccione Model V4.
    Seleccionar una plantilla para la primera función de su proyecto Seleccione Azure Blob Storage trigger.
    Proporcionar un nombre de función Escriba BlobTriggerEventGrid.
    Seleccione la configuración en "local.settings.json" Seleccione Create new local app setting.
    Seleccione una cuenta de almacenamiento Seleccione la cuenta de almacenamiento que ha creado.
    Esta es la ruta de acceso dentro de la cuenta de almacenamiento que el desencadenador supervisará Acepte el valor predeterminado, samples-workitems.
    Seleccionar cómo desea que se abra el proyecto Seleccione Open in current window.
    Prompt Acción
    Seleccionar un lenguaje para el proyecto de funciones Seleccione PowerShell.
    Seleccionar una plantilla para la primera función de su proyecto Seleccione Azure Blob Storage trigger.
    Proporcionar un nombre de función Escriba BlobTriggerEventGrid.
    Seleccione la configuración en "local.settings.json" Seleccione Create new local app setting.
    Seleccione una cuenta de almacenamiento Seleccione la cuenta de almacenamiento que ha creado.
    Esta es la ruta de acceso dentro de la cuenta de almacenamiento que el desencadenador supervisará Acepte el valor predeterminado, samples-workitems.
    Seleccionar cómo desea que se abra el proyecto Seleccione Open in current window.
  5. Una vez que aparezca el símbolo del sistema, seleccione Seleccionar cuenta de almacenamiento>Agregar al área de trabajo.

Por motivos de simplicidad, en este tutorial se reutiliza la misma cuenta de almacenamiento con la aplicación de funciones. No obstante, en producción, es posible que quiera usar una cuenta de almacenamiento independiente con la aplicación de funciones. Para obtener más información, vea Consideraciones de almacenamiento de Azure Functions.

Actualización de la extensión de Storage

Para usar el desencadenador de Blob Storage basado en Event Grid, la función requiere al menos la versión 5.x para la extensión de Storage.

Para actualizar el proyecto con la versión de extensión necesaria, en la ventana Terminal, ejecute el siguiente comando: dotnet add package.

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs --version 6.1.0
  1. Abra el archivo de proyecto host.json e inspeccione el elemento extensionBundle.

  2. Si extensionBundle.version no lo es, al menos 3.3.0 , sustitúyalo extensionBundle por el más reciente:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
    

Actualización de la función para que use eventos

En el archivo BlobTriggerEventGrid.cs, agregue Source = BlobTriggerSource.EventGrid a los parámetros para el atributo de desencadenador de blobs, por ejemplo:

[Function("BlobTriggerCSharp")]
public async Task Run([BlobTrigger("samples-workitems/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")] Stream myBlob, string name, FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("BlobTriggerCSharp");
    logger.LogInformation($"C# Blob trigger function Processed blob\n Name: {name} \n Size: {myBlob.Length} Bytes");
}

Después de crear la función, en el archivo de configuración function.json, agregue "source": "EventGrid" al enlace myBlob, por ejemplo:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "samples-workitems/{name}",
      "source": "EventGrid",
      "connection": "<NAMED_STORAGE_CONNECTION>"
    }
  ]
}
  1. Reemplace el contenido del archivo generado Function.java por el código siguiente y cambie el nombre del archivo a BlobTriggerEventGrid.java:

    package com.function;
    
    import com.microsoft.azure.functions.annotation.*;
    import com.microsoft.azure.functions.*;
    
    /**
    * Azure Functions with Azure Blob trigger.
    */
    public class BlobTriggerEventGrid {
        /**
        * This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
        */
        @FunctionName("BlobTriggerEventGrid")
        @StorageAccount("glengatesteventgridblob_STORAGE")
        public void run(
            @BlobTrigger(name = "content", path = "samples-workitems/{name}", dataType = "binary", source = "EventGrid" ) byte[] content,
            @BindingName("name") String name,
            final ExecutionContext context
        ) {
              context.getLogger().info("Java Blob trigger function processed a blob. Name: " + name + "\n  Size: " + content.length + " Bytes");
          }
    }
    
  2. Elimine el archivo de prueba unitaria asociado, que ya no es relevante para el nuevo tipo de desencadenador.

Después de crear la función, agregue source: "EventGrid" al objeto options en el archivo TypeScript, por ejemplo:

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: storageBlobTrigger1,
});

Después de crear la función, agregue source: "EventGrid" al objeto options en el archivo JavaScript, por ejemplo:

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

Después de crear la función, en el archivo de configuración function.json, agregue "source": "EventGrid" al enlace myBlob, por ejemplo:

{
    "bindings": [
        {
            "name": "myblob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "source": "EventGrid",
            "connection": "<NAMED_STORAGE_CONNECTION>"
        }
    ]
}

Inicio de la depuración local

Event Grid valida la dirección URL del punto de conexión al crear una suscripción de eventos en Azure Portal. Esta validación significa que antes de poder crear una suscripción de eventos para la depuración local, la función debe ejecutarse localmente con el acceso remoto habilitado por la utilidad ngrok. Si el código de la función local no se está ejecutando y no es accesible para Azure, no podrá crear la suscripción de eventos.

Determinación del punto de conexión del desencadenador de blobs

Cuando la función se ejecuta localmente, el punto de conexión predeterminado que se usa para un desencadenador de almacenamiento de blobs controlado por eventos es similar a la siguiente dirección URL:

http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid
http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid

Guarde esta ruta de acceso, que usará más adelante para crear direcciones URL de punto de conexión para suscripciones de eventos. Si ha usado un nombre diferente para la función desencadenada de Blob Storage, debe cambiar el valor functionName en la cadena de consulta.

Nota

Dado que el punto de conexión controla eventos para un desencadenador de Blob Storage, la ruta de acceso del punto de conexión incluye blobs. La dirección URL del punto de conexión de un desencadenador de Event Grid tendría eventgrid en la ruta de acceso.

Ejecución de ngrok

Para interrumpir la depuración de una función en su máquina, debe habilitar una manera de que Azure Event Grid se comunique con las funciones que se ejecutan en el equipo local.

La utilidad ngrok reenvía las solicitudes externas a una dirección de servidor proxy generada aleatoriamente a una dirección y puerto específicos del equipo local. para llamar al punto de conexión de webhook de la función que se ejecuta en la máquina.

  1. Inicie ngrok con el comando siguiente:

    ngrok.exe http http://localhost:7071
    

    Al iniciarse la utilidad, la ventana de comandos debe ser similar a la que se muestra en la siguiente captura de pantalla:

    Screenshot that shows the Command Prompt after starting the

  2. Copie la dirección URL HTTPS generada al ejecutar ngrok. Este valor se usa para determinar el punto de conexión de webhook en el equipo expuesto mediante ngrok.

Importante

En este momento, no detenga ngrok. Cada vez que inicia ngrok, se vuelve a generar la dirección URL HTTPS con un valor diferente. Dado que el punto de conexión de una suscripción de eventos no se puede modificar, debe crear una nueva suscripción de eventos cada vez que ejecuta ngrok.

A menos que cree una cuenta de ngrok, el tiempo máximo de sesión de ngrok se limita a dos horas.

Compilación de la dirección URL del punto de conexión

El punto de conexión usado en la suscripción de eventos se compone de tres elementos diferentes: un nombre de servidor con prefijo, una ruta de acceso y una cadena de consulta. En la tabla siguiente se describen estos elementos:

Elemento de URL Descripción
Prefijo y nombre del servidor Cuando la función se ejecuta localmente, el nombre del servidor con un prefijo https:// procede de la dirección URL de Reenvío generada por ngrok. En la dirección URL de localhost, la dirección URL de ngrok reemplaza a http://localhost:7071. Cuando se ejecute en Azure, en su lugar usará el servidor de la aplicación de funciones publicada, que normalmente tiene el formato https://<FUNCTION_APP_NAME>.azurewebsites.net.
Ruta de acceso El elemento de ruta de acceso de la dirección URL del punto de conexión procede de la dirección URL de localhost copiada anteriormente y tiene el aspecto /runtime/webhooks/blobs para un desencadenador de Blob Storage. La ruta de acceso de un desencadenador de Event Grid sería /runtime/webhooks/EventGrid.
Cadena de consulta Para todos los lenguajes incluyendo .NET Isolated el parámetrofunctionName=Host.Functions.BlobTriggerEventGrid, excepto para .NET en proceso que debe ser functionName=BlobTriggerEventGrid en la cadena de consulta establece el nombre de la función que maneja el evento. Si ha usado un nombre diferente para la función, deberá cambiar este valor. No se requiere una clave de acceso cuando se ejecuta de manera local. Al ejecutarse en Azure, también tendrá que incluir un parámetro code= en la dirección URL, que contiene una clave que puede obtener desde el portal.

En la captura de pantalla siguiente se muestra un ejemplo de cómo debe ser la dirección URL de punto de conexión final cuando se usa un desencadenador de Blob Storage denominado BlobTriggerEventGrid:

Endpoint selection

Iniciar depuración

Con ngrok ya en ejecución, inicie el proyecto local de la siguiente manera:

  1. En la función, establezca un punto de interrupción en la línea que controla el registro.

  2. Inicie una sesión de depuración.

    Abra un nuevo terminal y ejecute el comando mvn siguiente para iniciar la sesión de depuración.

    mvn azure-functions:run -DenableDebug
    

    Presione F5 para iniciar una sesión de depuración.

Con el código en ejecución y ngrok reenviando solicitudes, es el momento de crear una suscripción de eventos al contenedor de blobs.

Creación de la suscripción de eventos

Una suscripción de eventos, con tecnología de Azure Event Grid, genera eventos basados en los cambios en el contenedor de blobs vinculado. A continuación, este evento se envía al punto de conexión de webhook en el desencadenador de la función. Después de crear una suscripción de eventos, no se puede cambiar la dirección URL del punto de conexión. Esto significa que después de que haya terminado con la depuración local (o si reinicia ngrok), deberá eliminar y volver a crear la suscripción de eventos.

  1. En Visual Studio Code, seleccione el icono de Azure en la barra de actividades. En Recursos, expanda la suscripción, expanda Cuentas de almacenamiento, haga clic con el botón derecho en la cuenta de almacenamiento que creó anteriormente y seleccione Abrir en el portal.

  2. Inicie sesión en Azure Portal y anote el Grupo de recursos de la cuenta de almacenamiento. Creará los demás recursos en el mismo grupo para facilitar la limpieza de recursos cuando haya terminado.

  3. Seleccione la opción Eventos en el menú de la izquierda.

    Add storage account event

  4. En la ventana Eventos, seleccione el botón + Suscripción de eventos y proporcione los valores de la tabla siguiente en la pestaña Básico:

    Configuración Valor sugerido Description
    Nombre myBlobLocalNgrokEventSub Nombre que identifica la suscripción de eventos. Puede usar el nombre para buscar rápidamente la suscripción de eventos.
    Esquema de eventos Esquema de Event Grid Use el esquema predeterminado para los eventos.
    Nombre del tema del sistema samples-workitems-blobs Nombre del tema, que representa el contenedor. El tema se crea con la primera suscripción y lo usará para las futuras suscripciones de eventos.
    Filtro para tipos de evento Blob Created (Creados por el blob)
    Tipo de punto de conexión Webhook El desencadenador de Blob Storage usa un punto de conexión de webhook. Para un desencadenador de Event Grid, usaría Azure Functions.
    Punto de conexión Punto de conexión de dirección URL basado en ngrok Use el punto de conexión de dirección URL basado en ngrok que determinó anteriormente.
  5. Seleccione Confirmar la selección para validar la dirección URL del punto de conexión.

  6. Seleccione Crear para crear la suscripción de eventos.

Carga de un archivo al contenedor

Con la suscripción de eventos y el proyecto de código y ngrok todavía en ejecución, ahora puede cargar un archivo en el contenedor de almacenamiento para desencadenar la función. Puede cargar un archivo desde el equipo al contenedor de Blob Storage mediante Visual Studio Code.

  1. En Visual Studio Code, abra la paleta de comandos (presione F1) y escriba Azure Storage: Upload Files....

  2. En el cuadro de diálogo Abrir , elija un archivo, preferiblemente un archivo de imagen binaria que no sea demasiado grande, y seleccione Cargar.

  3. Escriba la siguiente información cuando se le indique:

    Configuración Valor sugerido Descripción
    Selección de un recurso Nombre de la cuenta de almacenamiento Elija el nombre de la cuenta de almacenamiento que creó en un paso anterior.
    Seleccione de un tipo de recursos Contenedores de blobs Va a cargar en un contenedor de blobs.
    Seleccione el contenedor de blobs samples-workitems Este valor es el nombre del contenedor que creó en un paso anterior.
    Escriba el directorio de destino de esta carga default Simplemente acepte el valor predeterminado de /, que es la raíz del contenedor.

Este comando carga un archivo desde el equipo al contenedor de almacenamiento en Azure. En este momento, la instancia de ngrok en ejecución debe informar de que se ha reenviado una solicitud. También verá en la salida de func.exe de la sesión de depuración que se ha iniciado la función. Esperemos que, en este momento, la sesión de depuración esté esperando a que establezca el punto de interrupción.

Publicar el proyecto en Azure

Ahora que ha validado correctamente el código de la función de manera local, es el momento de publicar el proyecto en una nueva aplicación de funciones de Azure.

Crear la aplicación de función

Con los pasos siguientes se crean los recursos que necesita en Azure y se implementan los archivos del proyecto.

  1. En la paleta de comandos, introduzca Azure Functions: Crear aplicación de funciones en Azure... (Avanzado).

  2. Siguiendo las indicaciones, proporcione esta información:

    Prompt Número de selección
    Escriba un nombre único global para la nueva aplicación de funciones: En esta solicitud, escriba un nombre único global con el que identificar a la nueva aplicación de funciones y presione la tecla ENTRAR. Los siguientes son caracteres válidos para un nombre de aplicación de función: a-z, 0-9 y -. Anote este nombre; lo necesitará más adelante al compilar la nueva dirección URL del punto de conexión.
    Seleccione una pila del runtime. Elija la versión de lenguaje que ha estado ejecutando localmente.
    Seleccione un sistema operativo. En esta solicitud, debe seleccionar Linux o Windows. Las aplicaciones de Python deben ejecutarse en Linux.
    Seleccione un grupo de recursos para los nuevos recursos. Elija el nombre del grupo de recursos que creó con la cuenta de almacenamiento, que anotó anteriormente en el portal.
    Seleccione una ubicación para los nuevos recursos. Seleccione una ubicación en una región próxima a usted o a otros servicios a los que accedan las funciones.
    Seleccione un plan de hospedaje. En esta solicitud, elija el plan Consumo para usar un hospedaje del plan de consumo sin servidor que solo incurra en cargos cuando se ejecuten las funciones.
    Seleccione una cuenta de almacenamiento. Elija el nombre de la cuenta de almacenamiento existente que ha estado utilizando.
    Seleccione un recurso de Application Insights para la aplicación. En esta solicitud, elija la opción Crear nuevo recurso de Application Insights y escriba un nombre para la instancia que se usará para almacenar los datos correspondientes al tiempo de ejecución de las funciones.

    Se muestra una notificación después de crear la aplicación de funciones y se aplica el paquete de implementación. Seleccione View Output (Ver salida) en esta notificación para ver la creación y los resultados de la implementación, incluidos los recursos de Azure que ha creado.

Implementación del código de función

Importante

Los procesos de implementación en aplicaciones de funciones existentes siempre sobrescriben el contenido de esas aplicaciones en Azure.

  1. En el área Recursos de la actividad de Azure, busque el recurso de la aplicación de funciones que acaba de crear, haga clic con el botón derecho en el recurso y seleccione Implementar en la aplicación de funciones....

  2. Cuando se le solicite sobrescribir las implementaciones anteriores, seleccione Implementar para implementar el código de función en el nuevo recurso de aplicación de funciones.

  3. Cuando se complete el proceso de implementación, seleccione Ver salida para visualizar los resultados de la creación y la implementación, incluidos los recursos de Azure que ha creado. Si se pierde la notificación, seleccione el icono de campana en la esquina inferior derecha para verlo de nuevo.

    Screenshot of the View Output window.

Publicación de la configuración de la aplicación

Dado que la configuración local de local.settings.json no se publica automáticamente, debe cargarla ahora para que la función se ejecute correctamente en Azure.

En la paleta de comandos, escriba Azure Functions: Cargar configuración local... y, en la solicitud Seleccionar un recurso, elija el nombre de la aplicación de funciones.

Volver a crear la suscripción de eventos

Ahora que la aplicación de funciones se ejecuta en Azure, debe crear una nueva suscripción de eventos. Esta nueva suscripción de eventos usa el punto de conexión de la función en Azure. También agregará un filtro a la suscripción de eventos para que la función solo se desencadene cuando se agreguen archivos JPEG (.jpg) al contenedor. En Azure, la dirección URL del punto de conexión también contiene una clave de acceso, que ayuda a bloquear a los actores distintos de Event Grid para que no accedan al punto de conexión.

Obtención de la clave de extensión de blob

  1. En Visual Studio Code, seleccione el icono de Azure en la barra de actividades. En Recursos, expanda la suscripción, expanda Aplicación de funciones, haga clic con el botón derecho en la aplicación de funciones que ha creado y seleccione Abrir en el portal.

  2. En Funciones, en el menú de la izquierda, seleccione Claves de aplicación.

  3. En Claves del sistema, seleccione la clave denominada blobs_extension y copie el valor de clave.

Este valor se incluirá en la cadena de consulta de la nueva dirección URL del punto de conexión.

Compilación de la dirección URL del punto de conexión

Cree una dirección URL de punto de conexión para el desencadenador de Blob Storage en función del ejemplo siguiente:

https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>

En este ejemplo, reemplace <FUNCTION_APP_NAME> por el nombre de la aplicación de funciones y reemplace <BLOB_EXTENSION_KEY> por el valor que ha obtenido del portal. Si usó un nombre diferente para la función, también deberá cambiar la cadena de consulta functionName según sea necesario.

Creación de una suscripción de eventos filtrada

Dado que no se puede cambiar la dirección URL del punto de conexión de una suscripción de eventos, debe crear una nueva suscripción de eventos. También debe eliminar la suscripción de eventos anterior en este momento, ya que no se puede reutilizar.

Esta vez, incluirá el filtro en la suscripción de eventos para que solo los archivos JPEG (*.jpg) desencadenen la función.

  1. En Visual Studio Code, seleccione el icono de Azure en la barra de actividades. En Recursos, expanda la suscripción, expanda Cuentas de almacenamiento, haga clic con el botón derecho en la cuenta de almacenamiento que creó anteriormente y seleccione Abrir en el portal.

  2. En Azure Portal, seleccione la opción Eventos en el menú de la izquierda.

  3. En la ventana Eventos, seleccione la suscripción de eventos anterior basada en ngrok y seleccione Eliminar>Guardar. Con esta acción se quita la suscripción de eventos anterior.

  4. Seleccione el botón + Suscripción de eventos y proporcione los valores de la tabla siguiente en la pestaña Básico:

    Configuración Valor sugerido Description
    Nombre myBlobAzureEventSub Nombre que identifica la suscripción de eventos. Puede usar el nombre para buscar rápidamente la suscripción de eventos.
    Esquema de eventos Esquema de Event Grid Use el esquema predeterminado para los eventos.
    Filtro para tipos de evento Blob Created (Creados por el blob)
    Tipo de punto de conexión Webhook El desencadenador de Blob Storage usa un punto de conexión de webhook. Para un desencadenador de Event Grid, usaría Azure Functions.
    Punto de conexión El nuevo punto de conexión de dirección URL basado en Azure Use el punto de conexión de dirección URL que ha creado, que incluye el valor de clave.
  5. Seleccione Confirmar la selección para validar la dirección URL del punto de conexión.

  6. Seleccione la pestaña Filtros, active Habilitar filtrado de asunto en Filtros de asunto y escriba .jpg en El asunto termina con. Esto filtra los eventos a solo los archivos JPEG.

    Add filter

  7. Seleccione Crear para crear la suscripción de eventos.

Comprobación de la función en Azure

Con toda la topología que ahora ejecuta Azure, es el momento de comprobar que todo funciona correctamente. Puesto que ya está en el portal, lo más fácil es cargar un archivo desde allí.

  1. En la página de la cuenta de almacenamiento del portal, seleccione Contenedores y seleccione el contenedor samples-workitems.

  2. Seleccione el botón Cargar para abrir la página de carga de la derecha, busque el sistema de archivos local para buscar un archivo .jpg para cargarlo y, a continuación, seleccione el botón Cargar para cargar el blob. Ahora puede comprobar que la función se ejecutó en función del evento de carga del contenedor.

  3. En la cuenta de almacenamiento, vuelva a la página Eventos, seleccione Suscripciones de eventos y verá que se ha entregado un evento.

  4. De nuevo en la página de la aplicación de funciones del portal, en Funciones, seleccione Funciones, elija la función y debería ver un Recuento total de ejecuciones de al menos uno.

  5. En Desarrollador, seleccione Supervisar y verá los seguimientos escritos de las ejecuciones de función correctas. Puede que haya un retraso de cinco minutos hasta que Application Insights procese los eventos.

Limpieza de recursos

Si va al paso siguiente y agrega un enlace de cola de Azure Storage a una función, tendrá que conservar todos los recursos intactos para basarse en lo que ya ha hecho.

De lo contrario, puede usar los pasos siguientes para eliminar la aplicación de funciones y sus recursos relacionados para evitar incurrir en costos adicionales.

  1. En Visual Studio Code, presione F1 para abrir la paleta de comandos. En la paleta de comandos, busque y seleccione Azure: Open in portal.

  2. Elija una aplicación de funciones y presione la tecla ENTRAR. La página de la aplicación de funciones se abre en Azure Portal.

  3. En la pestaña Información general, seleccione el vínculo con nombre junto a Grupo de recursos.

    Screenshot of select the resource group to delete from the function app page.

  4. En la página Grupo de recursos, revise la lista de recursos incluidos y compruebe que estos sean los que desea eliminar.

  5. Seleccione Eliminar grupo de recursos y siga las instrucciones.

    El proceso de eliminación tardará un par de minutos. Cuando termine, aparece una notificación durante unos segundos. También puede seleccionar el icono de campana en la parte superior de la página para ver la notificación.

Para más información sobre los costos de Functions, consulte Estimación de los costos según el plan de consumo.

Pasos siguientes