如何为已创建的Azure Container App添加多缩放规则并避免覆盖
Azure Container App 缩放规则添加问题解答
1. 如何添加多个规则而不覆盖原有设置?
直接使用单组--scale-rule-name类参数执行az containerapp update会覆盖原有缩放规则,要实现规则追加,有两种可靠方式:
- 多次使用
--scale-rule参数:每个规则用一组完整的--scale-rule参数定义(包含名称、类型、元数据),多个规则依次声明即可实现追加,不会覆盖原有配置。示例:
az containerapp update -n $name -g $rg \ --scale-rule "name=cron-rule,type=cron,metadata.start=0 0 * * *,metadata.end=0 6 * * *,metadata.timezone=Asia/Shanghai,metadata.desiredReplicas=5" \ --scale-rule "name=mem-rule,type=memory,metadata.target=70"
- 先导出现有配置,追加后全量更新:先用
az containerapp show将当前配置导出为JSON文件,手动或通过脚本在properties.template.scaling.rules数组中添加新规则,再用az containerapp update --configuration或--set参数导入更新后的配置,确保原有规则不丢失。
2. 无需az containerapp update的其他方案
有两种脚本化的替代方案:
- Azure PowerShell Az模块:通过
Get-AzContainerApp获取现有容器应用对象,在其Template.Scaling.Rules属性中添加新的缩放规则对象,再调用Set-AzContainerApp提交增量更新,不会覆盖原有配置。示例:
$app = Get-AzContainerApp -Name $name -ResourceGroupName $rg # 创建Cron规则对象 $cronRule = New-AzContainerAppScaleRuleObject -Name "cron-rule" -Type "cron" -Metadata @{start="0 0 * * *"; end="0 6 * * *"; timezone="Asia/Shanghai"; desiredReplicas="5"} # 创建内存规则对象 $memRule = New-AzContainerAppScaleRuleObject -Name "mem-rule" -Type "memory" -Metadata @{target="70"} # 追加规则并提交更新 $app.Template.Scaling.Rules += $cronRule, $memRule Set-AzContainerApp -InputObject $app
- Azure REST API PATCH请求:调用容器应用的PATCH API,仅提交新增的缩放规则部分实现增量更新。请求URL格式为
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.App/containerApps/{containerAppName}?api-version=2023-05-01,请求体使用JSON Patch语法指定规则追加操作。
3. 是否无法在容器应用创建后添加多个缩放规则?
完全可以在创建后添加多个缩放规则,只要使用上述增量修改方式,避免用单组--scale-rule-name类参数直接覆盖原有配置即可。容器应用的缩放规则支持动态追加,不存在创建后无法添加的限制。
内容的提问来源于stack exchange,提问作者Pedro Costa
相关产品推荐
相关产品推荐

