0

通常,通过二头肌模块创建 Azure 资源时,我会有 2 个文件。一个文件指定用于保存参数化资源,另一个文件是主文件,它将使用该模块。

作为创建操作组的示例,我的资源文件如下所示:

动作组.二头肌

param actionGroupName string
param groupShortName string
param emailReceivers array = []

// Alerting Action Group
resource action_group 'microsoft.insights/actionGroups@2019-06-01' = {
  name: actionGroupName
  location: 'global'
  tags: {}
  properties: {
    groupShortName: groupShortName
    enabled: true
    emailReceivers: emailReceivers
  }
}

然后,此资源作为主文件 main.bicep 中的一个模块使用:

// Alerting Action Group
module actionGroup '../modules/alerts/alert-group.bicep' = {
  name: 'action-group-dply'
  params: {
    actionGroupName: actionGroupName
    groupShortName: actionGroupShortName
    emailReceivers: [
      {        
        name: '<Name of email receivers>'
        emailAddress: alertEmailList
      }
    ]
  }
}

我的管道引用 main.bicep 并将部署文件中列出的资源。我的问题是,有没有办法在混合中添加第三个文件?一个文件仍然保存参数化资源,一个文件保存关联的资源模块,以及 main.bicep 文件。这个想法是在我现有的资源中创建各种警报,但我不想在 main.bicep 中添加大量模块,因为它会迅速增加该文件中代码的复杂性和数量。

有没有办法让我拥有这个模块文件,并引用 main.bicep 中的整个文件以仍然从原始管道进行部署?

例如:alerts.bicep

param metricAlertsName string
param description string
param severity int
param enabled bool = true
param scopes array = []
param evaluationFrequency string
param windowSize string
param targetResourceRegion string = resourceGroup().location
param allOf array = []
param actionGroupName string

var actionGroupId = resourceId(resourceGroup().name, 'microsoft.insights/actionGroups', actionGroupName)

resource dealsMetricAlerts 'Microsoft.Insights/metricAlerts@2018-03-01' = {
  name: metricAlertsName
  location: 'global'
  tags: {}
  properties: {
    description: description
    severity: severity
    enabled: enabled
    scopes: scopes
    evaluationFrequency: evaluationFrequency
    windowSize: windowSize
    targetResourceRegion: targetResourceRegion
    criteria: {
      'odata.type': 'Microsoft.Azure.Monitor.SingleResourceMultipleMetricCriteria'
      allOf: allOf
    }
    actions: [
      {
        actionGroupId: actionGroupId
      }
    ]
  }

警报模块.二头肌

// Function/Web Apps 403 Error
module appServicePlan403Errors '../modules/alerts/alerts.bicep' = {
   // Alert Logic
}

// Function/Web Apps 500 Error
module appServicePlan500Errors '../modules/alerts/alerts.bicep' = {
  // Alert Logic
}

主二头肌

// Some reference to alert-modules.bicep so when the pipeline runs and looks for main.bicep, it will still deploy all the resources
4

1 回答 1

1

您可以使用循环多次调用模块(在 main.bicep 或模块中):

https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/loops

例如

param alertsCollection array = [
  {
    actionGroupName: 'group1'
    groupShortName: 'g1'
    emailReceivers: []
  }
  {
    actionGroupName: 'group2'
    groupShortName: 'g2'
    emailReceivers: [
      'foo@bar.com'
      'bar@baz.com'
    ]
  }
]

module alerts '../modules/alerts/alert-group.bicep' = [for alert in alertsCollection): {
  name: '${alert.actionGroupName}'
  params: {
    actionGroupName: alert.actionGroupName
    groupShortName: alert.groupShortName
    emailReceivers: alert.emailReceivers
 }
}]

您可以通过以下方式简化参数传递:

module alerts '../modules/alerts/alert-group.bicep' = [for alert in alertsCollection): {
  name: '${alert.actionGroupName}'
  params: alert
}]

但是您需要对 alertsCollection 参数的架构非常严格......

这种帮助?

于 2021-10-28T17:30:50.057 回答