Compartir a través de


Creación y administración de aplicaciones de funciones en el plan de consumo flexible

En este artículo se muestra cómo crear aplicaciones de funciones hospedadas en el plan de consumo flexible en Azure Functions. También se muestra cómo administrar determinadas características de una aplicación hospedada en el plan de consumo flexible.

Los recursos de la aplicación de funciones son específicos del lenguaje. Asegúrese de elegir el lenguaje de desarrollo de código preferido al principio del artículo.

Requisitos previos

Creación de una aplicación de consumo flexible

En esta sección se muestra cómo crear una aplicación de funciones en el plan de consumo flexible mediante la CLI de Azure, Azure Portal o Visual Studio Code. Para obtener un ejemplo de creación de una aplicación en un plan de consumo flexible mediante plantillas de Bicep/ARM, consulte el repositorio de consumo flexible.

Puede omitir esta sección si decide crear e implementar la aplicación mediante Maven.

Para admitir el código de la función, debe crear tres recursos:

  • Un grupo de recursos, que es un contenedor lógico de recursos relacionados.
  • Una cuenta de almacenamiento, que se usa para mantener el estado y otra información sobre sus funciones.
  • Una aplicación de funciones en el plan de consumo flexible, que proporciona el entorno para ejecutar el código de función. Una aplicación de funciones se asigna a un proyecto de función local y le permite agrupar funciones como una unidad lógica, lo que facilita la administración, la implementación y el uso compartido de recursos en el plan de consumo flexible.
  1. Si todavía no lo ha hecho, inicie sesión en Azure:

    az login
    

    El comando az login inicia sesión en su cuenta de Azure.

  2. Use el comando az functionapp list-flexconsumption-locations para revisar la lista de regiones que admiten actualmente el plan de consumo flexible.

    az functionapp list-flexconsumption-locations --output table
    
  1. Cree un grupo de recursos en una de las regiones admitidas actualmente:

    az group create --name <RESOURCE_GROUP> --location <REGION>
    

    En el comando anterior, reemplace <RESOURCE_GROUP> por un valor único en la suscripción y <REGION> por una de las regiones admitidas actualmente. El comando az group create crea un grupo de recursos.

  2. Cree una cuenta de almacenamiento de uso general en el grupo de recursos y la región:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group <RESOURCE_GROUP> --sku Standard_LRS --allow-blob-public-access false
    

    En el ejemplo anterior, reemplace <STORAGE_NAME> por un nombre que sea apropiado para usted y único en Azure Storage. Los nombres deben contener entre 3 y 24 caracteres y solo letras minúsculas. Standard_LRS especifica una cuenta de uso general, que es compatible con Functions. El comando az storage account create crea la cuenta de almacenamiento.

    Importante

    La cuenta de almacenamiento se usa para almacenar datos importantes de la aplicación, a veces incluido el propio código de la aplicación. Debe limitar el acceso desde otras aplicaciones y usuarios a la cuenta de almacenamiento.

  3. Cree la aplicación de funciones en Azure:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0 
    

    Las aplicaciones de C# que se ejecutan In-Process no se admiten actualmente al ejecutarse en un plan de consumo flexible.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime java --runtime-version 17 
    

    En el caso de las aplicaciones de Java, Java 11 también se admite actualmente.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 20 
    
    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime python --runtime-version 3.11 
    

    Para las aplicaciones de Python, Python 3.10 también se admite actualmente.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime powershell --runtime-version 7.4 
    

    En este ejemplo, reemplace tanto <RESOURCE_GROUP> como <STORAGE_NAME> por el grupo de recursos y el nombre de la cuenta que ha usado en el paso anterior, respectivamente. Además, reemplace <APP_NAME> por un nombre único global adecuado para usted. <APP_NAME> también es el dominio del servidor de nombres de dominio (DNS) predeterminado de la aplicación de funciones. El comando az functionapp create crea la aplicación de funciones en Azure.

    Este comando crea una aplicación de funciones que se ejecuta en el plan de consumo flexible.

    Dado que ha creado la aplicación sin especificar instancias siempre preparadas, la aplicación solo incurre en costos al ejecutar activamente las funciones. El comando también crea una instancia asociada de Application Insights de Azure en el mismo grupo de recursos con la que puede supervisar la aplicación de funciones y ver registros. Para más información, consulte Supervisión de Azure Functions.

    
    

Implementación del proyecto de código

Puede omitir esta sección si decide crear e implementar la aplicación mediante Maven.

Puede optar por implementar el código del proyecto en una aplicación de funciones existente mediante varias herramientas:

Importante

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

  1. En la paleta de comandos, escriba y seleccione Azure Functions: implementar la aplicación de funciones.

  2. Seleccione la aplicación de funciones que acaba de crear. 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 la implementación, seleccione Ver la salida para ver los resultados de creación e implementación, incluidos los recursos de Azure que creó. Si se pierde la notificación, seleccione el icono de campana en la esquina inferior derecha para verlo de nuevo.

    Captura de pantalla de la vista de la ventana de salida.

Creación e implementación de la aplicación mediante Maven

Puede usar Maven para crear una aplicación de funciones hospedada en el plan de consumo flexible y los recursos necesarios durante la implementación modificando el archivo pom.xml.

  1. Cree un proyecto de código Java completando la primera parte de uno de los siguientes artículos de inicio rápido:

  2. En el proyecto de código Java, abra el archivo pom.xml y realice los siguientes cambios para crear la aplicación de funciones en el plan de consumo flexible:

    • Cambie el valor de <properties>.<azure.functions.maven.plugin.version> a 1.34.0.

    • En la sección <plugin>.<configuration> de azure-functions-maven-plugin, agregue o quite la marca de comentario del elemento <pricingTier> de la siguiente manera:

      <pricingTier>Flex Consumption</pricingTier>
      
  3. (Opcional) Personalice el plan de consumo flexible en la implementación de Maven mediante la inclusión de estos elementos en la sección <plugin>.<configuration>:

    • <instanceSize>: establece el tamaño de la memoria de instancia para la aplicación de funciones. El valor predeterminado es 2048.
    • <maximumInstances>: establece el valor más alto para el número máximo de instancias de la aplicación de funciones.
    • <alwaysReadyInstances>: establece el recuento de instancias siempre preparadas con elementos secundarios para grupos de desencadenadores HTTP (<http>), grupos de Durable Functions (<durable>) y otros desencadenadores específicos (<my_function>). Al establecer cualquier recuento de instancias mayor que cero, se le cobrará por estas instancias tanto si las funciones se ejecutan como si no. Para obtener más información, vea Facturación.
  4. Antes de poder realizar la implementación, inicie sesión en la suscripción de Azure mediante la CLI de Azure.

    az login
    

    El comando az login inicia sesión en su cuenta de Azure.

  5. Use el siguiente comando para implementar el proyecto de código en una nueva aplicación de funciones en el plan de consumo flexible.

    mvn azure-functions:deploy
    

    Maven usa la configuración de la plantilla pom.xml para crear la aplicación de funciones en un plan de consumo flexible en Azure, junto con los demás recursos necesarios. Si estos recursos ya existen, el código se implementa en la aplicación de funciones y se sobrescribe cualquier código existente.

Habilitación de la integración de red virtual

Puede habilitar la integración con red virtual para la aplicación en un plan de consumo flexible. En los ejemplos de esta sección se da por hecho que ya ha creado una red virtual con subred en la cuenta. Puede habilitar la integración con red virtual al crear la aplicación o más adelante.

Importante

Actualmente, el plan de consumo flexible no admite subredes con nombres que contengan caracteres de subrayado (_).

Para habilitar las redes virtuales a la hora de crear la aplicación:

Para habilitar la integración con red virtual, ejecute el comando az functionapp create e incluya los parámetros --vnet y --subnet.

  1. Crear la red virtual y la subred, si aún no lo ha hecho.

  2. Complete los pasos del 1 al 4 en Creación de una aplicación de consumo flexible para crear los recursos necesarios para la aplicación.

  3. Ejecute el comando az functionapp create, incluidos los parámetros --vnet y --subnet, como en este ejemplo:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
    

    El valor <VNET_RESOURCE_ID> es el identificador de recurso de la red virtual, que tiene el formato: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCER_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>. Puede usar este comando para obtener una lista de identificadores de red virtual, filtrados por <RESOURCE_GROUP>: az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id.

Para obtener ejemplos completos sobre cómo crear aplicaciones en el plan de consumo flexible con la integración con red virtual, consulte estos recursos:

Para modificar o eliminar la integración con red virtual en una aplicación existente:

Use el comando az functionapp vnet-integration add para habilitar la integración con red virtual en una aplicación de funciones existente:

az functionapp vnet-integration add --resource-group <RESOURCE_GROUP> --name <APP_NAME> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>

Use el comando az functionapp vnet-integration remove para deshabilitar la integración con red virtual en la aplicación:

az functionapp vnet-integration remove --resource-group <RESOURCE_GROUP> --name <APP_NAME>

Use el comando az functionapp vnet-integration list para enumerar las integraciones con red virtual actuales para la aplicación:

az functionapp vnet-integration list --resource-group <RESOURCE_GROUP> --name <APP_NAME>

Al elegir una subred, tenga en cuenta estas consideraciones:

  • La subred que elija no se puede estar usando con otros fines, como con puntos de conexión privados o puntos de conexión de servicio, ni delegarse en cualquier otro plan de hospedaje o servicio.
  • Puede compartir la misma subred con más de una aplicación que se ejecuta en un plan de consumo flexible. Dado que los recursos de red se comparten en todas las aplicaciones, una aplicación de funciones podría afectar al rendimiento de otras en la misma subred.
  • En un plan de consumo flexible, una sola aplicación de funciones puede usar hasta 40 direcciones IP, incluso cuando la aplicación se escala más allá de 40 instancias. Aunque esta regla general es útil al calcular el tamaño de subred que necesita, no se aplica estrictamente.

Configurar la implementación

En el plan de Consumo flexible, el paquete de implementación que contiene el código de la aplicación se mantiene en un contenedor de Azure Blob Storage. De manera predeterminada, las implementaciones usan la misma cuenta de almacenamiento (AzureWebJobsStorage) y el mismo valor de cadena de conexión que el runtime de Functions para mantener la aplicación. La cadena de conexión se almacena en la configuración de la aplicación DEPLOYMENT_STORAGE_CONNECTION_STRING. Sin embargo, en su lugar puede designar un contenedor de blobs en una cuenta de almacenamiento independiente como origen de implementación para el código. También puede cambiar el método de autenticación que se usa para acceder al contenedor.

Un origen de implementación personalizado debe cumplir estos criterios:

  • La cuenta de almacenamiento ya debe existir.
  • El contenedor que se va a usar para las implementaciones también debe existir.
  • Cuando más de una aplicación usa la misma cuenta de almacenamiento, cada una debe tener su propio contenedor de implementación. El uso de un contenedor único para cada aplicación impide que los paquetes de implementación se sobrescriban, lo que ocurriría si las aplicaciones comparten el mismo contenedor.

Al configurar la autenticación de almacenamiento de implementación, tenga en cuenta estas consideraciones:

  • Cuando se usa una cadena de conexión para conectarse a la cuenta de almacenamiento de implementación, la configuración de la aplicación que contiene la cadena de conexión ya debe existir.
  • Cuando se usa una identidad administrada asignada por el usuario, la identidad proporcionada se vincula a la aplicación de funciones. El rol Storage Blob Data Contributor con ámbito de la cuenta de almacenamiento de implementación también se asigna a la identidad.
  • Cuando se usa una identidad administrada asignada por el sistema, se crea una identidad cuando aún no existe una identidad asignada por el sistema válida en la aplicación. Cuando existe una identidad asignada por el sistema, el rol Storage Blob Data Contributor con ámbito de la cuenta de almacenamiento de implementación también se asigna a la identidad.

Para configurar las opciones de implementación al crear la aplicación de funciones en el plan de Consumo flexible:

Use el comando az functionapp create y proporcione estas opciones adicionales que personalizan el almacenamiento de implementación:

Parámetro Descripción
--deployment-storage-name Nombre de la cuenta de almacenamiento de implementación.
--deployment-storage-container-name Nombre del contenedor de la cuenta que va a contener el paquete de implementación de la aplicación.
--deployment-storage-auth-type Tipo de autenticación que se va a usar para conectarse a la cuenta de almacenamiento de implementación. Los valores admitidos incluyen StorageAccountConnectionString, UserAssignedIdentity y SystemAssignedIdentity.
--deployment-storage-auth-value Cuando se usa StorageAccountConnectionString, este parámetro se establece en el nombre de la configuración de la aplicación que contiene la cadena de conexión de la cuenta de almacenamiento de implementación. Cuando se usa UserAssignedIdentity, este parámetro se establece en el nombre del id. de recurso de la identidad que desea usar.

En este ejemplo se crea una aplicación de funciones en el plan de Consumo flexible con una cuenta de almacenamiento de implementación independiente y una identidad asignada por el usuario:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>

También puede modificar la configuración de almacenamiento de implementación para una aplicación existente.

Use el comando az functionapp deployment config set para modificar la configuración del almacenamiento de implementación:

az functionapp deployment config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>

Configuración de la memoria de instancia

El tamaño de la memoria de instancia que usa el plan de consumo flexible se puede establecer explícitamente al crear la aplicación. Para obtener más información sobre los tamaños admitidos, consulte memoria de instancia.

Para establecer un tamaño de memoria de instancia diferente del predeterminado al crear la aplicación:

Especifique el parámetro --instance-memory en el comando az functionapp create. En este ejemplo se crea una aplicación de C# con un tamaño de instancia de 4096:

az functionapp create --instance-memory 4096 --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0

Puede cambiar la configuración de tamaño de memoria de instancia que usa la aplicación en cualquier momento.

En este ejemplo se usa el comando az functionapp scale config set para cambiar la configuración de tamaño de memoria de instancia a 4,096 MB:

az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 4096

Establecimiento de recuentos de instancias siempre preparadas

Puede establecer una serie de instancias siempre listas para el Escalado por función grupos o funciones individuales, para mantener las funciones cargadas y listas para ejecutarse. Hay tres grupos especiales, como en el escalado por función:

  • http: todas las funciones desencadenadas por HTTP de la aplicación se escalan juntas en sus propias instancias.
  • durable: todas las funciones desencadenadas por Durable (orquestación, actividad, entidad) de la aplicación se escalan juntas en sus propias instancias.
  • blob: todas las funciones desencadenadas de blob (Event Grid) en la aplicación se escalan juntas en sus propias instancias.

Use http, durable o blob como nombre para la configuración del par de valores de nombre para configurar recuentos siempre listos para estos grupos. Para todas las demás funciones de la aplicación, debe configurar siempre lista para cada función individual mediante el formato function:<FUNCTION_NAME>=n.

Use el parámetro --always-ready-instances con el comando az functionapp create para definir una o varias designaciones de instancias siempre preparadas. En este ejemplo se establece el recuento de instancias siempre preparadas para todas las funciones desencadenadas por HTTP en 5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10

En este ejemplo se establece el recuento de instancias siempre preparadas para todas las funciones del desencadenador Durable en 3 y se establece el recuento de instancias siempre preparadas en 2 para una función desencadenada por Service Bus denominada function5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2

También puede modificar instancias siempre preparadas en una aplicación existente agregando o quitando designaciones de instancia o cambiando los recuentos de designación de instancias existentes.

En este ejemplo se usa el comando az functionapp scale config always-ready set para cambiar el recuento de instancias siempre preparadas a 10 para el grupo de desencadenadores HTTP:

az functionapp scale config always-ready set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --settings http=10

Para quitar instancias siempre preparadas, use el comando az functionapp scale config always-ready delete, como en este ejemplo, que quita todas las instancias siempre preparadas del grupo de desencadenadores HTTP y también una función denominada hello_world:

az functionapp scale config always-ready delete --resource-group <RESOURCE_GROUP> --name <APP_NAME> --setting-names http function:hello_world

Establecimiento de límites de simultaneidad HTTP

A menos que establezca límites específicos, los valores predeterminados de simultaneidad HTTP para las aplicaciones del plan de consumo flexible se determinan en función de la configuración del tamaño de la instancia. Para obtener más información, consulte Simultaneidad del desencadenador HTTP.

Aquí se muestra cómo puede establecer límites de simultaneidad HTTP para una aplicación existente:

Use el comando az functionapp scale config set para establecer límites de simultaneidad HTTP específicos para la aplicación, independientemente del tamaño de instancia.

az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --trigger-type http --trigger-settings perInstanceConcurrency=10

En este ejemplo se establece el nivel de simultaneidad del desencadenador HTTP en 10. Después de establecer específicamente un valor de simultaneidad HTTP, ese valor se mantiene a pesar de los cambios en la configuración de tamaño de instancia de la aplicación.

Visualización de las regiones admitidas actualmente

Para ver la lista de regiones que admiten actualmente planes de consumo flexible:

  1. Si todavía no lo ha hecho, inicie sesión en Azure:

    az login
    

    El comando az login inicia sesión en su cuenta de Azure.

  2. Use el comando az functionapp list-flexconsumption-locations para revisar la lista de regiones que admiten actualmente el plan de consumo flexible.

    az functionapp list-flexconsumption-locations --output table
    

Al crear una aplicación en Azure Portal o mediante Visual Studio Code, las regiones actualmente no admitidas se filtran de la lista de regiones.