Implementación de archivos ZIP en Azure FunctionsZip deployment for Azure Functions

En este artículo se describe la manera de implementar los archivos de proyecto de la aplicación de función en Azure desde un archivo ZIP (comprimido).This article describes how to deploy your function app project files to Azure from a .zip (compressed) file. Aprenda a realizar una implementación de inserción mediante el uso de la CLI de Azure y con las API de REST.You learn how to do a push deployment, both by using Azure CLI and by using the REST APIs. Azure Functions Core Tools también usa estas API de implementación al publicar un proyecto local en Azure.Azure Functions Core Tools also uses these deployment APIs when publishing a local project to Azure.

Azure Functions tiene toda una gama de opciones de implementación e integración continuas que se proporcionan con Azure App Service.Azure Functions has the full range of continuous deployment and integration options that are provided by Azure App Service. Para más información, vea Implementación continua para Azure Functions.For more information, see Continuous deployment for Azure Functions.

Para acelerar el desarrollo, puede que le resulte más fácil implementar los archivos de proyecto de la aplicación de función directamente desde un archivo ZIP.To speed development, you may find it easier to deploy your function app project files directly from a .zip file. La API de implementación de ZIP toma el contenido de un archivo ZIP y lo extrae en la carpeta wwwroot de la aplicación de función.The .zip deployment API takes the contents of a .zip file and extracts the contents into the wwwroot folder of your function app. Esta implementación del archivo .zip usa el servicio Kudu que permite realizar implementaciones basadas en integraciones continuas, entre las que se incluye:This .zip file deployment uses the same Kudu service that powers continuous integration-based deployments, including:

  • La eliminación de archivos que se omitieron en implementaciones anteriores.Deletion of files that were left over from earlier deployments.
  • La personalización de la implementación, incluyendo la ejecución de scripts de implementación.Deployment customization, including running deployment scripts.
  • Registros de implementación.Deployment logs.
  • Los desencadenadores de la función de sincronización de una aplicación de función en un plan de consumo.Syncing function triggers in a Consumption plan function app.

Para más información, vea la referencia sobre implementaciones con archivos ZIP.For more information, see the .zip deployment reference.

Requisitos de los .zip de implementaciónDeployment .zip file requirements

El archivo ZIP que use para la implementación de inserción debe contener todos los archivos necesarios para ejecutar la función.The .zip file that you use for push deployment must contain all of the files needed to run your function.

Importante

Cuando realice la implementación del archivo ZIP, los archivos de cualquier otra implementación existente que no se encuentren en el archivo ZIP se eliminarán de la aplicación de función.When you use .zip deployment, any files from an existing deployment that aren't found in the .zip file are deleted from your function app.

El código de todas las funciones de una aplicación de función está ubicado en una carpeta de proyecto raíz que contiene un archivo de configuración de host y una o varias subcarpetas.The code for all the functions in a specific function app is located in a root project folder that contains a host configuration file and one or more subfolders. Cada subcarpeta contiene el código de una función diferente como se puede ver en la representación siguiente:Each subfolder contains the code for a separate function, as in the following representation:

FunctionApp
 | - host.json
 | - Myfirstfunction
 | | - function.json
 | | - ...  
 | - mysecondfunction
 | | - function.json
 | | - ...  
 | - SharedCode
 | - bin

En la versión 2.x del sistema en ejecución de Functions, todas las funciones de la aplicación de función deben compartirse en el mismo proceso de trabajo de idioma.In version 2.x of the Functions runtime, all functions in the function app must share the same language worker.

El archivo host.json, que contiene alguna configuración específica del tiempo de ejecución, se coloca en la carpeta principal de la aplicación de función.The host.json file, which contains some runtime-specific configurations, is in the root folder of the function app. Un carpeta bin contiene paquetes y otros archivos de biblioteca requeridos por la aplicación de función.A bin folder contains packages and other library files required by the function app. Consulte los requisitos específicos de idioma para un proyecto de aplicación de función:See the language-specific requirements for a function app project:

Una aplicación de función incluye todos los archivos y carpetas del directorio wwwroot.A function app includes all of the files and folders in the wwwroot directory. Una implementación de archivo .zip incluye el contenido del directorio wwwroot, pero no el propio directorio.A .zip file deployment includes the contents of the wwwroot directory, but not the directory itself. Al implementar un proyecto de la biblioteca de clases de C#, debe incluir las dependencias y los archivos de biblioteca compilados en una subcarpeta bin del paquete ZIP.When deploying a C# class library project, you must include the compiled library files and dependencies in a bin subfolder in your .zip package.

Descarga de los archivos de aplicación de funciónDownload your function app files

Si usa un equipo local para desarrollar elementos, verá que es fácil crear un archivo .zip de la carpeta del proyecto de la aplicación de función en el equipo de desarrollo.When you are developing on a local computer, it's easy to create a .zip file of the function app project folder on your development computer.

Sin embargo, es posible crear las funciones mediante el editor en Azure Portal.However, you might have created your functions by using the editor in the Azure portal. Puede descargar un proyecto de aplicación de función existente de una de estas maneras:You can download an existing function app project in one of these ways:

  • Desde Azure PortalFrom the Azure portal:

    1. Inicie sesión en Azure Portal y vaya a la aplicación de función.Sign in to the Azure portal, and then go to your function app.

    2. En la pestaña Introducción, seleccione Descargar contenido de la aplicación.On the Overview tab, select Download app content. Seleccione las opciones de descarga y, a continuación, seleccione Descargar.Select your download options, and then select Download.

      Descargue el proyecto de aplicación de función.

      El archivo .zip descargado tiene el formato correcto para volver a publicarlo en la aplicación de función mediante la implementación de inserción de archivos .zip.The downloaded .zip file is in the correct format to be republished to your function app by using .zip push deployment. La descarga del portal también puede agregar los archivos necesarios para abrir la aplicación de función directamente en Visual Studio.The portal download can also add the files needed to open your function app directly in Visual Studio.

  • Uso de las API REST:Using REST APIs:

    Use la siguiente API GET de implementación para descargar los archivos del proyecto <function_app>:Use the following deployment GET API to download the files from your <function_app> project:

      https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    Al incluir /site/wwwroot/ se garantiza que el archivo ZIP solo incorpora los archivos de proyecto de la aplicación de función y no el sitio entero.Including /site/wwwroot/ makes sure your zip file includes only the function app project files and not the entire site. Si aún no ha iniciado sesión en Azure, se le pedirá que lo haga.If you are not already signed in to Azure, you will be asked to do so.

Igualmente, también puede descargar un archivo .zip desde un repositorio de GitHub.You can also download a .zip file from a GitHub repository. Al descargar un repositorio de GitHub como un archivo ZIP, GitHub agrega un nivel de carpeta adicional para la rama.When you download a GitHub repository as a .zip file, GitHub adds an extra folder level for the branch. Este nivel de carpetas adicional significa que no puede implementar el archivo .zip directamente ya que se descargó desde GitHub.This extra folder level means that you can't deploy the .zip file directly as you downloaded it from GitHub. Si usa un repositorio de GitHub para mantener la aplicación de función, debe usar la integración continua para implementar la aplicación.If you're using a GitHub repository to maintain your function app, you should use continuous integration to deploy your app.

Implementación con la CLI de AzureDeploy by using Azure CLI

Puede usar la CLI de Azure para desencadenar una implementación de inserción.You can use Azure CLI to trigger a push deployment. Para implementar el archivo .zip en la aplicación de función, use el comando az functionapp deployment source config-zip.Push deploy a .zip file to your function app by using the az functionapp deployment source config-zip command. Para usar este comando, debe usar la versión 2.0.21 o posterior de la CLI de Azure.To use this command, you must use Azure CLI version 2.0.21 or later. Para ver qué versión de CLI de Azure está usando, use el comando az --version.To see what Azure CLI version you are using, use the az --version command.

En el siguiente comando, reemplace el marcador de posición <zip_file_path> por la ruta de acceso a la ubicación del archivo .zip.In the following command, replace the <zip_file_path> placeholder with the path to the location of your .zip file. Reemplace también <app_name> por el nombre exclusivo de la aplicación de función.Also, replace <app_name> with the unique name of your function app.

az functionapp deployment source config-zip  -g myResourceGroup -n \
<app_name> --src <zip_file_path>

Este comando implementa los archivos de proyecto del archivo .zip descargado en la aplicación de función en Azure.This command deploys project files from the downloaded .zip file to your function app in Azure. A continuación, se reinicia la aplicación.It then restarts the app. Para ver la lista de implementaciones de esta aplicación de función, debe usar las API de REST.To view the list of deployments for this function app, you must use the REST APIs.

Cuando se usa la CLI de Azure en el equipo local, <zip_file_path> es la ruta de acceso al archivo .zip en el equipo.When you're using Azure CLI on your local computer, <zip_file_path> is the path to the .zip file on your computer. También puede ejecutar la CLI de Azure en Azure Cloud Shell.You can also run Azure CLI in Azure Cloud Shell. Cuando use Cloud Shell, recuerde que debe cargar primero el archivo .zip de implementación en la cuenta de Azure Files que esté asociada con Cloud Shell.When you use Cloud Shell, you must first upload your deployment .zip file to the Azure Files account that's associated with your Cloud Shell. En ese caso, <zip_file_path> será la ubicación de almacenamiento que utiliza la cuenta de Cloud Shell.In that case, <zip_file_path> is the storage location that your Cloud Shell account uses. Para obtener más información, consulte Persistencia de archivos en Azure Cloud Shell.For more information, see Persist files in Azure Cloud Shell.

Implementación de un archivo ZIP con las API RESTDeploy ZIP file with REST APIs

Puede usar el servicio de implementación de las API de REST para implementar el archivo .zip en su aplicación en Azure.You can use the deployment service REST APIs to deploy the .zip file to your app in Azure. Para ello, envíe una solicitud POST a https://<app_name>.scm.azurewebsites.net/api/zipdeploy.To deploy, send a POST request to https://<app_name>.scm.azurewebsites.net/api/zipdeploy. La solicitud POST debe contener el archivo .zip en el cuerpo del mensaje.The POST request must contain the .zip file in the message body. Las credenciales de implementación de la aplicación se proporcionan en la solicitud mediante la autenticación de HTTP BASIC.The deployment credentials for your app are provided in the request by using HTTP BASIC authentication. Para obtener más información, consulte la referencia de implementación para la inserción del archivo .zip.For more information, see the .zip push deployment reference.

Para la autenticación básica HTTP, necesita las credenciales de implementación de App Service.For the HTTP BASIC authentication, you need your App Service deployment credentials. Para ver cómo establecer sus credenciales de implementación, consulte Establecimiento y restablecimiento de credenciales de nivel de usuario.To see how to set your deployment credentials, see Set and reset user-level credentials.

Con cURLWith cURL

En el ejemplo siguiente se usa la herramienta cURL para implementar un archivo .zip.The following example uses the cURL tool to deploy a .zip file. Reemplace los marcadores de posición <username>, <password>, <zip_file_path> y <app_name>.Replace the placeholders <username>, <password>, <zip_file_path>, and <app_name>. Cuando cURL se lo solicite, escriba la contraseña.When prompted by cURL, type in the password.

curl -X POST -u <deployment_user> --data-binary @"<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

Esta solicitud desencadena la implementación de inserción desde el archivo .zip cargado.This request triggers push deployment from the uploaded .zip file. Puede revisar las implementaciones actuales y pasadas mediante el punto de conexión https://<app_name>.scm.azurewebsites.net/api/deployments, tal como se muestra en el siguiente ejemplo de cURL.You can review the current and past deployments by using the https://<app_name>.scm.azurewebsites.net/api/deployments endpoint, as shown in the following cURL example. Una vez más, reemplace <app_name> por el nombre de la aplicación y <deployment_user> por el nombre de usuario de las credenciales de implementación.Again, replace <app_name> with the name of your app and <deployment_user> with the username of your deployment credentials.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

Con PowerShellWith PowerShell

En el ejemplo siguiente se usa Invoke-RestMethod para enviar una solicitud que contiene el archivo .zip.The following example uses Invoke-RestMethod to send a request that contains the .zip file. Reemplace los marcadores de posición <deployment_user>, <deployment_password>, <zip_file_path> y <app_name>.Replace the placeholders <deployment_user>, <deployment_password>, <zip_file_path>, and <app_name>.

#PowerShell
$username = "<deployment_user>"
$password = "<deployment_password>"
$filePath = "<zip_file_path>"
$apiUrl = "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"

Esta solicitud desencadena la implementación de inserción desde el archivo .zip cargado.This request triggers push deployment from the uploaded .zip file. Para revisar las implementaciones actuales y pasadas, ejecute los siguientes comandos.To review the current and past deployments, run the following commands. Una vez más, reemplace el marcador de posición <app_name>.Again, replace the <app_name> placeholder.

$apiUrl = "https://<app_name>.scm.azurewebsites.net/api/deployments"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Ejecución de funciones desde el paquete de implementaciónRun functions from the deployment package

También puede ejecutar las funciones directamente desde el archivo del paquete de implementación.You can also choose to run your functions directly from the deployment package file. Este método omite el paso de implementación de la copia de archivos del paquete en el directorio wwwroot de la aplicación de función.This method skips the deployment step of copying files from the package to the wwwroot directory of your function app. En su lugar, Functions Runtime monta el archivo del paquete y el contenido el directorio wwwroot será de solo lectura.Instead, the package file is mounted by the Functions runtime, and the contents of the wwwroot directory become read-only.

La implementación de ZIP se integra con esta característica, que se puede habilitar al configurar la opción de la aplicación de función WEBSITE_RUN_FROM_PACKAGE en un valor de 1.Zip deployment integrates with this feature, which you can enable by setting the function app setting WEBSITE_RUN_FROM_PACKAGE to a value of 1. Para más información, consulte Run your functions from a deployment package file (Ejecución de Azure Functions desde un archivo de paquete de implementación).For more information, see Run your functions from a deployment package file.

Personalización de la implementaciónDeployment customization

En el proceso de implementación se da por supuesto que el archivo .zip que se inserta contiene una aplicación lista para ejecutarse.The deployment process assumes that the .zip file that you push contains a ready-to-run app. No se ejecuta ninguna personalización de forma predeterminada.By default, no customizations are run. Para habilitar los mismos procesos de compilación que se obtienen con la integración continua, agregue los siguientes elementos a la configuración de la aplicación:To enable the same build processes that you get with continuous integration, add the following to your application settings:

SCM_DO_BUILD_DURING_DEPLOYMENT=true 

Cuando se realiza la implementación de inserción del archivo .zip, el valor que se establece de forma predeterminada es false.When you use .zip push deployment, this setting is false by default. El valor predeterminado es true para las implementaciones de integración continua.The default is true for continuous integration deployments. Cuando el valor se establece en true, la configuración relacionada con la implementación se usa durante la implementación.When set to true, your deployment-related settings are used during deployment. Puede configurar estas opciones a modo de configuración de la aplicación o en un archivo de configuración de implementación que se encuentra en la raíz del archivo .zip.You can configure these settings either as app settings or in a .deployment configuration file that's located in the root of your .zip file. Para obtener más información, consulte Repository and deployment-related settings (Repositorio y configuración relacionada con la implementación) en la referencia de la implementación.For more information, see Repository and deployment-related settings in the deployment reference.

Pasos siguientesNext steps