首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure成本管理-预算警报脚本

Azure成本管理-预算警报脚本
EN

Stack Overflow用户
提问于 2022-02-07 02:51:26
回答 1查看 248关注 0票数 0

我请求设置位于不同订阅中的资源组的预算警报。我试图决定通过PowerShell或Terraform来实现这个过程的自动化是否有意义。我的想法是,管理层将每季度更新一个.csv文件,其中包含他们希望设置警报形式的每个RGs的预算金额和警报阈值。.csv将有以下字段/列:

SubscriptionName,SubscriptionId,ResourcegGropu,StartDate,EndDate,TimeGrain,ContactEmails,Contact,BudgetAmount,budgetName,alertLevels

有什么建议吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-07 07:54:14

使用Terraform对不同订阅执行相同的操作将是困难的,因为在提供程序块中不支持for_each ,如下图所示,因此您必须手动为所有订阅设置提供程序块。

代码语言:javascript
复制
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文件,并在不同的资源提供程序块中调用它们,如下所示:

代码语言:javascript
复制
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
    ]
  }
}

输出:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71012986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档