azure - 嵌套资源不能出现在带有 for 表达式的资源内部

标签 azure esb azure-bicep infrastructure-as-code

我想生成一个带有二头肌和几个主题的 ESB。每个主题可以有一个或多个订阅。这些都在此列表中定义。

var topics = [{
  name: 'topic.one'
  subscriptions: [ 'esm', 'erp', 'pms' ]
}, {
  name: 'topic.two'
  subscriptions: [ 'esm' ]
}, {
  name: 'topic.three'
  subscriptions: [ 'erp', 'insights' ]
}, {
  name: 'topic.four'
  subscriptions: [ 'pms', 'cmdb']
}, {
  name: 'topic.five'
  subscriptions: [ 'billing', 'custom', 'erp', 'dax' ]
}]

当我创建资源时,最简单、最动态的解决方案将在循环内创建一个循环,如下所示。

resource sb_events 'Microsoft.ServiceBus/namespaces@2022-01-01-preview' = {
  name: 'servicebus-events'
  location: 'westeurope'
  sku: {
    capacity: 1
    name: 'Standard'
    tier: 'Standard'
  }

  resource topic_resources 'topics' = [for topic in topics: {
    name: topic.name  

    resource subscription_resources 'subscriptions' = [for subscription in topic.subscriptions: {
      name: subscription
      properties: vSubscriptionProperties
    }]
  }]
}

但这给了我下一个错误:

A nested resource cannot appear inside of a resource with a for-expression. bicep(BCP160)

当这段代码看起来符合逻辑时,二头肌编译器不接受它。我该如何解决这个问题?

最佳答案

Bicep 目前不支持嵌套循环:

您可以有一个创建主题和订阅的模块:

// sb-topic-and-subscriptions.bicep
param namespaceName string
param topicName string
param subscriptionNames array
param vSubscriptionProperties  object

resource namespace 'Microsoft.ServiceBus/namespaces@2022-01-01-preview' existing = {
  name: namespaceName
}

resource topic 'Microsoft.ServiceBus/namespaces/topics@2022-01-01-preview' = {
  parent: namespace
  name: topicName

  resource subscriptions 'subscriptions' = [for sub in subscriptionNames: {
    name: sub
    properties: vSubscriptionProperties
  }]
}

然后你可以从你的 main 中调用它:

...
// loop and create all the topics and subscription.
module topicsModule 'sb-topic-and-subscriptions.bicep' = [for topic in topics: {
  name: topic.name
  params: {
    namespaceName: 'servicebus-events'
    subscriptionNames: topic.subscriptions
    topicName:  topic.name
    vSubscriptionProperties: vSubscriptionProperties
  }
}]

关于azure - 嵌套资源不能出现在带有 for 表达式的资源内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76099899/

相关文章:

esb - apache 突触自定义调解器

c# - 如何在不使用临时文件的情况下将 .NET 对象序列化到 Azure Blob 存储中?

Azure - 基于 YAML 的管道中的自定义条件

java - 调用远程 ESB 客户端错误

rest - Hub、Spoke 和 ESB 之间的区别

azure - 通过 Bicep 为 StaticWebApp 创建 AppInsights 实例

Azure Landing Zone Bicep Accelerator - 解释 .env 文件的值

azure - 如何通过 Bicep 将功能应用程序键添加到logicapp应用程序设置

azure - 如何将云上托管的 MySQL 数据库连接到 Azure 数据工厂?

azure - Unity Catalog - 使用服务主体访问外部位置