你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
从 Azure 中的包文件运行函数
在 Azure 中,可以直接从函数应用中的部署包文件运行函数。 另一种做法是在函数应用的 d:\home\site\wwwroot
(Windows) 或 /home/site/wwwroot
(Linux) 目录中部署文件。
本文介绍从包运行函数的好处。 此外,介绍如何在函数应用中启用此功能。
从包文件运行的好处
从包文件运行函数可提供多种好处:
- 减少文件副本锁定问题的风险。
- 可部署到生产应用(需重启)。
- 可以确定哪些文件在应用中运行。
- 提高 Azure 资源管理器部署的性能。
- 可以减少冷启动时间,特别是对于具有大型 npm 包树的 JavaScript 函数。
有关详细信息,请参阅此公告。
使函数从包运行
若要使函数应用从包运行,只需将 WEBSITE_RUN_FROM_PACKAGE
设置添加到函数应用设置。 WEBSITE_RUN_FROM_PACKAGE
设置可以使用以下值之一:
值 | 说明 |
---|---|
1 |
指示函数应用从部署在函数应用的 d:\home\data\SitePackages (Windows) 或 /home/data/SitePackages (Linux) 文件夹中的本地包文件运行。 |
<URL> |
设置一个 URL,该 URL 是要运行的特定包文件的远程位置。 对于在消耗计划中的 Linux 上运行的功能应用是必需的。 |
下表指示部署到 WEBSITE_RUN_FROM_PACKAGE
特定操作系统和托管计划的建议选项:
托管计划 | Windows | Linux |
---|---|---|
消耗 | 强烈建议使用 1 。 |
仅支持 <URL> 。 |
高级 | 建议使用1 。 |
建议使用1 。 |
专用 | 建议使用1 。 |
建议使用1 。 |
一般注意事项
- 包文件必须采用 .zip 格式。 目前不支持 tar 和 gzip 格式。
- 建议使用 Zip 部署。
- 将函数应用部署到 Windows 时,应将
WEBSITE_RUN_FROM_PACKAGE
设置为1
并通过 zip 部署进行发布。 - 从包运行时,
wwwroot
文件夹将变为只读,并且在将文件写入此目录时将收到错误。 文件在 Azure 门户中也是只读的。 - 部署包文件的最大大小当前为 1 GB。
- 从部署包运行时,不能使用本地缓存。
- 如果你的项目需要使用远程生成,请不要使用
WEBSITE_RUN_FROM_PACKAGE
应用设置。 请改为添加SCM_DO_BUILD_DURING_DEPLOYMENT=true
部署自定义应用设置。 对于 Linux,还要添加ENABLE_ORYX_BUILD=true
设置。 若要了解有关详细信息,请参阅远程生成。
注意
如此处所述,WEBSITE_RUN_FROM_PACKAGE 不能与 MSDeploy 配合运行。 你将在部署期间收到错误,例如 ARM-MSDeploy Deploy Failed
。 将 /MSDeploy 更改为 /ZipDeploy 即可解决此错误。
添加 WEBSITE_RUN_FROM_PACKAGE 设置
可以通过以下几种方法添加、更新和删除函数应用设置:
如果更改函数应用设置,则需要重启函数应用。
Using WEBSITE_RUN_FROM_PACKAGE = 1
本节提供有关如何从本地包文件运行函数应用的信息。
从现场包进行部署的注意事项
- 建议从部署包运行时使用现场包,但在消耗计划中托管的 Linux 上除外。
- 将部署包上载到站点时,推荐方法是 Zip 部署。
- 不使用 Zip 部署时,请确保
d:\home\data\SitePackages
(Windows) 或/home/data/SitePackages
(Linux) 文件夹具有名为packagename.txt
的文件。 此文件仅包含当前正在运行的此文件夹中的包文件的名称,不包含任何空格。
与 zip 部署集成
Zip 部署是 Azure 应用服务的一项功能,可用于将函数应用项目部署到 wwwroot
目录。 项目打包为 .zip 部署文件。 可以使用相同的 API 将包部署到 d:\home\data\SitePackages
(Windows) 或 /home/data/SitePackages
(Linux) 文件夹。
对 WEBSITE_RUN_FROM_PACKAGE
应用设置使用值 1
时,Zip 部署 API 会将包复制到 d:\home\data\SitePackages
(Windows) 或 /home/data/SitePackages
(Linux) 文件夹,而不是将文件提取到 d:\home\site\wwwroot
(Windows) 或 /home/site/wwwroot
(Linux)。 它还会创建 packagename.txt
文件。 重启后,该包将作为只读文件系统装载到 wwwroot
。 有关 zip 部署的详细信息,请参阅 Azure Functions 的 Zip 部署。
注意
进行部署时,将触发函数应用的重启。 当前在部署期间运行的函数执行将终止。 请查看改进 Azure Functions 的性能和可靠性,了解如何编写无状态和防御函数。
Using WEBSITE_RUN_FROM_PACKAGE = URL
本节提供有关如何从部署到 URL 终结点的包运行函数应用的信息。 此选项是唯一支持从消耗计划中托管的 Linux 上的包运行的选项。
从 URL 进行部署的注意事项
- 在 Windows 上运行函数应用时,应用设置
WEBSITE_RUN_FROM_PACKAGE = <URL>
的冷启动性能较差,因此不建议这样做。 - 指定 URL 时,还必须在发布更新的包后手动同步触发器。
- 函数运行时必须具有访问包 URL 的权限。
- 不应将包作为公共 Blob 部署到 Azure Blob 存储。 而应使用带有共享访问签名 (SAS) 的专用容器,或者使用托管标识,以便允许 Functions 运行时来访问包。
- 必须维护用于部署的任何 SAS URL。 当 SAS 过期时,将无法再部署包。 在这种情况下,必须生成新的 SAS 并更新函数应用中的设置。 可以使用托管标识来消除此管理负担。
- 在高级计划上运行时,请确保消除冷启动。
- 在专用计划上运行时,请确保已启用 Always On。
- 可以使用 Azure 存储资源管理器将包文件上传到存储帐户中的 Blob 容器。
手动将包上传到 Blob 存储
若要在使用 URL 选项时部署压缩包,必须创建一个 .zip 压缩的部署包并将其上传到目标。 此示例部署到 Blob 存储中的容器。
使用所选实用工具为项目创建 .zip 包。
在 Azure 门户中搜索你的存储帐户名称,或者在存储帐户中以浏览方式查找它。
在存储帐户中的“数据存储”下,选择“容器” 。
选择“+ 容器”,以在帐户中创建新的 Blob 存储容器。
在“新建容器”页中提供一个名称(例如“deployments”),确保“公开访问级别”为“专用”,然后选择“创建”。
选择所创建的容器,接着选择“上传”,浏览到通过项目创建的 .zip 文件的位置,然后选择“上传”。
上传完成后,选择已上传的 blob 文件,并复制 URL。 如果未使用标识,则可能需要生成 SAS URL
在“函数应用”页中搜索你的函数应用或以浏览方式查找它。
在函数应用的“设置”下选择“配置”。
在“应用程序设置”选项卡中,选择“新建应用程序设置” 。
输入值
WEBSITE_RUN_FROM_PACKAGE
作为“名称”,并粘贴你在 Blob 存储中的包的 URL 作为“值”。选择“确定” 。 然后选择“保存”>“继续”,以保存设置并重启应用。
现在,可以在 Azure 中运行函数,以验证部署是否已成功使用部署包 .zip 文件。
下面显示了配置为从 Azure Blob 存储中托管的 .zip 文件运行的函数应用:
使用托管标识从 Azure Blob 存储提取包
可以将 Azure Blob 存储配置为使用 Microsoft Entra ID 授权请求。 这意味着,可以依赖应用程序的托管标识,而不是生成会过期的 SAS 密钥。 默认情况下,将使用应用的系统分配标识。 如果要指定用户分配的标识,可以将 WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID
应用设置设为该标识的资源 ID。 该设置还可以接受“SystemAssigned”作为值,尽管这与完全省略该设置是一样的。
若要使用标识提取包,请运行以下操作:
确保 Blob 已配置为私有访问。
向标识授予存储 Blob 数据读取器角色,其范围为包 blob。 有关创建角色分配的详细信息,请参阅分配 Azure 角色以访问 Blob 数据。
将
WEBSITE_RUN_FROM_PACKAGE
应用程序设置设为包的 blob URL。 格式可能为“https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}”或类似格式。