Terraform 12 中的动态数据源
Dynamic data source in 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,您可以这样做:
# declare the variables
variable "action_group_names" {
default = ["nancyAG1","nancyAG2"]
}
# retrieve 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。
我正在使用 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,您可以这样做:
# declare the variables
variable "action_group_names" {
default = ["nancyAG1","nancyAG2"]
}
# retrieve 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。