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.
Importante
El Plan de Consumo Flex está actualmente en versión preliminar.
Requisitos previos
Una cuenta de Azure con una suscripción activa. Si no la tiene, puede crear una cuenta gratis.
CLI de Azure: se usa para crear y administrar recursos en Azure. Al usar la CLI de Azure en el equipo local, asegúrese de usar la versión 2.60.0 o una versión posterior. También puede usar Azure Cloud Shell, que tiene la versión correcta de la CLI de Azure.
Visual Studio Code: se usa para crear y desarrollar aplicaciones, crear recursos de Azure e implementar proyectos de código en Azure. Al usar Visual Studio Code, asegúrese de instalar también la extensión de Azure Functions más reciente. También puede instalar el paquete de extensión Azure Tools.
Aunque no es necesario crear una aplicación de plan de consumo flexible, necesita un proyecto de código para poder implementar y validar una nueva aplicación de funciones. Complete la primera parte de uno de estos artículos de inicio rápido, donde crea un proyecto de código con una función desencadenada por HTTP:
- Creación de un proyecto de Azure Functions desde la línea de comandos
- Creación de un proyecto de Azure Functions en Visual Studio Code
Para crear una aplicación en un nuevo plan de consumo flexible durante una implementación de Maven, debe crear el proyecto de aplicación local y, después, actualizar el archivo pom.xml del proyecto. Para obtener más información, consulte Creación de una aplicación Java de consumo flexible mediante Maven.
Vuelva a este artículo después de crear y ejecutar el proyecto local, pero antes de que se le pida que cree recursos de Azure. Creará la aplicación de funciones y otros recursos de Azure en la sección siguiente.
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.
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.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
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.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.
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 comandoaz 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. La versión específica del entorno de ejecución del lenguaje usada es una que se admite actualmente en la versión preliminar.
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.
En la paleta de comandos, escriba y seleccione Azure Functions: Implementar en la aplicación de funciones.
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.
Cuando se complete la 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.
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.
Cree un proyecto de código Java completando la primera parte de uno de los siguientes artículos de inicio rápido:
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>
a1.34.0
.En la sección
<plugin>.<configuration>
deazure-functions-maven-plugin
, agregue o quite la marca de comentario del elemento<pricingTier>
de la siguiente manera:<pricingTier>Flex Consumption</pricingTier>
(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 es2048
.<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.
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.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
.
Crear la red virtual y la subred, si aún no lo ha hecho.
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.
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:
- Consumo flexible: HTTP a Event Hubs mediante la integración con red virtual
- Consumo flexible: desencadenado desde Service Bus mediante la integración con red virtual
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
Durante la versión preliminar, solo puede realizar ejecuciones en el plan de consumo flexible en regiones determinadas. Para ver la lista de regiones que admiten actualmente planes de consumo flexible:
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.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.