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

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

出于多种原因,你可能希望将现有Azure资源从一个区域移到另一个区域。 你可能想要:

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

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

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

先决条件

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

准备

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

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

函数应用名称

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

源代码

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

默认存储器帐户

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

持久化本地存储

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

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

连接的服务

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

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

配置

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

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

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

自定义域

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

虚拟网络

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

标识

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

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

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

证书

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

在计划服务迁移时,需要考虑不同类型的证件:

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

访问密钥

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 文件感到不舒服,只需在门户中重新创建所有内容即可。 请确保使用与原始应用相同的托管计划、语言运行时和语言版本。

查看配置的资源

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

重定位注意事项

  • 请记得在目标区域验证配置并测试函数。
  • 如果配置了自定义域,请重新映射域名。

清除

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

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