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