区域冗余使函数应用能够灵活应对Azure可用性区域中的问题,因此当数据中心或区域发生中断时,应用仍可用。 本文提供了根据托管计划将Azure Functions配置为区域冗余的分步指南。 有关可用区如何与 Azure Functions 配合使用的信息,请参阅 Azure Functions 的可靠性。
Azure Functions的可用性区域配置取决于 Functions 托管计划:
| 托管计划 |
支持级别 |
配置部分 |
|
弹性高级计划 |
GA |
选择本文顶部的Premium。 |
|
消耗计划 |
n/a |
消耗计划不支持。 |
创建区域冗余函数应用
按照以下步骤创建区域冗余的高端计划和应用程序。
在 Azure 门户中,转到 Create Function App 页。 有关在门户中创建函数应用的详细信息,请参阅创建函数应用。
选择Functions Premium,然后选择选择按钮。
在“创建函数应用 (Functions 高级计划)”页面的“基本信息”选项卡上,输入您函数应用的设置。 请特别注意下表中提到了区域冗余具体要求的设置(以下屏幕截图中也突出显示了这些设置)。
| 设置 |
建议值 |
有关区域冗余的说明 |
|
Region |
首选支持的区域 |
在其中创建弹性高级计划的区域。 必须选取支持可用性区域的地区。 有关支持区域冗余的 Azure Functions 高级计划的区域列表,请参阅Azure Functions 的可靠性 - 应对可用性区域故障的复原能力 - 要求。 |
|
定价计划 |
弹性高级计划之一。 有关详细信息,请参阅可用的实例 SKU。 |
本文将说明如何在Premium计划中创建区域冗余应用程序。 区域冗余目前在消费计划中不可用。 有关应用服务计划的区域冗余的信息,请参阅 为应用服务配置可用性区域。 |
|
区域冗余 |
已启用 |
此设置指定应用是否为区域冗余。 除非你选择了支持区域冗余的区域,否则无法选择 Enabled,如之前所述。 |
在“存储”选项卡上,输入函数应用存储帐户的设置。 请特别注意下表中关于区域冗余的设置及其具体要求。
在函数应用创建过程的其余步骤中,请照常创建函数应用。 在创建过程的其余步骤中,没有任何设置会影响区域冗余。
为函数应用创建存储帐户时,请选择区域冗余 SKU,例如 Standard_ZRS。 例如:
az storage account create \
--name <STORAGE_NAME> \
--location <REGION> \
--resource-group <RESOURCE_GROUP> \
--sku Standard_ZRS \
--allow-blob-public-access false
创建高级计划时,添加 --zone-redundant true 参数:
az functionapp plan create \
--resource-group <RESOURCE_GROUP> \
--name <PLAN_NAME> \
--location <REGION> \
--sku EP1 \
--zone-redundant true
创建函数应用程序并将其与区域冗余的 Premium 计划相关联:
az functionapp create \
--resource-group <RESOURCE_GROUP> \
--name <APP_NAME> \
--storage-account <STORAGE_NAME> \
--plan <PLAN_NAME> \
--runtime <RUNTIME> \
--runtime-version <RUNTIME_VERSION>
可以使用 Bicep 文件部署到区域冗余 Premium 方案。 若要了解如何将函数应用部署到高级计划,请参阅 在 Azure Functions 中自动化资源部署。
创建区域冗余托管计划时要注意的唯一属性是 zoneRedundant 属性和计划的实例计数 (capacity) 字段。
zoneRedundant 属性必须设置为 true,并且应根据工作负载要求来设置 capacity 属性,但不能小于 3。 根据多个因素和高可用性/容错策略,选择适当的容量会有所不同。 一个好的做法是为应用程序指定足够的实例,以确保即使失去某个实例区域,也剩有足够的容量来处理预期负载。
重要
在弹性高级版和区域冗余计划中托管的 Azure Functions 应用必须至少具有 一直就绪实例 数量为 3。 此最低值可确保区域冗余功能应用始终拥有足够的实例,以满足每个区域至少一个工作者的需求。
下面是用于区冗余的 Premium 计划的 Bicep 模板代码片段。 它显示 zoneRedundant 字段和 capacity 规范。
resource EPFuncPlan 'Microsoft.Web/serverfarms@2024-04-01' = {
name: '<YOUR_PLAN_NAME>'
location: '<YOUR_REGION_NAME>'
sku: {
name: 'EP1'
tier: 'ElasticPremium'
size: 'EP1'
family: 'EP'
capacity: 3
}
kind: 'elastic'
properties: {
perSiteScaling: false
elasticScaleEnabled: true
maximumElasticWorkerCount: 20
isSpot: false
reserved: false
isXenon: false
hyperV: false
targetWorkerCount: 0
targetWorkerSizeId: 0
zoneRedundant: true
}
}
若要了解有关这些模板的详细信息,请参阅 Azure Functions 中的 Automate 资源部署。
您可以使用 ARM 模板来部署到区域冗余的高级套餐。 若要了解如何将函数应用程序部署到高级层计划,请参阅“Azure Functions 自动化资源部署”。
创建区域冗余托管计划时要注意的唯一属性是 zoneRedundant 属性和计划的实例计数 (capacity) 字段。
zoneRedundant 属性必须设置为 true,并且应根据工作负载要求来设置 capacity 属性,但不能小于 3。 根据多个因素和高可用性/容错策略,选择适当的容量会有所不同。 一个好的做法是为应用程序指定足够的实例,以确保即使失去某个实例区域,也剩有足够的容量来处理预期负载。
重要
Azure Functions 应用托管在弹性高级版且区域冗余计划中的情况下,必须至少具有 3 个始终可用实例。 此最低值可确保区域冗余功能应用始终拥有足够的实例,以满足每个区域至少一个工作者的需求。
下面是用于区域级冗余高级方案的 ARM 模板代码片段。 它显示 zoneRedundant 字段和 capacity 规范。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2024-04-01",
"name": "<YOUR_PLAN_NAME>",
"location": "<YOUR_REGION_NAME>",
"sku": {
"name": "EP1",
"tier": "ElasticPremium",
"size": "EP1",
"family": "EP",
"capacity": 3
},
"kind": "elastic",
"properties": {
"perSiteScaling": false,
"elasticScaleEnabled": true,
"maximumElasticWorkerCount": 20,
"isSpot": false,
"reserved": false,
"isXenon": false,
"hyperV": false,
"targetWorkerCount": 0,
"targetWorkerSizeId": 0,
"zoneRedundant": true
}
}
]
}
若要了解有关这些模板的详细信息,请参阅 Azure Functions 中的 Automate 资源部署。
创建并部署区域冗余的计划后,在新计划中托管的任何函数应用将被视为区域冗余的应用。
在现有计划中启用区域冗余
您无法更改现有的“弹性高级计划”的可用区域支持。 相反,你需要迁移到一个新的区域冗余方案。
停机时间
此迁移所需的停机时间取决于在迁移到启用新可用性区域的函数应用期间如何重定向流量。
迁移步骤
若要使现有高级计划函数应用能够使用可用性区域,请将项目文件重新部署到区域冗余高级计划中托管的新函数应用。 执行以下步骤:
- 如果您已在受支持区域的高级计划中托管,您可以继续使用现有资源组,直接跳至下一步骤。 否则,请在受支持的区域中创建新的资源组。 有关支持 Azure Functions Premium 计划进行区域冗余的区域列表,请参阅 Azure Functions 的可靠性 - 针对可用性区域故障的复原能力 - 要求。
- 在受支持的区域中创建区域冗余高级计划。
- 在新高级计划中创建函数应用,并使用所需的 部署方法将项目代码部署到此新应用。
- 成功启动并运行新应用后,可以选择禁用或删除非区域应用。
后续步骤