我请求设置位于不同订阅中的资源组的预算警报。我试图决定通过PowerShell或Terraform来实现这个过程的自动化是否有意义。我的想法是,管理层将每季度更新一个.csv文件,其中包含他们希望设置警报形式的每个RGs的预算金额和警报阈值。.csv将有以下字段/列:
SubscriptionName,SubscriptionId,ResourcegGropu,StartDate,EndDate,TimeGrain,ContactEmails,Contact,BudgetAmount,budgetName,alertLevels
有什么建议吗?谢谢
发布于 2022-02-07 07:54:14
使用Terraform对不同订阅执行相同的操作将是困难的,因为在提供程序块中不支持for_each ,如下图所示,因此您必须手动为所有订阅设置提供程序块。
locals{
budget=csvdecode(file("C:/Users/xxxxx/terraform/budgetalert/Budget.csv"))
}
provider "azurerm"{
for_each ={ for i , user in local.budget : i => budget }
features{}
subscription_id = each.value.SubscriptionId
alias = each.value.SubscriptionName
}

作为从terraform执行此操作的解决方案,您可以为不同的订阅创建不同的.csv文件,并在不同的资源提供程序块中调用它们,如下所示:
provider "azurerm"{
features {}
subscription_id = "b83-----xxxxxxxxxxx-xxxx-xxxxx----23f"
}
provider "azurerm" {
features {}
subscription_id = "948--------x--xxxxxxxxxxxxx-xxxxxxx-59b"
alias = "Subscription2"
}
locals{
budgetsub1=csvdecode(file("C:/Users/xxxx/terraform/budgetalert/Budget.csv"))
budgetsub2=csvdecode(file("C:/Users/xxxx/terraform/budgetalert/budgetsub2.csv"))
}
output "local" {
value=local.budgetsub1
}
output "local1" {
value = local.budgetsub2
}
data "azurerm_resource_group" "rg_subscription1"{
for_each = { for i , budget in local.budgetsub1 : i => budget }
name= each.value.ResourceGroup
}
data "azurerm_resource_group" "rg_subscription2"{
provider = azurerm.Subscription2
for_each = { for i , budget in local.budgetsub2 : i => budget }
name= each.value.ResourceGroup
}
resource "azurerm_consumption_budget_resource_group" "rg_budget_subscription1" {
for_each = { for i , budget in local.budgetsub1 : i => budget }
name = each.value.budgetName
amount = each.value.BudgetAmount
time_grain = each.value.TimeGrain
time_period {
start_date = each.value.StartDate
end_date = each.value.EndDate
}
resource_group_id = data.azurerm_resource_group.rg_subscription1[each.key].id
notification {
enabled = true
threshold = 80
operator = "GreaterThanOrEqualTo"
contact_emails = ["${each.value.ContactEmails}"]
}
lifecycle {
ignore_changes = [
time_period
]
}
}
resource "azurerm_consumption_budget_resource_group" "rg_budget_subscription2" {
provider = azurerm.Subscription2
for_each = { for i , budget in local.budgetsub2 : i => budget }
name = each.value.budgetName
amount = each.value.BudgetAmount
time_grain = each.value.TimeGrain
time_period {
start_date = each.value.StartDate
end_date = each.value.EndDate
}
resource_group_id = data.azurerm_resource_group.rg_subscription2[each.key].id
notification {
enabled = true
threshold = 80
operator = "GreaterThanOrEqualTo"
contact_emails = ["${each.value.ContactEmails}"]
}
lifecycle {
ignore_changes = [
time_period
]
}
}输出:



https://stackoverflow.com/questions/71012986
复制相似问题