为Azure Functions配置区域冗余

区域冗余使函数应用能够灵活应对Azure可用性区域中的问题,因此当数据中心或区域发生中断时,应用仍可用。 本文提供了根据托管计划将Azure Functions配置为区域冗余的分步指南。 有关可用区如何与 Azure Functions 配合使用的信息,请参阅 Azure Functions 的可靠性

Azure Functions的可用性区域配置取决于 Functions 托管计划

托管计划 支持级别 配置部分
弹性高级计划 GA 选择本文顶部的Premium
消耗计划 n/a 消耗计划不支持。

重要

重要

在配置区域冗余之前,请查看 Azure Functions 中的可靠性 - 对可用性区域故障的复原能力中列出的要求和详细信息。

可以使用Azure CLI在现有弹性高级计划上启用或禁用可用性区域。 有关 Elastic Premium 特定容量行为的重要详细信息,请参阅 启用现有计划的区域冗余

只能在创建应用时在计划中启用可用性区域。 无法将现有高级计划转换为使用可用性区域。

创建区域冗余函数应用

按照以下步骤创建区域冗余的高端计划和应用程序。

  1. 在 Azure 门户中,转到 Create Function App 页。 有关在门户中创建函数应用的详细信息,请参阅创建函数应用

  2. 选择Functions Premium,然后选择选择按钮。

  3. “创建函数应用 (Functions 高级计划)”页面的“基本信息”选项卡上,输入您函数应用的设置。 请特别注意下表中提到了区域冗余具体要求的设置(以下屏幕截图中也突出显示了这些设置)。

    设置 建议值 有关区域冗余的说明
    Region 首选支持的区域 在其中创建弹性高级计划的区域。 必须选取支持可用性区域的地区。 有关支持区域冗余的 Azure Functions 高级计划的区域列表,请参阅Azure Functions 的可靠性 - 应对可用性区域故障的复原能力 - 要求
    定价计划 弹性高级计划之一。 有关详细信息,请参阅可用的实例 SKU 本文将说明如何在Premium计划中创建区域冗余应用程序。 区域冗余目前在消费计划中不可用。 有关应用服务计划的区域冗余的信息,请参阅 为应用服务配置可用性区域
    区域冗余 已启用 此设置指定应用是否为区域冗余。 除非你选择了支持区域冗余的区域,否则无法选择 Enabled,如之前所述。

    函数应用创建页的“基本信息”选项卡的屏幕截图。

  4. 在“存储”选项卡上,输入函数应用存储帐户的设置。 请特别注意下表中关于区域冗余的设置及其具体要求。

    设置 建议值 有关区域冗余的说明
    存储帐户 一个区域冗余存储帐户 Azure Functions 的可靠性指南中所述,我们强烈建议为您的区域冗余函数应用使用区域冗余存储帐户。
  5. 在函数应用创建过程的其余步骤中,请照常创建函数应用。 在创建过程的其余步骤中,没有任何设置会影响区域冗余。

创建并部署区域冗余的计划后,在新计划中托管的任何函数应用将被视为区域冗余的应用。

在现有计划中启用区域冗余

可以使用Azure CLI在现有 Elastic Premium 计划中启用或禁用区域冗余。 对于 Elastic Premium 计划,此属性 zoneRedundant 是可变的,允许在不创建新计划的情况下切换可用性区域支持。

重要

弹性高级计划的容量行为不同于专用(应用服务)计划。 在 Elastic Premium 中,计划的实例计数 (sku.capacity派生自应用级别,而不是直接在计划上设置。 计划中的每个函数应用都有一个minimumElasticInstanceCount属性(始终就绪的实例),控制平面会自动将计划sku.capacity设置为计划中所有应用中的最高minimumElasticInstanceCount值。

启用区域冗余时,必须更新以下两项内容:计划级别的 zoneRedundant 属性设置为 truesku.capacity 以及 2,并将需要实现区域冗余的每个函数应用上的应用级别 minimumElasticInstanceCount 设置为至少 2。 仅在计划更新命令中进行设置,并不强制要求最小实例数达到 2 个。

目前,门户尚不支持在现有弹性高级计划中切换可用区域冗余。 请使用与当前支持的工作流对应的“Azure CLI”选项卡。

验证实例区域放置

启用区域冗余后,可以验证函数应用实例是否分布在可用性区域。

在 Azure 门户中,导航到你的函数应用。 在“设置” 下,选择“实例” 。 “ 实例” 页显示每个正在运行的实例及其放入的可用性区域。

使用Azure CLI,使用以下命令查询实例区域放置:

RESOURCE_ID=$(az functionapp show \
  --resource-group <RESOURCE_GROUP> \
  --name <APP_NAME> \
  --query id -o tsv)

az rest \
  --method get \
  --url "${RESOURCE_ID}/instances?api-version=2024-04-01" \
  --query "value[].{machineName:properties.machineName, physicalZone:properties.physicalZone}" \
  -o table

在此示例中,将 <RESOURCE_GROUP><APP_NAME> 分别替换为您的资源组和函数应用的名称。

示例输出:

MachineName     PhysicalZone
--------------  --------------
pl1sdlwk0002Q7  chinanorth23-az3
pl0sdlwk0002HP  chinanorth23-az1

在输出中:

  • machineName 是工作实例的内部名称
  • physicalZone 显示实例置于的实际可用性区域(格式: {region}-az{N}
  • 对于一个具有多个实例的区域冗余方案,您应该会看到实例分布在不同的区域中。

后续步骤