微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Terraform 12中的动态数据源

如何解决Terraform 12中的动态数据源

我正在使用terraform在Azure中创建警报(azurerm_monitor_scheduled_query_rules_alert)。您可以包括操作组列表(即向其发送警报的组)。

在TFVars文件中,我将传入动作组名称列表的变量值。但是,警报模块需要资源的ID,而不是名称。因此,我有一个数据源,该数据源将获取操作组的信息。然后,Alert资源可以引用数据源以获取Azure资源ID。

如果我只有一个动作组,这很好用,但是带有动作组名称的列表的大小可以变化。我试图弄清楚如何将所有操作组名称转换为ID,以供资源提取

resource "azurerm_monitor_scheduled_query_rules_alert" "tfTestAlertExample" {
for_each = {for alert in var.scheduled_query_alerts : alert.name => alert}

  name                = each.value["name"]
  location            = data.azurerm_resource_group.resource_group.location
  resource_group_name = data.azurerm_resource_group.resource_group.name

  action {

    # --This part here. How do I get make this dynamic?--
    action_group           = [
      data.azurerm_monitor_action_group.action_group.id
    ] 

    email_subject          = each.value["email_subject"]
    custom_webhook_payload = "{}"
  }

  data_source_id = ................ etc

因此,在上面的示例中,将只有一个action {}块,但是其中的Action_group列表需要是动态的,并且ID是从数据源中检索到的。也许还有另一种我没有考虑过的方法

任何帮助将不胜感激。

解决方法

如果您只想将操作组名称列表转换为其ID,则可以执行以下操作:

# decalre the variables
variable "action_group_names" {
  default = ["nancyAG1","nancyAG2"]
}

# restrive the Id of action group
data "azurerm_monitor_action_group" "example" {
  count = length(var.action_group_names)
  resource_group_name = "existingRG"
  name                = element(var.action_group_names,count.index)
}

# output the result to the terminal
output "groups_id" {
  value = data.azurerm_monitor_action_group.example[*].id
  
}

然后将ID传递给资源,如下所示:

resource "azurerm_monitor_scheduled_query_rules_alert" "example" {
  name                = format("%s-queryrule",var.prefix)
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name

  action {
    action_group           = data.azurerm_monitor_action_group.example[*].id
    email_subject          = "Email Header"
    custom_webhook_payload = "{}"
  }

检查action_group ID。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。