Ejecución de las funciones desde un archivo de paquete en Azure

En Azure, puede ejecutar las funciones directamente desde un archivo del paquete de implementación de la aplicación de función. La otra opción consiste en implementar los archivos en el directorio d:\home\site\wwwroot (Windows) o /home/site/wwwroot (Linux) de la aplicación de funciones.

En este artículo se describen las ventajas de ejecutar las funciones desde un paquete. También se muestra cómo habilitar esta funcionalidad en la aplicación de función.

Ventajas de la ejecución desde un archivo de paquete

Son varias las ventajas de ejecutar las funciones desde un archivo de paquete:

  • Se reduce el riesgo de problemas de bloqueo de copia de archivos.
  • Se pueden implementar en una aplicación de producción (con reinicio).
  • Puede estar seguro de los archivos que se ejecutan en la aplicación.
  • Mejora el rendimiento de las implementaciones de Azure Resource Manager.
  • Puede reducir los tiempos de arranque en frío, especialmente para las funciones de JavaScript con árboles de paquete de npm grandes.

Para más información, consulte este anuncio.

Ejecución de las funciones desde un paquete

Para permitir la ejecución de la aplicación de funciones desde un paquete, solo tiene que agregar un valor WEBSITE_RUN_FROM_PACKAGE a la configuración de la aplicación de funciones. El valor WEBSITE_RUN_FROM_PACKAGE puede tener uno de los siguientes valores:

Value Descripción
1 Indica que la aplicación de funciones se ejecuta desde un archivo de paquete local implementado en la carpeta d:\home\data\SitePackages (Windows) o /home/data/SitePackages (Linux) de la aplicación de funciones.
<URL> Establece una dirección URL que es la ubicación remota del archivo de paquete específico que quiere ejecutar. Necesario para las aplicaciones de funciones que se ejecutan en Linux en un plan de consumo.

En la tabla siguiente se indican las opciones recomendadas de WEBSITE_RUN_FROM_PACKAGE para la implementación en un sistema operativo y un plan de hospedaje específicos:

Plan de hospedaje Windows Linux
Consumo 1 es muy recomendado Solo se admite <URL>.
Premium Se recomienda1 . Se recomienda1 .
Dedicado Se recomienda1 . Se recomienda1 .

Consideraciones generales

  • El archivo de paquete debe tener formato .zip. Actualmente no se admiten los formatos tar ni gzip.
  • Se recomienda la implementación de archivos ZIP.
  • Al implementar la aplicación de función en Windows, debe establecer WEBSITE_RUN_FROM_PACKAGE en 1 y publicar con implementación de un archivo zip.
  • Cuando se ejecuta desde un paquete, la carpeta wwwroot se convierte en de solo lectura y recibirá un error al escribir archivos en este directorio. Los archivos también son de solo lectura en Azure Portal.
  • El tamaño máximo de un archivo de paquete de implementación es actualmente de 1 GB.
  • No se puede usar la memoria caché local cuando se ejecuta desde un paquete de implementación.
  • Si el proyecto necesita usar la compilación remota, no use la configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE. En su lugar, agregue la configuración de la aplicación de personalización de implementación de SCM_DO_BUILD_DURING_DEPLOYMENT=true. Para Linux, agregue también la configuración ENABLE_ORYX_BUILD=true. Para más información, consulte Compilación remota.

Nota

WEBSITE_RUN_FROM_PACKAGE no funciona con MSDeploy como se describe aquí. Recibirá un error durante la implementación, como ARM-MSDeploy Deploy Failed. Cambie /MSDeploy a /ZipDeploy y se resolverá este error.

Incorporación del valor WEBSITE_RUN_FROM_PACKAGE

Hay varias maneras de agregar, actualizar y eliminar opciones de configuración de la aplicación de función:

Para aplicar los cambios realizados en la configuración de la aplicación de funciones, es necesario reiniciar la aplicación de funciones.

Uso de WEBSITE_RUN_FROM_PACKAGE = 1

En esta sección se proporciona información sobre cómo ejecutar la aplicación de funciones desde un archivo de paquete local.

Consideraciones para implementar desde un paquete local

  • El uso de un paquete local es la opción recomendada para ejecutarse desde el paquete de implementación, excepto en Linux hospedado en un plan de consumo.
  • La implementación zip es la manera recomendada de cargar un paquete de implementación en el sitio.
  • Si no usa la implementación zip, asegúrese de que la carpeeta d:\home\data\SitePackages (Windows) /home/data/SitePackages o (Linux) tenga un archivo denominado packagename.txt. Este archivo contiene solo el nombre, sin ningún espacio en blanco, del archivo de paquete de esta carpeta que se está ejecutando actualmente.

Integración con la implementación de archivos ZIP

La implementación de archivos ZIP es una característica de Azure App Service que le permite implementar su proyecto de aplicación de funciones en el directorio wwwroot. El proyecto se empaqueta como un archivo de implementación .zip. Se pueden usar las mismas API para implementar el paquete en la carpeta d:\home\data\SitePackages (Windows) o /home/data/SitePackages (Linux).

Con el valor de configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE de 1, las API de implementación de archivos ZIP copian el paquete en la carpeta d:\home\data\SitePackages (Windows) o /home/data/SitePackages (Linux) en lugar de extraer los archivos en d:\home\site\wwwroot (Windows) o /home/site/wwwroot (Linux). También se crea el archivo packagename.txt. Después de un reinicio, el paquete se monta en wwwroot como un sistema de archivos de solo lectura. Para más información sobre la implementación de archivos ZIP, consulte Implementación para insertar archivos ZIP en Azure Functions.

Nota

Cuando se produce una implementación, se desencadena un reinicio de la aplicación de funciones. Las ejecuciones de funciones en curso durante la implementación finalizan. Revise Mejora del rendimiento y confiabilidad de Azure Functions para aprender a escribir funciones sin estado y defensivas.

Uso de WEBSITE_RUN_FROM_PACKAGE = URL

En esta sección se proporciona información sobre cómo ejecutar la aplicación de funciones desde un paquete implementado en un punto de conexión de dirección URL. Esta opción es la única que se admite para ejecutarse desde un paquete en Linux hospedado en un plan de consumo.

Consideraciones para implementar desde una dirección URL

  • Al ejecutar una aplicación de funciones en Windows, la configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE = <URL> proporciona un peor rendimiento de arranque en frío y no se recomienda.
  • Al especificar una dirección URL, también debe sincronizar desencadenadores manualmente tras publicar un paquete actualizado.
  • El tiempo de ejecución de Functions debe tener permisos para acceder a la dirección URL del paquete.
  • No debe implementar el paquete en Azure Blob Storage como un blob público. En su lugar, debe usar un contenedor de almacenamiento privado con una Firma de acceso compartido (SAS) o bien una identidad administrada para permitir que el entorno de ejecución de Functions acceda al paquete.
  • Debe mantener las direcciones URL de SAS usadas para la implementación. Cuando una SAS expira, el paquete ya no se puede implementar. En este caso, debe generar una nueva SAS y actualizar la configuración en la aplicación de funciones. Puede eliminar esta carga de administración mediante una identidad administrada.
  • Al ejecutar en un plan Premium, asegúrese de eliminar los arranques en frío.
  • Cuando se ejecute en un plan dedicado, asegúrese de que ha habilitado Always On.
  • Puede usar el Explorador de Azure Storage para cargar archivos de paquete en los contenedores de blobs de la cuenta de almacenamiento.

Carga manual de un paquete a un almacenamiento de blobs

Para implementar un paquete comprimido cuando se usa la opción de dirección URL, debe crear un paquete de implementación comprimido en ZIP y cargarlo en el destino. Este ejemplo se implementa un contenedor en el almacenamiento de blobs.

  1. Cree un paquete ZIP para el proyecto con la utilidad que prefiera.

  2. En Azure Portal, busque el nombre de la cuenta de almacenamiento o vaya a las cuentas de almacenamiento para encontrarla.

  3. En la cuenta de almacenamiento, en Almacenamiento de datos, seleccione Contenedores.

  4. Seleccione + Contenedor para crear un contenedor de Blob Storage en la cuenta.

  5. En la página Nuevo contenedor, rellene el valor de Nombre (por ejemplo, "implementaciones"), asegúrese de que Nivel de acceso público sea Privado y seleccione Crear.

  6. Seleccione el contenedor que creó, elija Cargar, busque la ubicación del archivo ZIP que creó con el proyecto y seleccione Cargar.

  7. Una vez completada la carga, elija el archivo de blob cargado y copie la dirección URL. Puede que tenga que generar una dirección URL de SAS si no usa una identidad.

  8. Busque la aplicación de funciones o vaya a la página Aplicación de funciones para encontrarla.

  9. En la aplicación de funciones, en Configuración, seleccione Configuraciones.

  10. En la pestaña Configuración de la aplicación, seleccione + Nueva configuración de la aplicación.

  11. Escriba el valor WEBSITE_RUN_FROM_PACKAGE en Nombre y, en Valor, pegue la dirección URL del paquete de Blob Storage.

  12. Seleccione Aceptar. A continuación, seleccione Guardar>Continuar para guardar la configuración y reiniciar la aplicación.

Ahora puede ejecutar la función en Azure para comprobar que la implementación se ha realizado correctamente mediante el archivo ZIP del paquete de implementación.

A continuación se muestra una aplicación de función configurada para ejecutarse desde un archivo .zip que se hospeda en Azure Blob Storage:

WEBSITE_RUN_FROM_ZIP app setting

Captura de un paquete de Azure Blob Storage mediante una identidad administrada

Azure Blob Storage se puede configurar para autorizar solicitudes con Microsoft Entra ID. Esto significa que, en lugar de generar una clave SAS con una fecha de expiración, puede confiar en la identidad administrada de la aplicación. De manera predeterminada, se usará la identidad asignada por el sistema de la aplicación. Si desea especificar una identidad asignada por el usuario, puede establecer la configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID en el identificador de recurso de esa identidad. El valor también puede aceptar "SystemAssigned" como valor, aunque esto es lo mismo que omitir la configuración por completo.

Para habilitar la captura del paquete mediante la identidad:

  1. Asegúrese de que el blob esté configurado para acceso privado.

  2. Conceda a la identidad el rol Lector de datos de Storage Blob con ámbito en el blob del paquete. Consulte Asignación de un rol de Azure para acceder a datos de blobs para obtener información sobre la creación de la asignación de roles.

  3. Establezca la configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE en la dirección URL del blob del paquete. Probablemente tendrá el formato "https://{nombre-de-la-cuenta-de-almacenamiento}.blob.core.windows.net/{nombre-del-contenedor}/{ruta-de-acceso-al-paquete}" o similar.

Pasos siguientes