通常,通过二头肌模块创建 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