Tutorial: Integración de Azure Functions con una red virtual de Azure mediante puntos de conexión privados

En este tutorial se explica cómo se utiliza Azure Functions para conectarse a recursos de una red virtual de Azure mediante puntos de conexión privados. Cree una nueva aplicación de funciones mediante una nueva cuenta de almacenamiento que esté bloqueada detrás de una red virtual a través de Azure Portal. La red virtual usa un desencadenador de cola de Service Bus.

En este tutorial, hará lo siguiente:

  • Cree una aplicación de funciones en el plan Elastic Premium con integración de red virtual y puntos de conexión privados.
  • Creación de recursos de Azure, como Service Bus
  • Bloquear la instancia de Service Bus tras un punto de conexión privado.
  • Implementar una aplicación de funciones que usa desencadenadores HTTP y de Service Bus.
  • Probar para comprobar si la aplicación de funciones está protegida dentro de la red virtual.
  • Limpieza de recursos.

Creación de una aplicación de funciones en un plan Premium

Cree una aplicación de funciones de C# en un plan Elastic Premium que admita funcionalidades de red, como la integración de red virtual en la creación junto con la escala sin servidor. En este tutorial se usarán C# y Windows. También se admiten otros lenguajes y Linux.

  1. En el menú de Azure Portal o la página Inicio, seleccione Crear un recurso.

  2. En la página Nuevo, seleccione Proceso>Aplicación de funciones.

  3. En la página Aspectos básicos, use la tabla siguiente para configurar la aplicación de funciones.

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción Suscripción en la que se creará esta aplicación de funciones nueva.
    Grupo de recursos myResourceGroup Nombre del grupo de recursos nuevo en el que se creará la aplicación de funciones.
    Nombre de la aplicación de función Nombre único globalmente Nombre que identifica la nueva Function App. Los caracteres válidos son a-z (no distingue mayúsculas de minúsculas), 0-9 y -.
    Publicar Código Elija publicar archivos de código o un contenedor de Docker.
    Pila en tiempo de ejecución .NET En este tutorial se usa .NET.
    Versión 6 (LTS) En este tutorial se usa .NET 6.0 que se ejecuta en el mismo proceso que el host Functions.
    Región Región preferida Elija una región cerca de usted o cerca de otros servicios a los que tendrán acceso las funciones.
    Sistema operativo Windows En este tutorial se usará Windows, pero también funciona para Linux.
    Plan Functions Premium Plan de hospedaje que define cómo se asignan los recursos a la Function App. De manera predeterminada, cuando seleccione Premium, se crea un plan de App Service. El valor predeterminado de SKU y tamaño es EP1, donde EP son las siglas de Elástico Premium. Para más información, consulte la lista de las SKU Premium.

    Al ejecutar las funciones de JavaScript en un plan Premium, debe elegir una instancia que tenga menos vCPU. Para más información, consulte el apartado sobre la elección de planes Premium de un solo núcleo.
  4. Seleccione Siguiente: Storage (Almacenamiento). En la página Almacenamiento, escriba la siguiente configuración.

    Configuración Valor sugerido Descripción
    Cuenta de almacenamiento Nombre único globalmente Cree una cuenta de almacenamiento que use la aplicación de función. Los nombres de cuenta de almacenamiento deben tener entre 3 y 24 caracteres. Solo pueden contener números y letras minúsculas. También puede usar una cuenta existente que no esté restringida por reglas de firewall y que cumpla con los requisitos de la cuenta de almacenamiento. Al usar Functions con una cuenta de almacenamiento bloqueada, se necesitará una cuenta de almacenamiento v2. Esta es la versión de almacenamiento predeterminada creada al crear una aplicación de funciones con funcionalidades de red a través de la hoja de creación.
  5. Seleccione Siguiente: Redes. En la página Redes, escriba la siguiente configuración.

    Nota

    Algunas de estas opciones no son visibles hasta que se seleccionen otras opciones.

    Configuración Valor sugerido Descripción
    Habilitación del acceso público Desactivado Denegar el acceso a la red pública bloqueará todo el tráfico entrante, excepto el que proceda de puntos de conexión privados.
    Habilitar la inserción de red Activado La capacidad de configurar la aplicación con la integración con red virtual en la creación aparecerá en la ventana del portal después de cambiar esta opción a Activado.
    Virtual Network Crear nuevo Seleccione el campo Crear nuevo. En la pantalla emergente, proporcione un nombre para la red virtual y seleccione Aceptar. Se mostrarán las opciones para restringir el acceso entrante y saliente a la aplicación de funciones en la creación. Deberá habilitar explícitamente la integración de red virtual en la parte Acceso saliente de la ventana para restringir el acceso saliente.

    Escriba la siguiente configuración en la sección Acceso de entrada. Este paso creará un punto de conexión privado en la aplicación de funciones.

    Sugerencia

    Para continuar interactuando con la aplicación de funciones desde el portal, deberá agregar el equipo local a la red virtual. Si no desea restringir el acceso entrante, omita este paso.

    Configuración Valor sugerido Descripción
    Habilitación de puntos de conexión privados Activado La capacidad de configurar la aplicación con la integración con redes virtuales en la creación aparecerá en el portal después de que esta opción esté habilitada.
    Nombre del punto de conexión privado myInboundPrivateEndpointName Nombre que identifica el nuevo punto de conexión privado de la aplicación de funciones.
    Subred de entrada Crear nuevo Esta opción creará una nueva subred para el punto de conexión privado de entrada. Se pueden agregar varios puntos de conexión privados a una subred singular. Proporcione un nombre de subred. El bloque de direcciones de subred puede dejarse en el valor predeterminado. Seleccione Aceptar. Para obtener más información sobre el ajuste de tamaño de subred, consulte Subredes.
    DNS Zona DNS privada de Azure Este valor indica qué servidor DNS usa el punto de conexión privado. En la mayoría de los casos, si está trabajando en Azure, la zona DNS privada de Azure será la zona DNS que debería usar como Manual para zonas DNS personalizadas que hayan aumentado la complejidad.

    Escriba la siguiente configuración en la sección Acceso de salida. Este paso integrará la aplicación de funciones con una red virtual al crearla. También expondrá opciones para crear puntos de conexión privados en la cuenta de almacenamiento y restringir la cuenta de almacenamiento desde el acceso de red en la creación. Cuando la aplicación de funciones está integrada en la red virtual, todo el tráfico saliente pasará de forma predeterminada a través de la red virtual.

    Configuración Valor sugerido Descripción
    Habilitación de la integración con redes virtuales Activado Esto integrará la aplicación de funciones con una red virtual en la creación y dirigirá todo el tráfico saliente a través de la red virtual.
    Subred de salida Crear nuevo Esto creará una nueva subred para la integración de redes virtuales de la aplicación de funciones. Una aplicación de funciones solo podrá estar integrada con una red virtual con una subred vacía. Proporcione un nombre de subred. El bloque de direcciones de subred puede dejarse en el valor predeterminado. Si desea configurarlo, obtendrá más información sobre el ajuste de tamaño de subred aquí. Seleccione Aceptar. Se muestra la opción para crear puntos de conexión privados de Storage. Para usar la aplicación de funciones con redes virtuales, debe unirla a una subred.

    Escriba la siguiente configuración en la sección Punto de conexión privado de almacenamiento. En este paso, se crearán puntos de conexión privados para los puntos de conexión de blob, cola, archivo y tabla en la cuenta de almacenamiento en la creación. Esto integrará eficazmente la cuenta de almacenamiento con la red virtual.

    Configuración Valor sugerido Descripción
    Agregar un punto de conexión privado de almacenamiento Activado La capacidad de configurar la aplicación con la integración con redes virtuales en la creación se mostrará en el portal después de que esta opción esté habilitada.
    Nombre del punto de conexión privado myInboundPrivateEndpointName Nombre que identifica el punto de conexión privado de la cuenta de almacenamiento.
    Subred del punto de conexión privado Crear nuevo Esto creará una nueva subred para el punto de conexión privado de entrada en la cuenta de almacenamiento. Se pueden agregar varios puntos de conexión privados a una subred singular. Proporcione un nombre de subred. El bloque de direcciones de subred puede dejarse en el valor predeterminado. Si desea configurarlo, obtendrá más información sobre el ajuste de tamaño de subred aquí. Seleccione Aceptar.
    DNS Zona DNS privada de Azure Este valor indica qué servidor DNS usa el punto de conexión privado. En la mayoría de los casos, si está trabajando en Azure, la zona DNS privada de Azure será la zona DNS que debería usar como Manual para zonas DNS personalizadas que irán aumentado la complejidad.
  6. Seleccione Siguiente: Supervisión. En la página Supervisión, escriba la siguiente configuración.

    Configuración Valor sugerido Descripción
    Application Insights Valor predeterminado Cree un recurso de Application Insights con el mismo nombre de aplicación en la región más cercana compatible. Expanda esta configuración si tiene que cambiar el Nuevo nombre de recurso o almacenar los datos en una Ubicación distinta en una geografía de Azure.
  7. Seleccione Revisar y crear para revisar las selecciones de configuración de la aplicación.

  8. En la página Revisar y crear, revise la configuración. Luego, seleccione Crear para crear e implementar la aplicación de funciones.

  9. En la esquina superior derecha del portal, seleccione el icono Notificaciones y observe el mensaje Implementación correcta.

  10. Seleccione Ir al recurso para ver la nueva aplicación de función. También puede seleccionar Anclar al panel. Dicho anclaje facilita la vuelta a este recurso de aplicación de función desde el panel.

¡Enhorabuena! Creó correctamente la aplicación de funciones prémium.

Nota

Algunas implementaciones podrían producir errores en la creación de los puntos de conexión privados en la cuenta de almacenamiento con el error "StorageAccountOperationInProgress". Este error se producirá aunque la propia aplicación de funciones se cree correctamente. Cuando encuentre un error de este tipo, elimine la aplicación de funciones y vuelva a intentar la operación. En su lugar, puede crear los puntos de conexión privados en la cuenta de almacenamiento manualmente.

Creación de un bus de servicio

A continuación, creará una instancia de Service Bus que se usará para probar la funcionalidad de las capacidades de red de la aplicación de funciones en este tutorial.

  1. En el menú de Azure Portal o la página Inicio, seleccione Crear un recurso.

  2. En la página Nuevo, busque Service Bus. Seleccione Crear.

  3. En la pestaña Aspectos básicos, use la tabla siguiente para configurar las opciones de Service Bus. Todas las demás opciones de configuración pueden usar los valores predeterminados.

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción Suscripción en la que se han creado los recursos.
    Grupo de recursos myResourceGroup El grupo de recursos que creó con la aplicación de funciones.
    Nombre del espacio de nombres myServiceBus Nombre de la instancia de Service Bus para la que está habilitado el punto de conexión privado.
    Ubicación myFunctionRegion La región en la que creó la aplicación de funciones.
    Plan de tarifa Premium Elija este nivel para usar puntos de conexión privados con Azure Service Bus.
  4. Seleccione Revisar + crear. Una vez que se complete la validación, seleccione Crear.

Bloqueo de Service Bus

Cree el punto de conexión privado para bloquear la instancia de Service Bus:

  1. En el menú de la izquierda de la instancia de Service Bus nueva, seleccione Redes.

  2. En la pestaña Conexiones de puntos de conexión privados, seleccione Punto de conexión privado.

    Screenshot of how to go to private endpoints for the Service Bus.

  3. En la pestaña Aspectos básicos, use la configuración de punto de conexión privado que se muestra en la tabla siguiente.

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción Suscripción en la que se han creado los recursos.
    Grupo de recursos myResourceGroup El grupo de recursos que creó con la aplicación de funciones.
    Nombre sb-endpoint Nombre del punto de conexión privado de Service Bus.
    Región myFunctionRegion La región en la que creó la cuenta de almacenamiento.
  4. En la pestaña Recurso, use la configuración de punto de conexión privado que se muestra en la tabla siguiente.

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción Suscripción en la que se han creado los recursos.
    Tipo de recurso Microsoft.ServiceBus/namespaces Tipo de recurso de la instancia de Service Bus.
    Recurso myServiceBus El bus de servicio que ha creado anteriormente en el tutorial.
    Subrecurso de destino namespace Punto de conexión privado que se usará para el espacio de nombres de la instancia de Service Bus.
  5. En la pestaña Red virtual, en Subred, elija Valor predeterminado.

  6. Seleccione Revisar + crear. Una vez que se complete la validación, seleccione Crear.

  7. Una vez creado el punto de conexión privado, vuelva a la sección Redes del espacio de nombres de Service Bus y active la pestaña Acceso público.

  8. Asegúrese de que esté seleccionada la opción Redes seleccionadas.

  9. Seleccione + Agregar red virtual existente para agregar la red virtual creada recientemente.

  10. En la pestaña Agregar redes, use la configuración de red de la tabla siguiente:

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción Suscripción en la que se han creado los recursos.
    Redes virtuales myVirtualNet Nombre de la red virtual a la que se conectará la aplicación de funciones.
    Subredes functions Nombre de la subred a la que se conectará la aplicación de funciones.
  11. Seleccione Agregar la dirección IP del cliente para dar acceso a esa IP de cliente actual al espacio de nombres.

    Nota

    Es necesario habilitar la dirección IP del cliente para permitir que Azure Portal publique mensajes en la cola más adelante en este tutorial.

  12. Seleccione Habilitar para habilitar el punto de conexión de servicio.

  13. Seleccione Agregar para agregar la red virtual y la subred seleccionadas a las reglas de firewall para la instancia de Service Bus.

  14. Seleccione Guardar para almacenar las reglas de firewall actualizadas.

Los recursos de la red virtual ahora pueden comunicarse con la instancia de Service Bus mediante el punto de conexión privado.

Creación de una cola

Cree la cola en la que el desencadenador de Azure Functions Service Bus obtendrá los eventos:

  1. En el menú de la izquierda de la instancia de Service Bus, seleccione Colas.

  2. Seleccione Cola. Para los fines de este tutorial, especifique queue como nombre de la nueva cola.

    Screenshot of how to create a Service Bus queue.

  3. Seleccione Crear.

Obtención de la cadena de conexión de Service Bus

  1. En el menú de la izquierda de Service Bus, seleccione Directivas de acceso compartido.

  2. Seleccione RootManageSharedAccessKey. Copie la Cadena de conexión principal y guárdela. Necesitará esta cadena de conexión cuando configure los valores de la aplicación.

    Screenshot of how to get a Service Bus connection string.

Configuración de los valores de la aplicación de funciones

  1. En el menú de la izquierda de la aplicación de funciones, seleccione Configuración.

  2. Para usar la aplicación de funciones con redes virtuales y Service Bus, actualice la configuración de la aplicación que se muestra en la tabla siguiente. Para agregar o editar una configuración, seleccione + Nueva configuración de la aplicación o el icono Editar en la columna situada más a la derecha de la tabla de configuración de la aplicación. Cuando termine, seleccione Save (Guardar).

    Configuración Valor sugerido Descripción
    SERVICEBUS_CONNECTION myServiceBusConnectionString Cree una configuración de aplicación para la cadena de conexión de la instancia de Service Bus. Esta cadena de conexión de almacenamiento proviene de la sección Obtención de la cadena de conexión de Service Bus.
    WEBSITE_CONTENTOVERVNET 1 Cree esta configuración de aplicación. Un valor de 1 permite escalar la aplicación de funciones cuando la cuenta de almacenamiento está restringida a una red virtual.
  3. Puesto que usa un plan de hospedaje Elastic Premium, en la vista Configuración seleccione la pestaña Configuración del entorno de ejecución de la función. Establezca Supervisión de escalado en tiempo de ejecución en Activado. Después, seleccione Guardar. El escalado controlado por el entorno de ejecución permite conectar funciones de desencadenador no HTTP a los servicios que se ejecutan dentro de la red virtual.

    Screenshot of how to enable runtime-driven scaling for Azure Functions.

Nota:

El escalado en tiempo de ejecución no es necesario para las aplicaciones de funciones hospedadas en un plan de App Service dedicado.

Implementación de un desencadenador de Service Bus y un desencadenador HTTP

Nota

La habilitación de puntos de conexión privados en una aplicación de funciones también hace que el sitio del Administrador de control de código fuente (SCM) sea inaccesible públicamente. Las indicaciones siguientes proporcionan instrucciones de implementación mediante el Centro de implementación dentro de la aplicación de funciones. Como alternativa, use implementación zip o agentes auto-hospedados que se implementan en una subred de la red virtual.

  1. En GitHub, vaya al repositorio de ejemplo siguiente. Contiene una aplicación de funciones y dos funciones, un desencadenador HTTP y un desencadenador de cola de Service Bus.

    https://github.com/Azure-Samples/functions-vnet-tutorial

  2. En la parte superior de la página, seleccione Bifurcar para crear una bifurcación de este repositorio en su propia organización o cuenta de GitHub.

  3. En el menú de la izquierda de la aplicación de funciones, seleccione Centro de implementación. Luego, seleccione Configuración.

  4. En la pestaña Configuración, use la configuración de implementación que se muestra en la tabla siguiente.

    Configuración Valor sugerido Descripción
    Origen GitHub Debe haber creado un repositorio de GitHub para el código de ejemplo del paso 2.
    Organización myOrganization La organización en la que está insertado el repositorio. Por lo general, se trata de su cuenta.
    Repositorio functions-vnet-tutorial Repositorio bifurcado desde https://github.com/Azure-Samples/functions-vnet-tutorial.
    Rama main (principal) La rama principal del repositorio que creó.
    Pila en tiempo de ejecución .NET El código de ejemplo está en C#.
    Versión .NET Core 3.1 Versión del entorno de ejecución.
  5. Seleccione Guardar.

    Screenshot of how to deploy Azure Functions code through the portal.

  6. La implementación inicial debería tardar unos minutos. Cuando la aplicación se implementa correctamente, en la pestaña Registros, verá un mensaje de estado correcto (activo) . Si es necesario, actualice la página.

¡Enhorabuena! Implementó correctamente la aplicación de funciones de ejemplo.

Prueba de la aplicación de funciones bloqueada

  1. En el menú de la izquierda de la aplicación de funciones, seleccione Funciones.

  2. Seleccione ServiceBusQueueTrigger.

  3. En el menú de la izquierda, seleccione Monitor.

Verá que no puede supervisar la aplicación. El explorador no tiene acceso a la red virtual, por lo que no puede acceder directamente a los recursos de esa red.

A continuación, se muestra una forma alternativa de supervisar la función mediante el uso de Application Insights:

  1. En el menú de la izquierda de la aplicación de funciones, seleccione Application Insights. Luego, seleccione Ver datos de Application Insights.

    Screenshot of how to view application insights for a function app.

  2. En el menú de la izquierda, seleccione Métricas activas.

  3. Abra una nueva pestaña. En el menú de la izquierda de Service Bus, seleccione Colas.

  4. Seleccione la cola.

  5. En el menú de la izquierda, seleccione Service Bus Explorer. En Enviar, elija Texto/sin formato para Tipo de contenido. Luego, escriba un mensaje.

  6. Seleccione Enviar para enviar el mensaje.

    Screenshot of how to send Service Bus messages by using the portal.

  7. En la pestaña Live Metrics, debería ver que se activó el desencadenador de la cola de Service Bus. Si no es así, vuelva a enviar el mensaje desde Service Bus Explorer.

    Screenshot of how to view messages by using live metrics for function apps.

Felicidades. Probó correctamente la configuración de la aplicación de funciones con puntos de conexión privados.

Descripción de las zonas DNS privadas

Usó un punto de conexión privado para conectarse a los recursos de Azure. Está estableciendo una conexión a una dirección IP privada en lugar del punto de conexión público. Los servicios de Azure existentes están configurados para usar un DNS existente para conectarse al punto de conexión público. Debe reemplazar la configuración de DNS para conectarse al punto de conexión privado.

Se crea una zona DNS privada para cada recurso de Azure configurado con un punto de conexión privado. También se crea un registro de DNS para cada dirección IP privada asociada con el punto de conexión privado.

En este tutorial se han creado las siguientes zonas DNS:

  • privatelink.file.core.windows.net
  • privatelink.blob.core.windows.net
  • privatelink.servicebus.windows.net
  • privatelink.azurewebsites.net

Limpieza de recursos

En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si no cree que vaya a necesitar estos recursos en el futuro, puede eliminarlos mediante la eliminación del grupo de recursos.

En el menú de Azure Portal o la página Inicio, seleccione Grupos de recursos. En la página Grupos de recursos, seleccione myResourceGroup.

En la página myResourceGroup, asegúrese de que los recursos enumerados sean los que desea eliminar.

Seleccione Eliminar grupo de recursos, escriba myResourceGroup en el cuadro de texto para confirmar y, después, seleccione Eliminar.

Pasos siguientes

En este tutorial, creó una aplicación de funciones, una cuenta de almacenamiento y una instancia de Service Bus de nivel Premium. Protegió todos estos recurso tras puntos de conexión privados.

Use los vínculos siguientes para obtener más información sobre las opciones de red y puntos de conexión privados de Azure Functions: