gpt4 book ai didi

通过 Bicep 创建函数应用程序时,Azure 函数应用程序的 signalr_extension 未填充以在 signalR 上游中使用

转载 作者:行者123 更新时间:2023-12-03 02:13:30 24 4
gpt4 key购买 nike

我通过 Bicep 创建了一个 Azure Function App,并尝试获取 signalr_extension 的值以在无服务器 Azure SignalR 服务的“上游”配置部分中使用。这就是我尝试在二头肌中获取该值的方法:

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

这是我配置 signalR 服务上游的方式:

urlTemplate: 'https://${funcAppName}.azurewebsites.net/runtime/webhooks/signalr?code=${signalRKey}'

运行二头肌模板会导致以下失败:

Encountered an error (ServiceUnavailable) from host runtime.

当我从 urlTemplate 中删除 {signalRKey} 并将其替换为虚构的硬编码值时,signalR 已成功配置。

我注意到的另一件事是,在配置函数应用后,singalr_extension 键值未填充。

本练习中我缺少什么?

最佳答案

只有在使用 SignalRTrigger 函数部署函数应用后,才会创建 signalr_extension
如果您同时部署 Function App 和 signalR 服务,则可以预先生成此 key :

param functionAppName string

// Create the function app key for signalR
resource signalRKey 'Microsoft.Web/sites/host/systemkeys@2021-03-01' = {
name: '${functionAppName}/default/signalr_extension'
properties: {
name: 'signalr_extension'
}
}

用于生成功能键的 ARM API 仅指向功能应用程序 API,因此可能需要一些时间才能使用(请参阅 github 上的问题)。

通过使用模块部署系统 key 和信号器,我设法使其始终如一地工作。
此外,对于在 linux 上运行的函数应用,AzureWebJobsStorage 设置是必需的。

functionapp-systemkey.bicep 模块:

param functionAppName string
param keyName string

resource signalRKey 'Microsoft.Web/sites/host/systemkeys@2021-03-01' = {
name: '${functionAppName}/default/${keyName}'
properties: {
name: keyName
}
}

signalr.bicep 模块:

param location string = resourceGroup().location

param signalRName string
param functionAppName string

resource signalR 'Microsoft.SignalRService/signalR@2022-02-01' = {
name: signalRName
location: location
sku: {
name: 'Free_F1'
tier: 'Free'
capacity: 1
}
properties: {
features: [
{
flag: 'ServiceMode'
value: 'Serverless'
}
{
flag: 'EnableConnectivityLogs'
value: 'true'
}
]
cors: {
allowedOrigins: [
'*'
]
}
tls: {
clientCertEnabled: false
}
upstream: {
templates: [
{
hubPattern: '*'
eventPattern: '*'
categoryPattern: '*'
auth: {
type: 'None'
}
urlTemplate: 'https://${signalRName}.azurewebsites.net/runtime/webhooks/signalr?code=${listKeys(resourceId('Microsoft.Web/sites/host', functionAppName, 'default'), '2022-03-01').systemkeys.signalr_extension}'
}
]
}
}
}

main.bicep:

param location string = resourceGroup().location

param storageName string
param appServicePlanName string
param functionAppName string
param signalRName string

resource storage 'Microsoft.Storage/storageAccounts@2021-09-01' = {
name: storageName
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
properties: {
supportsHttpsTrafficOnly: true
minimumTlsVersion: 'TLS1_2'
}
}

resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
name: appServicePlanName
location: location
sku: {
name: 'Y1'
tier: 'Dynamic'
size: 'Y1'
family: 'Y'
capacity: 0
}
kind: 'functionapp'
properties: {
perSiteScaling: false
elasticScaleEnabled: false
maximumElasticWorkerCount: 1
isSpot: false
reserved: true
isXenon: false
targetWorkerCount: 0
targetWorkerSizeId: 0
zoneRedundant: false
}
}

resource functionApp 'Microsoft.Web/sites@2021-03-01' = {
name: functionAppName
location: location
kind: 'functionapp,linux'
properties: {
serverFarmId: appServicePlan.id
clientAffinityEnabled: false
clientCertEnabled: false
httpsOnly: true
siteConfig:{
linuxFxVersion: 'DOTNET|6.0'
use32BitWorkerProcess: true
ftpsState: 'FtpsOnly'
cors: {
allowedOrigins: [
'https://portal.azure.com'
]
supportCredentials: false
}
minTlsVersion: '1.2'
appSettings: [
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: 'dotnet'
}
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storage.name};AccountKey=${listKeys(storage.id, '2019-06-01').keys[0].value};EndpointSuffix=core.windows.net;'
}
]
}
}
}

var signalrKeyName = 'signalr_extension'
module signalrKey 'modules/functionapp-systemkey.bicep' = {
name: '${functionAppName}-systemkey-${signalrKeyName}'
params: {
functionAppName: functionApp.name
keyName: signalrKeyName
}
}

module signalr 'modules/signalr.bicep' = {
name: signalRName
params: {
location: location
functionAppName: functionApp.name
signalRName: signalRName
}
dependsOn:[
signalrKey
]
}

关于通过 Bicep 创建函数应用程序时,Azure 函数应用程序的 signalr_extension 未填充以在 signalR 上游中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72368709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com