Tutorial: Control de la IP de salida de Azure Functions mediante un servicio NAT Gateway de Azure Virtual Network

La traducción de direcciones de red (NAT) virtual simplifica la conectividad de Internet solo saliente para las redes virtuales. Cuando se configura en una subred, todas las conexiones salientes usan las direcciones IP públicas estáticas que se hayan especificado. El proceso NAT puede ser útil para aplicaciones que necesitan consumir un servicio de terceros que use una lista de permitidos para direcciones IP como medida de seguridad. Para más información, consulte ¿Qué es Azure NAT Gateway?

En este tutorial se muestra cómo usar instancias de NAT Gateway para enrutar el tráfico saliente desde una función desencadenada por HTTP. Esta función le permite comprobar su propia dirección IP saliente. En este tutorial, aprenderá a:

  • Creación de una red virtual
  • Crear una aplicación de funciones de plan Prémium.
  • Crear una dirección IP pública
  • Crear un servicio NAT Gateway
  • Configurar una aplicación de funciones para enrutar el tráfico saliente a través de NAT Gateway

Topología

El siguiente diagrama muestra la arquitectura de la solución que se ha creado:

UI for NAT gateway integration

La ejecución de Functions en el plan Premium tiene las mismas capacidades de hospedaje que las aplicaciones web en Azure App Service, que incluye la característica de integración de red virtual. Para obtener más información sobre la integración de red virtual, incluida la solución de problemas y la configuración avanzada, vea Integración de su aplicación con una red virtual de Azure.

Prerrequisitos

En este tutorial, es importante que comprenda el direccionamiento IP y las subredes. Puede empezar con este artículo que trata los aspectos básicos del direccionamiento y las subredes. Hay muchos más artículos y vídeos disponibles en línea.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Si ya ha completado el tutorial sobre la integración de Azure Functions con Azure Virtual Network, puede consultar directamente Creación de una función desencadenada por HTTP.

Creación de una red virtual

  1. En el menú de Azure Portal, seleccione Crear un recurso. En Azure Marketplace, seleccione Redes>Red virtual.

  2. En Creación de una red virtual, escriba o seleccione los valores especificados, tal como se muestra en la tabla siguiente:

    Configuración Value
    Suscripción Seleccione su suscripción.
    Resource group Seleccione Crear nuevo, escriba myResourceGroup y, después, seleccione Aceptar.
    Nombre Escriba myResourceGroup-vnet.
    Location Seleccione Este de EE. UU.
  3. Seleccione Next: IP Addresses (Siguiente: Direcciones IP); y para el espacio de direcciones IPv4, escriba 10.10.0.0/16.

  4. Seleccione Agregar subred y escriba Tutorial-Net para el nombre de subred y 10.10.1.0/24para Intervalo de direcciones de subred.

    IP Addresses tab for creating a vnet

  5. Seleccione Agregar y, después, Revisar y crear. Deje el resto tal como está y seleccione Crear.

  6. En Crear red virtual, seleccione Crear.

A continuación, cree una aplicación de funciones en el plan Prémium. Este plan ofrece escala sin servidor, al mismo tiempo que admite la integración de red virtual.

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

En este tutorial se muestra cómo crear la aplicación de función en un plan Premium. La misma funcionalidad también está disponible cuando se usa un plan dedicado (App Service).

Nota

Para conseguir una experiencia óptima con este tutorial, elija .NET para la pila en tiempo de ejecución; y elija Windows como sistema operativo. Además, cree la aplicación de funciones en la misma región que la red virtual.

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

  2. En la página Nuevo, seleccione Compute>Function App.

  3. En la página Básico, utilice la configuración de la aplicación de funciones como se especifica en la tabla siguiente:

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción Suscripción en la que se creará esta nueva aplicación de función.
    Grupo de recursos myResourceGroup Nombre para el nuevo grupo de recursos en el que se va a crear la Function App.
    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 Opción para publicar archivos de código o un contenedor Docker.
    Pila en tiempo de ejecución Lenguaje preferido Elija un tiempo de ejecución que admita su lenguaje de programación de funciones preferido. Actualmente no se admite la edición en el portal para el desarrollo con Python.
    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.
  4. Seleccione Siguiente: Hospedaje. En la página Hospedaje, 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 las cuentas de almacenamiento deben tener entre 3 y 24 caracteres y solo pueden incluir números y letras en minúscula. También puede usar una cuenta existente que debe cumplir los requisitos de la cuenta de almacenamiento.
    Sistema operativo Sistema operativo preferido Se preselecciona un sistema operativo en función de la selección de pila en tiempo de ejecución, pero puede cambiar esta configuración si es necesario. Python solo es compatible con Linux. La edición en el portal solo se admite en Windows.
    Plan Premium Plan de hospedaje que define cómo se asignan los recursos a la Function App. Seleccione Premium. De forma predeterminada, 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 SKU Premium.
    Al ejecutar las funciones de JavaScript en un plan Prémium, 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.
  5. 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 Crea un recurso de Application Insights con el mismo nombre de aplicación en la región más cercana que lo admita. Si expande esta configuración, puede cambiar el valor de Nuevo nombre de recurso o elegir otro valor en Ubicación en la ubicación geográfica de Azure para almacenar los datos.
  6. Seleccione Revisar y crear para revisar las selecciones de configuración de la aplicación.

  7. En la página Revisar y crear, revise la configuración y, a continuación, seleccione Crear para aprovisionar e implementar la aplicación de función.

  8. Seleccione el icono Notificaciones de la esquina superior derecha del portal y observe el mensaje Implementación correcta.

  9. 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.

    Deployment notification

Conexión de la aplicación de funciones a la red virtual

Ahora puede conectar la aplicación de funciones a la red virtual.

  1. En la aplicación de funciones, seleccione Redes en el menú de la izquierda y, en Integración de VNet, seleccione Haga clic aquí para configurar.

    Choose networking in the function app

  2. En la página de Integración con red virtual, seleccione Agregar VNET.

  3. En Estado de la característica de red, use la configuración de la tabla que aparece debajo de la imagen:

    Define the function app virtual network

    Configuración Valor sugerido Descripción
    Virtual Network MyResourceGroup-vnet Esta red virtual es la que se ha creado anteriormente.
    Subred Creación de una subred nueva Cree una subred en la red virtual para aplicación de funciones que se va a usar. La integración de red virtual se debe configurar para usar una subred vacía.
    Nombre de subred Function-Net Nombre de la nueva subred.
    Bloque de direcciones de la red virtual 10.10.0.0/16 Solo debe tener un bloque de direcciones definido.
    El bloque de direcciones de la subred 10.10.2.0/24 El tamaño de la subred restringe el número total de instancias a las que la aplicación de funciones del plan Premium puede escalar horizontalmente. En este ejemplo se usa una subred de /24 con 254 direcciones disponibles en el host. Esta subred tiene un aprovisionamiento excesivo, pero es fácil de calcular.
  4. Seleccione Aceptar para agregar la subred. Cierre las páginas de Integración con red virtual y de Estado de característica de red para volver a la página de aplicación de funciones.

La aplicación de funciones podrá acceder ahora a la red virtual. Cuando la conectividad está habilitada, la configuración del sitio vnetrouteallenabled se establece en 1. Debe tener esta configuración de sitio o la configuración de aplicación WEBSITE_VNET_ROUTE_ALL heredada establecida en 1.

A continuación, agregará una función desencadenada por HTTP a la aplicación de funciones.

Creación de una función desencadenada por HTTP

  1. En el menú de la izquierda de la ventana Funciones, seleccione Funciones y, a continuación, seleccione Agregar en el menú superior.

  2. En la ventana Nueva función, seleccione el desencadenador HTTP y acepte el nombre predeterminado para la nueva función o escriba otro nombre.

  3. En Código y prueba, reemplace el código de script de C# generado por la plantilla (.csx) por el código siguiente:

    #r "Newtonsoft.Json"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        var client = new HttpClient();
        var response = await client.GetAsync(@"https://ifconfig.me");
        var responseMessage = await response.Content.ReadAsStringAsync();
    
        return new OkObjectResult(responseMessage);
    }
    

    Este código llama a un sitio web externo que devuelve la dirección IP del autor de la llamada, que en este caso es la función. Este método permite determinar fácilmente la dirección IP de salida que utiliza la aplicación de funciones.

Ya está listo para ejecutar la función y comprobar las direcciones IP de salida actuales.

Comprobación de las direcciones IP de salida actuales

Ahora puede ejecutar la función. Pero primero regístrese en el portal y vea qué direcciones IP de salida usa la aplicación de funciones.

  1. En la aplicación de funciones, seleccione Propiedades y revise el campo Direcciones IP de salida.

    View function app outbound IP addresses

  2. Vuelva a la función de desencadenador HTTP, seleccione Código y prueba y después Probar/ejecutar.

    Test function

  3. Seleccione Ejecutar para ejecutar la función. A continuación, cambie a Salida.

    Test function output

  4. Compruebe que la dirección IP del cuerpo de la respuesta HTTP coincida con uno de los valores de direcciones IP de salida que vio anteriormente.

Ahora puede crear una dirección IP pública y usar un servicio NAT Gateway para modificar esta dirección IP de salida.

Creación de una IP pública

  1. En el grupo de recursos, seleccione Agregar, busque en Azure Marketplace la dirección IP pública y seleccione Crear. Utilice la configuración de la tabla debajo de la imagen:

    Create Public IP Address

    Configuración Valor sugerido
    Versión de la dirección IP IPv4
    SKU Estándar
    Nivel Regional
    Nombre IP de salida
    Suscripción Asegúrese de que se muestra la suscripción
    Grupos de recursos myResourceGroup (o el nombre asignado al grupo de recursos)
    Ubicación Este de EE. UU. (o la ubicación que asignó a los demás recursos)
    Zona de disponibilidad Ninguna zona
  2. Seleccione Crear para iniciar la implementación.

  3. Una vez finalizada la implementación, vaya al recurso de dirección IP pública recién creado y consulte la dirección IP en Información general.

    View Public IP Address

Creación de una instancia de NAT Gateway

Ahora, vamos a crear el servicio NAT Gateway. En el tutorial anterior sobre redes virtuales, el nombre de subred sugerido era Function-Net y el nombre de red virtual sugerido era MyResourceGroup-vnet.

  1. En el grupo de recursos, seleccione Agregar, busque en Azure Marketplace la dirección IP pública y seleccione Crear. Use la configuración de la tabla que aparece debajo de la imagen para rellenar la pestaña Básico:

    Create NAT gateway

    Configuración Valor sugerido
    Suscripción Su suscripción
    Grupos de recursos myResourceGroup (o el nombre asignado al grupo de recursos)
    Nombre de NAT Gateway myNatGateway
    Región Este de EE. UU. (o la ubicación que asignó a los demás recursos)
    Zona de disponibilidad None
  2. Seleccione Next: Outbound IP (Siguiente: Dirección IP de salida). En el campo Direcciones IP públicas, seleccione la dirección IP pública creada anteriormente. Deje sin seleccionar los prefijos de dirección IP pública.

  3. Seleccione Next: Subnet (Siguiente: Subred). Seleccione el recurso myResourceGroup-vnet en el campo Red virtual y Function-Net como subred.

    Select subnet

  4. Seleccione Revisar y crear y, a continuación, Crear para enviar la implementación.

Una vez finalizada la implementación, el servicio NAT Gateway estará listo para enrutar el tráfico procedente de la subred de la aplicación de funciones a Internet.

Comprobación de las nuevas direcciones IP de salida

Repita los pasos anteriores para volver a ejecutar la función. Ahora debería ver la dirección IP de salida que configuró en el servicio NAT en la salida de la función.

Limpieza de recursos

Ha creado recursos para completar este tutorial. Se le facturará por el consumo de estos recursos en función del estado de la cuenta y los precios de los servicios. Para evitar costos adicionales, elimine los recursos cuando ya no los necesite.

  1. En Azure Portal, vaya a la página Grupo de recursos.

    Para llegar a esa página desde la página de aplicación de funciones, seleccione la pestaña Información general y el vínculo situado bajo Grupo de recursos.

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

    Para llegar a esa página desde el panel, seleccione Grupos de recursos y, después, seleccione el grupo que ha utilizado para este artículo.

  2. En la página Grupo de recursos, revise la lista de recursos incluidos y compruebe que son los que desea eliminar.

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

    La eliminación puede 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.

Pasos siguientes