如何在 Bicep 中填充 Azure SignalR 服务的上游代码

How to populate Azure SignalR Service's upstream code in Bicep

我有一个 Bicep 模板,可以根据以下脚本创建 Azure SignalR 服务。如何在二头肌模板中获取上游的 code 值并根据它填充 urlTemplate 的代码值? (关键字 TBD 在以下代码中显示确切位置。)

targetScope = 'resourceGroup'
param location string = resourceGroup().location
param signalRName string

resource signalR 'Microsoft.SignalRService/signalR@2022-02-01' = {
  name: signalRName
  location: location
  kind: 'SignalR'
  sku: {
    name: 'Free_F1'
    tier: 'Free'
    capacity: 1
  }
  properties: {
    features: [
      {
        flag: 'ServiceMode'
        value: 'Serverless'
      }
      {
        flag: 'EnableConnectivityLogs'
        value: 'true'
      }
      {
        flag: 'EnableMessagingLogs'
        value: 'true'
      }
      {
        flag: 'EnableLiveTrace'
        value: 'true'
      }
    ]
    liveTraceConfiguration: {
      enabled: 'true'
      categories: [
        {
          name: 'ConnectivityLogs'
          enabled: 'true'
        }
        {
          name: 'MessagingLogs'
          enabled: 'true'
        }
        {
          name: 'HttpRequestLogs'
          enabled: 'true'
        }
      ]
    }
    cors: {
      allowedOrigins: [
        '*'
      ]
    }
    upstream: {
      templates: [
        {
          hubPattern: '*'
          eventPattern: '*'
          categoryPattern: '*'
          auth: {
            type: 'None'
          }
          urlTemplate: 'https://${signalRName}.azurewebsites.net/runtime/webhooks/signalr?code=TBD'
        }
      ]
    }
  }
}

我假设您使用的函数应用程序与您的 signalR 服务同名。

查看 documentation:

  • url 总是那样 <Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
  • API_KEY 是一个名为 signalr_extension 的函数应用程序系统键。

因此您应该能够检索密钥并像这样使用它:

var signalRKey = listKeys(resourceId('Microsoft.Web/sites/host', signalRName, 'default'), '2022-03-01').systemkeys.signalr_extension

resource signalR 'Microsoft.SignalRService/signalR@2022-02-01' = {
  name: signalRName
  ...
  properties: {
    ...
    upstream: {
      templates: [
        {
          ...
          urlTemplate: 'https://${signalRName}.azurewebsites.net/runtime/webhooks/signalr?code=${signalRKey}'
        }
      ]
    }
  }
}