你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将函数应用重新定位到另一个 Azure 区域

本文介绍如何将 Azure Functions 托管的函数应用移动到另一个 Azure 区域。

出于多种原因,你可能希望将现有 Azure 资源从一个区域移到另一个区域。 你可以采取以下建议:

  • 利用新的 Azure 区域。
  • 部署仅在特定区域可用的功能和服务。
  • 满足内部策略和治理要求。
  • 与公司合并和收购保持一致
  • 满足容量计划要求。

托管函数应用程序的 Azure 资源为区域专属,不能跨区域移动。 相反,必须在目标区域中创建现有函数应用资源的副本,然后将函数代码重新部署到新应用。

只要这些相同的资源保留在同一区域中,就可以将它们移动到其他资源组或订阅。 有关详细信息,请参阅将应用服务资源移动到新资源组或订阅

先决条件

  • 确保目标区域支持 Azure Functions 和要移动其资源的任何相关服务。
  • 请确保你有权在新区域中创建所需的资源。

准备

标识源区域上使用的所有函数应用资源,其中可能包括以下内容:

准备将应用迁移到新区域时,对于体系结构的某些部分,需要特别考虑和规划。

函数应用名称

函数应用名称在所有 Azure 应用中必须全局唯一。 这意味着新函数应用不能具有与原始函数应用相同的名称和 URL。 即使是使用自定义 DNS 时也是如此,因为基础 <APP_NAME>.azurewebsites.net 仍然必须是唯一的。 可能需要更新连接到函数应用上的 HTTP 终结点的任何客户端。 这些客户端在发出请求时需要使用新的 URL。

源代码

理想情况下,可以将源代码维护在某种代码存储库中,或者如果在 Linux 容器中运行,则维护在容器存储库中。 如果使用持续部署,请计划将存储库或容器部署连接切换到新的函数应用地址。 如果由于某种原因你不再拥有源代码,则可以从原始函数应用程序下载当前运行的包。 建议将源文件存储在代码存储库中,并使用持续部署进行更新

默认存储器帐户

Functions 主机需要 Azure 存储帐户。 有关详细信息,请参阅存储帐户要求。 为了获得最佳性能,函数应用应使用同一区域中的存储帐户。 在新区域中使用新存储帐户创建新应用时,应用将获得一组新的函数访问密钥,并且将重置任何触发器(如计时器触发器)的状态。

持久保存的本地存储

每次函数执行都旨在做到无状态。 但是,我们不会阻止将数据写入本地文件系统。 可以将应用程序生成和使用的数据存储在 %HOME%\site 虚拟驱动器上,但这些数据不应与状态相关。 如果你的方案要求你在函数执行之间保持状态,请考虑使用 Durable Functions

如果应用程序将数据保存到应用的共享存储路径,请确保规划好在资源移动期间如何管理该状态。 请记住,对于专用(应用服务)计划应用,共享是站点的一部分。 对于消耗计划和高级计划,默认情况下,共享是默认存储帐户中的 Azure 文件共享。 在 Linux 上运行的应用可能正在使用显式装载式共享来进行持久存储。

连接的服务

函数可以使用服务 SDK 或触发器和绑定连接到 Azure 服务和其他资源。 当应用移动到新区域时,任何已连接的服务都可能会受到负面影响。 如果存在延迟或吞吐量问题,请考虑将任何已连接的服务也迁移到新区域。 若要了解如何跨区域移动这些资源,请参阅相应服务的文档。 移动具有连接的服务的应用时,可能需要考虑在移动过程中采用跨区域灾难恢复和业务连续性策略。

对连接的服务的更改可能需要更新应用程序设置中存储的值,这些值用于连接到这些服务。

配置

  • 可以从 Azure 门户捕获现有应用设置和连接字符串的快照。 展开“设置”>“环境变量”,选择“应用设置”或“连接字符串”下的“高级编辑”,并保存包含现有设置或连接的 JSON 输出。 需要在新区域中重新创建这些设置,但这些值本身可能会由于连接服务中的后续区域更改而更改。

  • 无法跨 Azure 地理边界导出现有 Key Vault 引用。 必须在新区域中重新创建任何必需的引用。

  • 应用配置可以通过 Azure 应用程序配置或其他一些中心(下游)数据库依赖项进行管理。 查看任何应用程序配置存储区或类似的存储区,了解可能需要修改的环境和特定于区域的设置。

自定义域

如果函数应用使用自定义域,请将其预先绑定到目标应用。 在目标应用中验证并启用域。 移动后,必须重新映射域名。

虚拟网络

Azure Functions 允许将应用与虚拟网络资源集成,甚至支持在虚拟网络中运行应用。 有关详细信息,请参阅 Azure Functions 网络选项。 移动到新区域时,必须先移动或重新创建所有必需的虚拟网络和子网资源,然后再部署应用程序。 这包括移动或重新创建任何专用终结点和服务终结点。

标识

  • 需要重新创建任何系统分配的托管标识,以及新目标区域中的应用。 通常,自动创建的 Microsoft Entra ID 应用(EasyAuth 使用的应用)默认为应用资源名称。

  • 用户分配的托管标识也不能跨区域移动。 若要将用户分配的托管标识保留在应用的同一资源组中,必须在新区域中重新创建它们。 有关详细信息,请参阅将 Azure 资源托管标识重定位到另一区域

  • 在重定位的服务中,向托管标识授予与要替换的原始标识相同的权限,包括组成员身份。

Certificates

应用服务证书资源可移动到新的资源组或订阅,但不能跨区域移动。 可以导出的证书也可以导入到应用或新区域的 Key Vault 中。 此导出和导入过程等效于区域之间的移动。

计划服务重定位时,需要考虑许多不同类型的证书:

证书类型 可导出 注释
托管的应用服务 在新区域重新创建这些证书。
托管的 Azure Key Vault 可以从 Key Vault 导出这些证书,然后在新区域导入 Key Vault
私钥(自托管) 可以从应用服务导出在 Azure 外部获取的证书,然后将其导入到新应用或新区域中的 Key Vault
公钥 你的应用可能拥有只有公钥而没有私钥的证书,这些证书用于访问其他安全终结点。 获取所需的公钥证书文件,并将其导入新区域中的应用。

访问密钥

Functions 使用访问密钥来加大访问函数应用中的 HTTP 终结点的难度。 在默认存储帐户中,系统以加密形式维护这些密钥。 在新区域中创建新应用时,系统将创建一组新的密钥。 必须更新任何使用访问密钥的现有客户端,以在新区域中使用新密钥。 虽然应该使用新密钥,但可以在新应用程序中重新创建旧密钥。 有关详细信息,请参阅在 Azure Functions 中使用访问密钥

停机时间

如果需要最短停机时间,请考虑按照建议在两个区域中运行函数应用以实现灾难恢复体系结构。 实现的特定体系结构取决于函数应用中的触发器类型。 有关详细信息,请参阅 Azure Functions 中的可靠性

Durable Functions

Durable Functions 扩展允许你定义业务流程,你可在其中使用有状态实体在函数执行中维护状态。 理想情况下,在迁移 Durable Functions 应用之前,应允许运行业务流程完成,在计划切换到新区域中的新存储帐户时,更应如此。 迁移 Durable Functions 应用时,请考虑使用以下其中一种灾难恢复和异地分发策略

重定位

在新区域中重新创建函数应用程序需要首先重新创建应用服务计划、函数应用实例和相关资源(例如虚拟网络、标识和槽位)的 Azure 基础结构。 还必须重新连接或在新区域中重新创建应用所需的 Azure 资源。 这些资源可能包括默认的 Azure 存储帐户和 Application Insights 实例。

然后,可以将实际的应用程序源代码或容器打包并重新部署到在新区域中运行的函数应用。

重新创建 Azure 基础结构

可通过多种方式在目标区域的 Azure 中创建函数应用和相关资源:

  • 部署模板:如果最初使用基础架构即代码 (IaC) 文件(Bicep、ARM 模板或 Terraform)部署了函数应用,则可以更新这些先前的部署以定位新区域并使用它们在新区域中重新创建资源。 如果你不再拥有这些部署文件,可以随时从 Azure 门户下载现有资源组的 ARM 模板
  • Azure CLI/PowerShell 脚本:如果最初使用 Azure CLI 或 Azure PowerShell 脚本部署了函数应用,则可以更新这些脚本以定位新区域并再次运行它们。 如果你不再拥有这些脚本,那么还可以从 Azure 门户下载现有资源组的 ARM 模板
  • Azure 门户:如果最初在门户中创建了函数应用,或者不习惯使用脚本或 IaC 文件,那么可以在门户中重新创建所有内容。 请确保使用与原始应用相同的托管计划语言运行时和语言版本。

查看配置的资源

如果在部署期间未配置资源,请查看并配置在上述准备步骤中在目标区域中标识的资源。 如果使用具有托管标识验证的持续部署,请确保新的函数应用中存在所需的标识和角色映射。

重新部署源代码

准备好基础架构后,你可以重新打包源代码并将其重新部署到函数应用。 现在是将源代码或容器映像移动到存储库并从该存储库启用持续部署的好时机。

还可以使用 Functions 支持的任何其他发布方法。 大多数基于工具的发布都要求在 终结点上启用基本身份验证scm,不建议将其用于生产应用。

重定位注意事项

  • 请记得在目标区域验证配置并测试函数。
  • 如果配置了自定义域,请重新映射域名
  • 对于在专用(应用服务)计划中运行的函数应用,请在计划与一个或多个 Web 应用共享时查看应用服务迁移计划

清理

移动完成后,从源区域中删除函数应用和托管计划。 即使高级计划或专用计划中的函数应用本身未运行,也需要为其付费。 如果已在新区域中重新创建其他服务,则还应在确定不再需要旧服务后将其删除。

查看 Azure 体系结构中心,了解作为更高级和异地冗余解决方案体系结构的一部分在多个区域运行的函数应用的示例。