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 c:\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).
- Comprueba los archivos que se ejecutan en la aplicación.
- Mejora el rendimiento de las implementaciones de Azure Resource Manager.
- Reduce 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
Las aplicaciones de funciones del plan de hospedaje Consumo flexible se ejecutan desde un paquete de manera predeterminada. No es necesario realizar ninguna configuración especial.
Para permitir que su aplicación de funciones se ejecute desde un paquete en los planes de hospedaje Consumo, Elástico Premium y Dedicado (App Service), agregue una configuración de aplicación WEBSITE_RUN_FROM_PACKAGE
a su aplicación de funciones. La configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE
puede tener uno de los siguientes valores:
Valor | Descripción |
---|---|
1 |
Indica que la aplicación de funciones se ejecuta desde un archivo de paquete local implementado en la carpeta c:\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 los valores recomendados 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
- No agregue la configuración de la aplicación
WEBSITE_RUN_FROM_PACKAGE
a las aplicaciones del plan Consumo flexible. - El archivo de paquete debe tener formato .zip. No se admiten los formatos Tar y 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
en1
y publicar con implementación de un archivo zip. - Cuando se ejecuta desde un paquete, la carpeta
wwwroot
es de solo lectura y recibe un error si escribe 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 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 deSCM_DO_BUILD_DURING_DEPLOYMENT=true
. Para Linux, agregue también la configuraciónENABLE_ORYX_BUILD=true
. Para obtener más información, consulte Compilación remota.
Nota:
La configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE
no funciona con MSDeploy como se describe en Diferencias entre MSDeploy y ZipDeploy. Recibirá un error durante la implementación, como ARM-MSDeploy Deploy Failed
. Para resolver este error, cambie /MSDeploy
a /ZipDeploy
.
Agregar la configuración de 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.
Creación del archivo ZIP
El archivo ZIP que implemente debe contener todos los archivos necesarios para ejecutar la aplicación de funciones. Puede crear manualmente un archivo ZIP desde el contenido de una carpeta de proyecto de Functions mediante la funcionalidad de compresión de .zip integrada o herramientas de terceros.
El archivo debe incluir el archivo host.json en la raíz de la carpeta extraída. La pila de lenguaje seleccionada para la aplicación de funciones crea requisitos adicionales:
- .NET (modelo de trabajo aislado)
- .NET (modelo en proceso)
- Java
- JavaScript
- TypeScript
- PowerShell
- Python
Importante
En el caso de los lenguajes que generan la salida compilada para la implementación, asegúrese de comprimir el contenido de la carpeta de salida que planea publicar y no toda la carpeta del proyecto. Cuando Functions extrae el contenido del archivo ZIP, el archivo host.json
debe existir en la raíz del paquete.
Usar 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 en el sitio es la opción recomendada para ejecutarse desde el paquete de implementación, excepto cuando se ejecuta 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
c:\home\data\SitePackages
(Windows)/home/data/SitePackages
o (Linux) tenga un archivo denominadopackagename.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 c:\home\data\SitePackages
(Windows) o /home/data/SitePackages
(Linux).
Cuando establece el valor de configuración de la aplicación WEBSITE_RUN_FROM_PACKAGE
en 1
, las API de implementación zip copian su paquete en la carpeta c:\home\data\SitePackages
(Windows) o /home/data/SitePackages
(Linux) en lugar de extraer los archivos en c:\home\site\wwwroot
(Windows) o /home/site/wwwroot
(Linux). También se crea el archivo packagename.txt
. Una vez reiniciada automáticamente la aplicación de funciones, 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. Para obtener información sobre cómo escribir funciones defensivas y sin estado, establezca Escribir funciones para que sean sin estado.
Usar WEBSITE_RUN_FROM_PACKAGE = DIRECCIÓN 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 admitida para ejecutarse desde un paquete hospedado en Linux con un plan de consumo. Esta opción no se admite en el plan Consumo flexible.
Consideraciones para implementar desde una dirección URL
- No establezca
WEBSITE_RUN_FROM_PACKAGE = <URL>
en las aplicaciones del plan Consumo flexible. Esta opción no se admite. - Las aplicaciones de funciones que se ejecutan en Windows experimentan un ligero aumento en tiempo de inicio en frío cuando el paquete de aplicación se implementa en un punto de conexión de dirección URL a través de
WEBSITE_RUN_FROM_PACKAGE = <URL>
. - 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 implemente 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 usar 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 ejecuta en un plan dedicado, asegúrese de habilitar 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. El procedimiento siguiente se implementa en un contenedor en Blob Storage:
Cree un paquete ZIP para el proyecto con la utilidad que prefiera.
En Azure Portal, busque el nombre de su cuenta de almacenamiento o búsquela en la lista de cuentas de almacenamiento.
En la cuenta de almacenamiento, en Almacenamiento de datos, seleccione Contenedores.
Seleccione + Contenedor para crear un contenedor de Blob Storage en la cuenta.
En la página Nuevo contenedor, proporcione un Nombre (por ejemplo, implementaciones), asegúrese de que el Nivel de acceso anónimo es Privado, y después seleccione Crear.
Seleccione el contenedor que creó, seleccione Cargar, vaya a la ubicación del archivo .zip que creó con su proyecto y después seleccione Cargar.
Una vez completada la carga, elija el archivo de blob cargado y copie la dirección URL. Si no está usando una identidad administrada, puede que necesite generar una URL de SAS.
Busque la aplicación de funciones o vaya a la página Aplicación de funciones para encontrarla.
En la aplicación de funciones, expanda Configuracióny, después, seleccione Variables de entorno.
En la pestaña Configuración de la aplicación, seleccione + Agregar.
Escriba el valor
WEBSITE_RUN_FROM_PACKAGE
para el Nombre, y pegue la URL de su paquete en Blob Storage para el Valor.Seleccione Aplicar y después seleccione Aplicar y Confirmar para guardar la configuración y reiniciar la aplicación de funciones.
Ahora puede ejecutar su función en Azure para verificar que la implementación del paquete de implementación del archivo .zip se ha realizado correctamente.
Captura de un paquete de Azure Blob Storage mediante una identidad administrada
Puede configurar Azure Blob Storage para autorizar solicitudes con Microsoft Entra ID. Esta configuración significa que, en lugar de generar una clave SAS con una expiración, puede confiar en la identidad administrada de la aplicación. De manera predeterminada, se usa la identidad asignada por el sistema a 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. La configuración también puede aceptar SystemAssigned
como un valor, que es equivalente a omitir la configuración.
Para habilitar la captura del paquete mediante la identidad:
Asegúrese de que el blob esté configurado para acceso privado.
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.
Establezca la configuración de la aplicación
WEBSITE_RUN_FROM_PACKAGE
en la dirección URL del blob del paquete. Esta dirección URL suele ser del formatohttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}
o similar.