Uso de contenedores y Azure Functions
En este artículo se muestra la compatibilidad que Azure Functions proporciona para trabajar con aplicaciones de funciones en contenedores que se ejecutan en un entorno de Azure Container Apps. La compatibilidad con el hospedaje de contenedores de aplicaciones de funciones en Container Apps se encuentra actualmente en versión preliminar. Para más información, vea Hospedaje de Azure Functions en Azure Container Apps.
En este artículo se muestra la compatibilidad que Azure Functions proporciona para trabajar con aplicaciones de funciones que se ejecutan en contenedores de Linux.
Elija el entorno de hospedaje de la aplicación de funciones contenedorizada en la parte superior del artículo.
Si quiere empezar directamente, en el siguiente artículo se muestra cómo crear la primera función que se ejecuta en un contenedor de Linux e implementar la imagen desde un registro de contenedor en un servicio de hospedaje de Azure compatible:
Creación de la primera instancia de Azure Functions contenedorizada en Azure Container Apps
Para más información sobre las implementaciones en Azure Container Apps, vea Hospedaje de Azure Functions en Azure Container Apps.
Creación de aplicaciones de funciones contenedorizadas
Functions facilita la implementación y ejecución de las aplicaciones de funciones como los contenedores de Linux que cree y mantenga. Functions mantiene un conjunto de imágenes base específicas del lenguaje que puede usar para crear las aplicaciones de funciones en 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.
Para obtener un ejemplo completo de cómo crear la aplicación de funciones local en contenedor mediante la línea de comandos y publicar la imagen en un registro de contenedor, consulte Creación de una aplicación de funciones en un contenedor local.
Creación del archivo Dockerfile
Las herramientas de Functions proporcionan una opción de Docker que genera un archivo Dockerfile con el proyecto de código de Functions. Puede usar este archivo con Docker para crear las funciones en un contenedor que derive de la imagen base correcta (idioma y versión).
La forma de crear un archivo Dockerfile depende de cómo cree el proyecto.
Al crear un proyecto de Functions con Azure Functions Core Tools, incluya la opción
--docker
al ejecutar el comandofunc init
, como en el ejemplo siguiente:func init --docker
También puede agregar un archivo Dockerfile a un proyecto existente mediante la
--docker-only
opción al ejecutar elfunc init
comando en una carpeta de proyecto existente, como en el ejemplo siguiente:func init --docker-only
Para obtener un ejemplo completo, consulte Creación de una aplicación de funciones en un contenedor local.
Creación de la aplicación de funciones en un contenedor
Con un archivo Dockerfile que haya generado mediante Core Tools en el proyecto de código, puede usar Docker para crear la aplicación de funciones en contenedor en el equipo local. El comando docker build
siguiente crea una imagen de las funciones en contenedor desde el proyecto en el directorio local:
docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .
Para obtener un ejemplo de cómo crear el contenedor, consulte Compilación de la imagen de contenedor y comprobación local.
Actualización de una imagen en el registro
Al realizar cambios en el proyecto de código de funciones o si necesita actualizar a la última imagen de base, debe recompilar el contenedor localmente y volver a publicar la imagen actualizada en el registro de contenedor elegido. El comando siguiente recompila la imagen desde la carpeta raíz con un número de versión actualizado y la inserta en el registro:
az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .
Reemplace <REGISTRY_NAME>
por la instancia de Container Registry y <LOGIN_SERVER>
por el nombre del servidor de inicio de sesión.
En este momento, debe actualizar la implementación para usar la nueva imagen. En el ejemplo siguiente se actualiza la aplicación de funciones para usar la nueva imagen:
az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
En este ejemplo, <IMAGE_NAME>
es el nombre completo de la nueva imagen con versión. Para los registros privados es necesario que proporcione un nombre de usuario y una contraseña. Almacene estas credenciales de forma segura.
También debe considerar la posibilidad de habilitar la implementación continua.
Creación de Azure Portal mediante contenedores
Al crear una aplicación de funciones en Azure Portal, puede optar por implementar la aplicación de funciones desde una imagen en un registro de contenedor. Para obtener información sobre cómo crear una aplicación de funciones de contenedor en un registro de contenedor, consulte Creación de la aplicación de funciones en un contenedor.
En los pasos siguientes se crea e implementa una aplicación de funciones en contenedor existente desde un registro de contenedor.
En el menú de Azure Portal o en la página Principal, seleccione Crear un recurso.
En la página Nuevo, seleccione Compute>Function App.
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 Esta es la suscripción en la que creará la nueva aplicación de funciones. Grupo de recursos myResourceGroup Nombre del nuevo grupo de recursos en el que creará la aplicación de funciones. Debe crear un grupo de recursos, ya que existen limitaciones conocidas a la hora de crear nuevas aplicaciones de funciones en un grupo de recursos existente. Nombre de la aplicación de función Nombre único* Nombre que identifica la nueva Function App. Los caracteres válidos son a-z
(no distingue mayúsculas de minúsculas),0-9
y-
.¿Desea implementar código o imágenes de contenedor? Imagen de contenedor Implemente una aplicación de funciones en contenedor desde un registro. Para crear una aplicación de funciones en el Registro, consulte Creación de una aplicación de funciones en un contenedor local. Región Región preferida Seleccione una región próxima a usted o a otros servicios a los que accedan las funciones.
*El nombre de la aplicación debe ser único globalmente entre todas las aplicaciones hospedadas en Azure Functions.
En Opciones y planes de hospedaje, elija Functions Premium.
Esta opción crea una aplicación de funciones hospedada por Azure Functions en el plan Premium, que admite el escalado dinámico. También puede ejecutar la opción en un plan de App Service, pero recuerde que en este tipo de plan dedicado debe administrar el escalado de la aplicación de funciones.
*El nombre de la aplicación debe ser único en el entorno de Azure Container Apps. No todas las regiones se admiten en la versión preliminar. Para obtener más información, consulte Consideraciones para el hospedaje de aplicaciones contenedoras.
En Opciones y planes de hospedaje, elija Plan de entorno de Azure Container Apps.
Esta opción crea un nuevo recurso del entorno de Azure Container Apps para hospedar el contenedor de la aplicación de funciones. Para más información, vea Hospedaje de Azure Functions en Azure Container Apps.
De forma predeterminada, el entorno se crea en un plan de consumo sin redundancia de zona, para minimizar los costos. También puede elegir un entorno de Container Apps existente. Para más información sobre los entornos, consulte Entornos de Azure Container Apps.
Acepte las opciones predeterminadas para crear una nueva cuenta de almacenamiento en la pestaña Almacenamiento y una nueva instancia de Application Insights en la pestaña Supervisión. También puede optar por usar una cuenta de almacenamiento existente o una instancia de Application Insights.
Seleccione la pestaña Implementación y anule la selección en Usar imagen de inicio rápido. Si no lo hace, la aplicación de funciones se implementará desde la imagen de base para el lenguaje de la aplicación de funciones.
Elija el tipo de imagen, público o privado. Elija Privado si usa Azure Container Registry o algún otro registro privado. Proporcione el nombre de la imagen, incluido el prefijo del Registro. Si usa un registro privado, proporcione las credenciales de autenticación del Registro de imágenes.
Seleccione Revisar y crear para revisar las selecciones de configuración de la aplicación.
En la página Revisar y crear, revise la configuración y, a continuación, seleccione Crear para aprovisionar la aplicación de funciones e implementar la imagen de contenedor desde el registro.
Uso de imágenes en Azure Functions
Cuando el contenedor de la aplicación de funciones se implementa desde un registro, Functions mantiene información sobre la imagen de origen. Use los comandos siguientes para obtener datos sobre la imagen o cambiar la imagen de implementación usada:
az functionapp config container show
: devuelve información sobre la imagen usada para la implementación.az functionapp config container set
: cambia la configuración del registro o actualiza la imagen usada para la implementación, como se muestra en el ejemplo anterior.
Configuración de la aplicación
Azure Functions permite trabajar con la configuración de la aplicación para aplicaciones de funciones contenedorizadas de la manera estándar. Para más información, vea Uso de la configuración de la aplicación.
Habilitar implementación continua en Azure
Puede habilitar Azure Functions para que actualice automáticamente la implementación de una imagen cada vez que actualice la imagen en el registro.
Utilice el siguiente comando para habilitar la implementación continua y obtener la dirección URL del webhook:
az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
El comando
az functionapp deployment container config
habilita la implementación continua y devuelve la dirección URL del webhook de implementación. Puede recuperar esta dirección URL en cualquier momento posterior mediante el comandoaz functionapp deployment container show-cd-url
.Como antes, reemplace
<APP_NAME>
por el nombre de la aplicación de funciones.Copie la dirección URL del webhook de implementación en el portapapeles.
Abra Docker Hub, inicie sesión y seleccione Repositorios en la barra de navegación. Busque y seleccione la imagen, seleccione la pestaña Webhooks, especifique un nombre de webhook, pegue la dirección URL en Dirección URL de webhook y, finalmente, seleccione Crear:
Una vez establecido el webhook, Azure Functions volverá a implementar la imagen cada vez que la actualice en Docker Hub.
Habilitación de las conexiones SSH
SSH habilita la comunicación segura entre un contenedor y un cliente. Con SSH habilitado, puede conectarse al contenedor mediante las herramientas avanzadas de App Service (Kudu). Para facilitar la conexión al contenedor mediante SSH, Azure Functions proporciona una imagen base que ya tiene SSH habilitado. Solo necesita editar el archivo de Dockerfile y, después, recompilar y volver a implementar la imagen. Después, puede conectar el contenedor mediante Herramientas avanzadas (Kudu).
En el Dockerfile, anexe la cadena
-appservice
a la imagen base en la instrucciónFROM
, como se muestra en el ejemplo siguiente:FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
En este ejemplo se usa la versión habilitada para SSH de la imagen base Node.js versión 18. Visite los repositorios de imágenes base de Azure Functions para comprobar que usa la versión más reciente de la imagen base habilitada para SSH.
Recompile la imagen mediante el comando
docker build
y sustituya<DOCKER_ID>
por el identificador de cuenta de Docker Hub, como en el ejemplo siguiente.docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
Inserte la imagen actualizada en Docker Hub, lo cual ahora debe tardar mucho menos tiempo que la primera vez ya que solo se cargarán los segmentos actualizados de la imagen.
docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
Azure Functions vuelve a implementar automáticamente la imagen en la aplicación de funciones. El proceso se realiza en menos de un minuto.
En un explorador, abra
https://<app_name>.scm.azurewebsites.net/
y reemplace<app_name>
por su nombre único. Esta dirección URL es el punto de conexión de Herramientas avanzadas (KUDU) para el contenedor de la aplicación de funciones.Inicie sesión en su cuenta de Azure y, después, seleccione SSH para establecer una conexión con el contenedor. La conexión puede tardar unos minutos si Azure todavía está actualizando la imagen de contenedor.
Una vez establecida la conexión con el contenedor, ejecute el comando
top
para ver los procesos que se están ejecutando actualmente.
Pasos siguientes
En los artículos siguientes se proporciona más información sobre la implementación y administración de contenedores: