Azure Functions 的 Zip 部署

本文介绍如何将函数应用项目文件从 .zip(压缩)文件部署到 Azure。 可在本文中了解如何通过 Azure CLI 和 REST API 进行推送部署。 Azure Functions 核心工具在将本地项目发布到 Azure 时也使用这些部署 API。

Azure Functions 具有完整的持续部署范围,以及由 Azure 应用服务提供的集成选项。

要加快开发速度,你可能会发现直接通过 .zip 文件部署你的函数应用项目文件更为简单。 .zip 部署 API 接受 .zip 文件的内容并将内容提取到你的函数应用的 wwwroot 文件夹中。 此 .zip 文件部署使用相同的 Kudu 服务,支持基于持续集成的部署,包括:

  • 删除之前的部署留下的文件。
  • 部署自定义,包括运行部署脚本。
  • 部署日志。

有关详细信息,请参阅 .zip 部署参考

部署.zip 文件的要求

用于推送部署的 .zip 文件必须包含运行你的函数时所需的所有文件。

Important

使用 .zip 部署时,从函数应用删除现有部署中未包含在 .zip 文件内的任何文件。

特定函数应用中所有函数的代码均位于根项目文件夹中,其中包含主机配置文件和一个或多个子文件夹。 每个子文件夹包含单独函数的代码,表示形式如下:

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

在 2.x 版 Functions 运行时中,函数应用中的所有函数都必须使用相同的语言辅助角色。

host.json 文件包含一些特定于运行时的配置,位于函数应用的根文件夹中。 bin 文件夹包含函数应用所需的包和其他库文件。 查看函数应用项目的语言特定要求:

函数应用包含 wwwroot 目录中的所有文件和文件夹。 .zip 文件部署包含 wwwroot 目录的内容,但不包含目录本身。 部署 C# 类库项目时,必须在 .zip 包中的 bin 子文件夹中包括编译的库文件和依赖项。

下载函数应用文件

在本地计算机上进行开发时,可以轻松在该开发计算机上创建函数应用项目文件夹的 .zip 文件。

但是,可能已通过 Azure 门户中的编辑器创建了函数。 可以通过以下方式之一下载现有的函数应用项目:

  • 通过 Azure 门户:

    1. 登录 Azure 门户,并转到函数应用。

    2. 在“概述”选项卡中,选择“下载应用内容”。 选择下载选项,然后选择“下载”。

      下载函数应用项目

      所下载的 .zip 文件格式正确,可使用 .zip 推送部署将其重新发布到函数应用。 门户下载还可以添加在 Visual Studio 中直接打开函数应用所需的文件。

  • 使用 REST API:

    使用以下部署 GET API 从 <function_app> 项目中下载文件:

      https://<function_app>.scm.chinacloudsites.cn/api/zip/site/wwwroot/
    

    包含 /site/wwwroot/ 可确保 zip 文件仅包含函数应用项目文件,而不是整个站点。 如果尚未登录 Azure,系统会要求你登录。

还可从 GitHub 存储库下载 .zip 文件。 在以 .zip 文件形式下载 GitHub 存储库时,GitHub 会为分支添加一个额外的文件夹级别。 此额外的文件夹级别意味着无法直接部署从 GitHub 下载的 .zip 文件。

使用 Azure CLI 进行部署

可使用 Azure CLI 来触发推送部署。 使用 az functionapp deployment source config-zip 命令将 .zip 文件推送部署到函数应用。 要使用此命令,必须使用 Azure CLI 版本 2.0.21 或更高版本。 要查看当前使用的 Azure CLI 版本,请使用 az --version 命令。

以下命令将 <zip_file_path> 占位符替换为 .zip 文件的位置路径。 此外,<app_name> 替换为函数应用的唯一名称。

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

此命令将项目文件从下载的 .zip 文件部署到 Azure 中的函数应用。 然后重启应用。 要查看此函数应用的部署列表,必须使用 REST API。

在本地计算机上使用 Azure CLI 时,<zip_file_path> 是计算机中 .zip 文件的路径。

使用 REST API 部署 ZIP 文件

可以使用部署服务 REST API 将 .zip 文件部署到 Azure 中的应用。 若要部署,请将 POST 请求发送到 https://<app_name>.scm.chinacloudsites.cn/api/zipdeploy。 POST 请求必须在消息正文中包含此 .zip 文件。 应用的部署凭据是通过使用 HTTP BASIC 身份验证在请求中提供的。 有关详细信息,请参阅 .zip 推送部署参考

对于 HTTP 基本身份验证,需使用应用服务部署凭据。 若要了解如何设置部署凭据,请参阅设置和重置用户级别凭据

使用 cURL

以下示例使用 cURL 工具部署 .zip 文件。 替换占位符 <username><password><zip_file_path><app_name>。 出现 cURL 提示时,键入密码。

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

此请求从已上传的 .zip 文件触发推送部署。 可以使用 https://<app_name>.scm.chinacloudsites.cn/api/deployments 终结点查看当前和之前的部署,如以下 cURL 示例所示。 同样,使用应用的名称替换 <app_name>;使用部署凭据的用户名替换 <deployment_user>

curl -u <deployment_user> https://<app_name>.scm.chinacloudsites.cn/api/deployments

使用 PowerShell

以下示例使用 Invoke-RestMethod 发送包含 .zip 文件的请求。 替换占位符 <deployment_user><deployment_password><zip_file_path><app_name>

#PowerShell
$username = "<deployment_user>"
$password = "<deployment_password>"
$filePath = "<zip_file_path>"
$apiUrl = "https://<app_name>.scm.chinacloudsites.cn/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"

此请求从已上传的 .zip 文件触发推送部署。 若要查看当前和之前的部署,请运行以下命令。 同样,请替换 <app_name> 占位符。

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

从部署包中运行函数

还可以选择直接从部署包文件中运行你的函数。 此方法跳过了将文件从包中复制到函数应用的 wwwroot 目录这一部署步骤。 包文件将由 Functions 运行时进行装载,并且 wwwroot 目录的内容将变为只读的。

Zip 部署集成了此功能,可以通过将函数应用设置 WEBSITE_RUN_FROM_PACKAGE 设置为 1 值来启用此功能。 有关详细信息,请参阅从部署包文件运行函数

部署自定义

部署过程假设推送的 .zip 文件包含随时可运行的应用。 默认情况下,不会运行自定义。 若要启用通过持续集成获取的同一生成进程,请将以下内容添加到应用程序设置:

SCM_DO_BUILD_DURING_DEPLOYMENT=true 

使用 .zip 推送部署时,此设置默认为“false”。 持续集成部署的设置默认为“true”。 设置为“true”时,在部署期间将使用与部署相关的设置。 可以将这些设置配置为应用设置或在位于 .zip 文件根目录中的 .deployment 配置文件中进行配置。 有关详细信息,请参阅部署参考中的 Repository and deployment-related settings(存储库和与部署相关的设置)。