Hospedaje de Azure Functions en Azure Container Apps
Azure Functions proporciona compatibilidad integrada para desarrollar, implementar y administrar aplicaciones de funciones contenedorizadas en Azure Container Apps. Use Azure Container Apps para hospedar los contenedores de aplicaciones de funciones cuando necesite ejecutar las funciones controladas por eventos en Azure en el mismo entorno que otros microservicios, API, sitios web, flujos de trabajo o programas hospedados en contenedores. El hospedaje de Container Apps permite ejecutar las funciones en un entorno totalmente administrado basado en Kubernetes con compatibilidad integrada con la supervisión de código abierto, mTLS, Dapr y Escalado automático controlado por eventos de Kubernetes (KEDA).
Puede escribir el código de función en cualquier pila de lenguaje compatible con Functions. Puede usar los mismos desencadenadores y enlaces de Functions con el escalado controlado por eventos. También puede usar las herramientas cliente de Functions existentes y Azure Portal para crear contenedores, implementar contenedores de aplicaciones de funciones en Container Apps y configurar la implementación continua.
La integración de Container Apps también significa que las configuraciones de red y observabilidad, que se definen en el nivel de entorno de Container Apps, se aplican a la aplicación de funciones tal como lo hacen a todos los microservicios que se ejecutan en un entorno de Container Apps. También obtiene las otras funcionalidades nativas de la nube de Container Apps, como KEDA, Dapr, Envoy. Todavía puede usar Application Insights para supervisar las ejecuciones de funciones, y la aplicación de funciones puede acceder a los mismos recursos de red virtual proporcionados por el entorno.
Para obtener información general sobre las opciones de hospedaje de contenedores para Azure Functions, consulte Compatibilidad con contenedores de Linux en Azure Functions.
Hospedaje y perfiles de carga de trabajo
Hay dos planes de hospedaje principales para Container Apps, un plan de Consumo sin servidor y un plan Dedicado, que usa perfiles de carga de trabajo para controlar mejor los recursos de implementación. Un perfil de carga de trabajo determina la cantidad de recursos de proceso y memoria disponibles para las aplicaciones de contenedor implementadas en un entorno. Estos perfiles están configurados para adaptarse a las diferentes necesidades de las aplicaciones.
El perfil de carga de trabajo de consumo es el perfil predeterminado agregado a cada tipo de entorno de perfiles de carga de trabajo. Puede agregar perfiles de carga de trabajo dedicados a su entorno mientras crea un entorno o después de crearlo. Para obtener más información sobre los perfiles de carga de trabajo, consulte Perfiles de carga de trabajo en Azure Container Apps.
El hospedaje de Container Apps de aplicaciones de funciones contenedorizadas se admite en todas las regiones de que admiten Container Apps.
Si la aplicación no tiene requisitos de hardware específicos, puede ejecutar el entorno en un plan de Consumo o en un plan Dedicado mediante el perfil de carga de trabajo de consumo predeterminado. Al ejecutar funciones en Container Apps, solo se le cobrará por el uso de Container Apps. Para más información, vea la página de precios de Azure Container Apps.
Azure Functions en Azure Container Apps admite el hospedaje habilitado para GPU en el plan Dedicado con perfiles de carga de trabajo.
Para aprender a crear e implementar un contenedor de aplicaciones de funciones en Container Apps en el plan de Consumo predeterminado, vea Creación de las primeras funciones contenedorizadas en Azure Container Apps.
Para obtener información sobre cómo crear un entorno de Container Apps con perfiles de carga de trabajo e implementar un contenedor de aplicaciones de funciones en una carga de trabajo específica, consulte Perfiles de carga de trabajo en Container Apps.
Funciones en contenedores
Para usar el hospedaje de Container Apps, el código debe ejecutarse en una aplicación de funciones en un contenedor de Linux que el usuario cree y mantenga. Functions mantiene un conjunto de imágenes base específicas del lenguaje que puede usar para generar las aplicaciones de funciones contenedorizadas.
Al crear un proyecto de código mediante Azure Functions Core Tools e incluir la opción --docker
, Core Tools genera el Dockerfile con la imagen base correcta, que se puede usar en un punto inicial para crear el contenedor.
Importante
Al crear contenedores propios, tendrá que mantener actualizada la imagen base del contenedor con la imagen base compatible más reciente. Las imágenes base admitidas para Azure Functions son específicas del lenguaje y se encuentran en los repositorios de imágenes base de Azure Functions.
El equipo de Functions se compromete a publicar actualizaciones mensuales de estas imágenes base. Las actualizaciones regulares incluyen las actualizaciones de versión secundaria y las correcciones de seguridad más recientes tanto del entorno de ejecución de Functions como de los lenguajes. Debería actualizar periódicamente el contenedor desde la imagen base más reciente y volver a implementar desde la versión actualizada del contenedor.
Al realizar cambios en el código de las funciones, debe volver a generar y volver a publicar la imagen de contenedor. Para más información, vea Actualización de una imagen en el registro.
Opciones de implementación
Azure Functions actualmente admite los siguientes métodos de implementación de una aplicación de funciones contenedorizadas en Azure Container Apps:
- Apache Maven
- Plantillas de ARM
- CLI de Azure
- Azure Developer CLI (azd)
- Azure Functions Core Tools
- Tareas de Azure Pipelines
- Azure Portal
- Archivos de Bicep
- Acciones de GitHub
- Visual Studio Code
Integración de la red virtual
Al hospedar las aplicaciones de función en un entorno de Container Apps, las funciones pueden aprovechar las redes virtuales accesibles interna y externamente. Para más información sobre las redes de entorno, consulte Redes en el entorno de Azure Container Apps.
Configuración de reglas de escala
Azure Functions en Container Apps está diseñado para configurar los parámetros y reglas de escala según el destino del evento. No es necesario preocuparse por configurar los objetos escalados de KEDA. Todavía puede establecer el recuento mínimo y máximo de réplicas al crear o modificar la aplicación de funciones. El siguiente comando de la CLI de Azure establece el recuento mínimo y máximo de réplicas al crear una aplicación de funciones en un entorno de Container Apps desde una instancia de Azure Container Registry:
az functionapp create --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1 --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --image <LOGIN_SERVER>/azurefunctionsimage:v1 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> --registry-server <LOGIN_SERVER>
El siguiente comando establece el mismo recuento mínimo y máximo de réplicas en una aplicación de funciones existente:
az functionapp config container set --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1
Grupos de recursos administrados
Azure Functions en Container Apps ejecuta los recursos de la aplicación de funciones en contenedor en grupos de recursos administrados especialmente. Estos grupos de recursos administrados ayudan a proteger la coherencia de las aplicaciones evitando la modificación o eliminación no deseada o no autorizada de los recursos del grupo administrado, incluso por principios de servicio.
Un grupo de recursos administrado se crea la primera vez que se crean recursos de la aplicación de funciones en un entorno de Container Apps. Los recursos de Container Apps necesarios para la ejecución de la aplicación de funciones en contenedor en este grupo de recursos administrado. Cualquier otra aplicación de funciones que cree en el mismo entorno usa este grupo existente.
Un grupo de recursos administrado se elimina automáticamente después de eliminarse todos los recursos de contenedor de la aplicación de funciones del entorno. Mientras el grupo de recursos administrado esté visible, los intentos de modificar o eliminar el grupo de recursos administrado generarán un error. Para eliminar un grupo de recursos administrado de un entorno, elimine todos los recursos de contenedor de la aplicación de funciones y el grupo se eliminará automáticamente.
Si tiene algún problema con estos grupos de recursos administrados, debe ponerse en contacto con los representantes de soporte técnico.
Consideraciones para el hospedaje de Container Apps
Tenga en cuenta las consideraciones siguientes al implementar los contenedores de aplicaciones de funciones en Container Apps:
- Aunque se pueden usar todos los desencadenadores, solo los siguientes se pueden escalar dinámicamente (desde cero instancias) al ejecutarse en un entorno de Container Apps:
- Azure Event Grid
- Azure Event Hubs
- Azure Blob Storage (basado en eventos)
- Azure Queue Storage
- Azure Service Bus
- Durable Functions (proveedor de almacenamiento MSSQL)
- HTTP
- Kafka
- Temporizador
- Estas limitaciones se aplican a los desencadenadores de Kafka:
- El valor de protocolo de
ssl
no se admite cuando se hospeda en Container Apps. Use otro valor de protocolo. - Para que un desencadenador de Kafka se escale dinámicamente cuando está conectado a Event Hubs, la propiedad
username
debe resolverse en una configuración de aplicación que contenga el valor real del nombre de usuario. Cuando se usa el valor$ConnectionString
predeterminado, el desencadenador de Kafka no puede hacer que la aplicación se escale dinámicamente.
- El valor de protocolo de
- En el caso de las definiciones de directiva integradas de Container Apps, actualmente solo se aplican directivas de nivel de entorno a contenedores de Azure Functions.
- Puede usar identidades administradas para estas conexiones:
- Actualmente no se puede mover una implementación de aplicación de funciones hospedada de Container Apps entre grupos de recursos o entre suscripciones. En su lugar, tendría que volver a crear la implementación de aplicaciones en contenedor existente en un nuevo grupo de recursos, suscripción o región.
- Al usar Container Apps, no tiene acceso directo a las API de Kubernetes de nivel inferior.
- La extensión
containerapp
entra en conflicto con la extensiónappservice-kube
en la CLI de Azure. Si ha publicado previamente aplicaciones en Azure Arc, ejecuteaz extension list
y asegúrese de queappservice-kube
no está instalada. Si es así, puede quitarla mediante la ejecución deaz extension remove -n appservice-kube
.