Compartir vía


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. 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 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 comando func 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 el func 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 Functions 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 existente para usar la nueva imagen. Puede actualizar la aplicación de funciones para usar la nueva imagen mediante la CLI de Azure o en Azure Portal:

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.

  1. En el menú o la página Inicio de Azure Portal, seleccione Crear un recurso.

  2. En la página Nuevo, seleccione Compute>Function App.

  3. En Seleccione una opción de hospedaje, elija plan Premium>Seleccionar.

    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.

  4. 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.
    Plan de Linux Nuevo plan (valor predeterminado) Crea un nuevo plan Premium para hospedar la aplicación. También puede elegir un plan Premium existente.
    Plan de precios Elastic Premium EP1 EP1 es el plan más asequible. Puede elegir un plan más grande si es necesario.
    Redundancia de zona Deshabilitado No necesita esta característica en una aplicación que no sea de producción.

    *El nombre de aplicación debe ser único globalmente entre todas las aplicaciones hospedadas de Azure Functions.

  5. 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.

  6. Seleccione Revisar y crear para revisar las selecciones de configuración de la aplicación.

  7. En la página Revisar y crear, revise la configuración y, a continuación, seleccione Crear para aprovisionar la aplicación de funciones mediante una imagen base predeterminada.

  8. Una vez creado el recurso de la aplicación de funciones, seleccione Ir al recurso y, en la página de la aplicación de funciones, seleccione Centro de implementación.

  9. En el Centro de implementación, puede conectar el registro de contenedor como origen de la imagen. También puede habilitar Acciones de GitHub o Azure Pipelines para una implementación continua más sólida de actualizaciones en el contenedor en el registro.

Creación de Azure Portal mediante contenedores

Al crear una aplicación de funciones hospedada en Container Apps 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.

  1. En el menú o la página Inicio de Azure Portal, seleccione Crear un recurso.

  2. En la página Nuevo, seleccione Compute>Function App.

  3. En Seleccione una opción de hospedaje, elija entorno de Container Apps>Seleccionar.

  4. 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 -.
    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 en el entorno de Azure Container Apps.

  5. Todavía en la página Aspectos básicos, acepte el nuevo entorno sugerido para el entorno de Azure Container Apps. Para minimizar los costos, el nuevo entorno predeterminado se crea en Consumo y dedicado con el perfil de carga de trabajo predeterminado y sin redundancia de zona. Para más información, vea Hospedaje de Azure Functions en Azure Container Apps.

    También puede optar por usar un entorno de Container Apps existente. Para crear un entorno personalizado, seleccione Crear nuevo. En la página Crear entorno de Container Apps, puede agregar perfiles de carga de trabajo no predeterminados o habilitar la redundancia de zona. Para más información sobre los entornos, consulte Entornos de Azure Container Apps.

  6. Seleccione la pestaña Implementación y anule la selección en Usar imagen de inicio rápido. De lo contrario, la aplicación de funciones se implementa desde la imagen base del lenguaje de la aplicación de funciones.

  7. 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. La configuración Pública solo admite imágenes almacenadas públicamente en Docker Hub.

  8. En asignación de recursos de contenedor, seleccione el número deseado de núcleos de CPU y memoria disponible. Si su entorno tiene otros perfiles de carga de trabajo añadidos, puede seleccionar un perfil de carga de trabajo no predeterminado. Las opciones de esta página afectan al costo de hospedar la aplicación. Consulte la página de precios de Container Apps para calcular los costos potenciales.

  9. Seleccione Revisar y crear para revisar las selecciones de configuración de la aplicación.

  10. 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:

Perfiles de carga de trabajo de Container Apps

Los perfiles de carga de trabajo son características de Container Apps que permiten controlar mejor los recursos de implementación. Azure Functions en Azure Container Apps también admite perfiles de carga de trabajo. Para más información, consulte Perfiles de carga de trabajo en Azure Container Apps.

También puede establecer la cantidad de recursos de CPU y memoria asignados a la aplicación.

Puede crear y administrar perfiles de carga de trabajo y asignaciones de recursos mediante la CLI de Azure o en Azure Portal.

Los perfiles de carga de trabajo se habilitan al crear el entorno de la aplicación de contenedor. Para obtener un ejemplo, consulte Crear una aplicación de contenedor en un perfil.

Puede agregar, editar y eliminar perfiles en su entorno. Para obtener un ejemplo, vea Agregar perfiles.

Al crear una aplicación de funciones en contenedor en un entorno con perfiles de carga de trabajo habilitados, también debe especificar el perfil en el que se va a ejecutar. Puede especificar el perfil con el parámetro --workload-profile-name del comando az functionapp create, como en este ejemplo:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI> --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

En el comando az functionapp create, el parámetro --environment especifica el entorno de Container Apps y el parámetro --image la imagen que se va a usar para la aplicación de funciones. En el ejemplo siguiente, reemplace <STORAGE_NAME> por el nombre que utilizó en la sección anterior para la cuenta de almacenamiento. Además, reemplace <APP_NAME> por un nombre único global adecuado para usted.

Para establecer los recursos asignados a la aplicación, reemplace <CPU_COUNT> por el número deseado de CPU virtuales, con un mínimo de 0,5 hasta el máximo permitido por el perfil. Para <MEMORY_SIZE>, elija una cantidad de memoria dedicada de 1 GB hasta el máximo permitido por el perfil.

Puede usar el comando az functionapp container set para administrar los recursos asignados y el perfil de carga de trabajo que usa la aplicación.

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

Configuración de 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

Al hospedar la aplicación de funciones en contenedor en Azure Container Apps, hay dos maneras de configurar la implementación continua desde un repositorio de código fuente:

Actualmente no puede implementar contenedores continuamente en función de los cambios de imagen en un registro de contenedor. En su lugar, debe usar estas canalizaciones de implementación continua basadas en código fuente.

Habilitar implementación continua en Azure

Importante

Actualmente no se admite la implementación basada en Webhook al ejecutar el contenedor en un plan Elastic Premium. Si necesita usar el método de implementación continua descrito en esta sección, implemente el contenedor en un plan de App Service. Cuando se ejecuta en un plan de Elastic Premium, debe reiniciar manualmente la aplicación cada vez que realice actualizaciones en el contenedor en el repositorio.

También puede configurar la implementación continua desde un repositorio de código fuente mediante Azure Pipelines o Acciones de GitHub.

Puede habilitar Azure Functions para que actualice automáticamente la implementación de una imagen cada vez que actualice la imagen en el registro.

  1. 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 comando az functionapp deployment container show-cd-url.

    Como antes, reemplace <APP_NAME> por el nombre de la aplicación de funciones.

  2. Copie la dirección URL del webhook de implementación en el portapapeles.

  3. 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:

    Captura de pantalla que muestra cómo agregar el webhook en la ventana de su instancia de Docker Hub.

  4. 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).

  1. En el Dockerfile, anexe la cadena -appservice a la imagen base en la instrucción FROM, 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.

  2. 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 .
    
  3. 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
    
  4. Azure Functions vuelve a implementar automáticamente la imagen en la aplicación de funciones. El proceso se realiza en menos de un minuto.

  5. 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.

  6. 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.

  7. Una vez establecida la conexión con el contenedor, ejecute el comando top para ver los procesos que se están ejecutando actualmente.

    Captura de pantalla del comando top de Linux en ejecución en una sesión SSH.

En los artículos siguientes se proporciona más información sobre la implementación y administración de contenedores: