You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM脚本创建绑定Function App上游的无服务器SignalR的循环依赖问题咨询

循环依赖问题解决说明

完全可以通过预定义Function App密钥的方式绕开自动生成密钥的时序限制,实现全流程自动化部署,以下是具体实现方案:

核心原理

循环依赖的根源在于两个资源的配置互相依赖对方的输出值,且默认signalr_extension密钥需要SignalR触发的函数部署完成后才会自动生成。我们通过提前手动预定义该密钥的固定值,绕开自动生成的逻辑,就可以提前拿到密钥值用于SignalR的Upstream配置,同时该预定义的密钥会被后续部署的SignalR扩展直接识别使用,不会被覆盖。
你之前尝试用listkeys/listsecrets获取失败的核心原因是,默认部署阶段signalr_extension密钥资源还未生成,自然无法获取到返回值。

ARM模板实现步骤

  • 第一步:预生成随机密钥,可通过ARM内置的uniqueString函数生成,也可以作为安全参数传入模板,避免硬编码。
  • 第二步:优先创建Serverless模式的Azure SignalR资源,输出其连接字符串备用。
  • 第三步:创建Function App资源,配置AzureSignalRConnectionString应用设置为上一步拿到的SignalR连接串,同时通过Microsoft.Web/sites/host/functionKeys资源类型提前写入预定义的signalr_extension密钥:
{
  "type": "Microsoft.Web/sites/host/functionKeys",
  "apiVersion": "2022-03-01",
  "name": "[concat(parameters('functionAppName'), '/default/signalr_extension')]",
  "dependsOn": [
    "[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]"
  ],
  "properties": {
    "name": "signalr_extension",
    "value": "[parameters('predefinedSignalrExtensionKey')]"
  }
}
  • 第四步:待Function App和预定义密钥资源创建完成后,更新SignalR资源的Upstream Setting,直接用预定义的密钥拼接URL模板即可,无需调用listkeys获取。

Azure CLI脚本实现步骤

  • 第一步:生成随机的预定义密钥
predefinedKey=$(openssl rand -hex 16)
  • 第二步:创建SignalR资源并获取连接串
az signalr create -n <你的SignalR名称> -g <资源组名称> --sku Standard_S1 --unit-count 1 --service-mode Serverless
signalrConnStr=$(az signalr key list -n <你的SignalR名称> -g <资源组名称> --query primaryConnectionString -o tsv)
  • 第三步:创建Function App并配置SignalR连接串
# 请根据你的实际 runtime 替换参数
az functionapp create -n <你的Function App名称> -g <资源组名称> --storage-account <关联存储账号名称> --consumption-plan-location <区域> --runtime dotnet-isolated
az functionapp config appsettings set -n <你的Function App名称> -g <资源组名称> --settings AzureSignalRConnectionString=$signalrConnStr
  • 第四步:手动写入预定义的signalr_extension密钥
az functionapp keys set -n <你的Function App名称> -g <资源组名称> --key-type functionKeys --key-name signalr_extension --key-value $predefinedKey
  • 第五步:更新SignalR的Upstream配置
az signalr upstream update -n <你的SignalR名称> -g <资源组名称> --template "url-template=https://<你的Function App名称>.azurewebsites.net/runtime/webhooks/signalr?code=$predefinedKey"

如果你不想手动预定义密钥,也可以采用三阶段部署流程:第一阶段部署SignalR拿到连接串,第二阶段部署Function App+上传函数代码等待signalr_extension自动生成,第三阶段通过az functionapp keys list获取生成的密钥再更新SignalR的Upstream配置,只是流程会多一个部署阶段。

内容的提问来源于stack exchange,提问作者pathrider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:45:03