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 basado en Kubernetes con compatibilidad integrada con la supervisión de código abierto, mTLS, Dapr y KEDA.

Importante

La compatibilidad con el hospedaje de aplicaciones de funciones en Azure Container Apps se encuentra actualmente en versión preliminar.

La integración con Container Apps permite usar el modelo de programación de funciones existente para escribir código de función en el lenguaje de programación o marco compatible con Azure Functions que prefiera. Todavía obtendrá los desencadenadores y enlaces de Functions con el escalado controlado por eventos. Container Apps usa la eficacia subyacente de Azure Kubernetes Service (AKS) a la vez que elimina la complejidad de tener que trabajar con las API de Kubernetes.

Esta integración también significa que 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. Las configuraciones de red y observabilidad se definen en el nivel de entorno de Container Apps y se aplican a todos los microservicios que se ejecutan en un entorno de Container Apps, incluida la aplicación de funciones. 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.

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 de las funciones debe ejecutarse 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 Functions 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:

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 Function en Container Apps ejecuta los recursos de contenedor con funciones en grupos de recursos administrados especialmente, lo cual ayuda a proteger la coherencia de las aplicaciones evitando la modificación o eliminación no deseada o no autorizada de recursos en el grupo administrado por parte de usuarios, grupos o principios de servicio. Este 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 requeridos por la aplicación de funciones contenedorizadas se ejecutan en este grupo de recursos administrado y cualquier otra aplicación de función que se cree en el mismo entorno usará 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 Container Apps:
    • HTTP
    • Azure Queue Storage
    • Azure Service Bus
    • Azure Event Hubs
    • Kafka*
    • Temporizador
      *El valor de protocolo de ssl no se admite cuando se hospeda en Container Apps. Use otro valor de protocolo.
  • 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.
  • 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ón appservice-kube en la CLI de Azure. Si ha publicado previamente aplicaciones en Azure Arc, ejecute az extension list y asegúrese de que appservice-kube no está instalada. Si es así, puede quitarla mediante la ejecución de az extension remove -n appservice-kube.
  • La extensión Functions Dapr también está en versión preliminar, con la ayuda proporcionada en el repositorio.

Pasos siguientes