【发布时间】:2023-02-22 20:32:51
【问题描述】:
我正在尝试使用 Terraform 为哨兵解决方案部署警报规则。我使用来自 Azure 提供商的 sentinel_alert_rule_scheduled 资源,并且在警报规则的查询中有一个硬编码的值列表。
由于列表中的元素可以不时更改,我想从查询中取出列表并使用变量(局部变量应该是理想的)引用它。我需要了解 Terraform 中的支持才能实现这一目标。
当前警报规则资源:
resource "azurerm_sentinel_alert_rule_scheduled" "alert_rule_scheduled" {
name = some_name
log_analytics_workspace_id = some_log_analytics_workspace_id
display_name = some_.display_name
description = some_description
enabled = true
severity = "Low"
query = <<QUERY
let someList = dynamic([element1,element2,element3,...])
.
.[query goes on]
.
QUERY
query_frequency = "PT1H"
query_period = "PT1H"
trigger_operator = "GreaterThan
trigger_threshold = 0
suppression_enabled = false
tactics = ["IP"]
}
我想重构上面的代码是这样的:
resource "azurerm_sentinel_alert_rule_scheduled" "alert_rule_scheduled" {
name = some_name
log_analytics_workspace_id = some_log_analytics_workspace_id
display_name = some_.display_name
description = some_description
enabled = true
severity = "Low"
query = <<QUERY
let someList = dynamic(${local.my_list_variable})
.
.[query goes on]
.
QUERY
query_frequency = "PT1H"
query_period = "PT1H"
trigger_operator = "GreaterThan
trigger_threshold = 0
suppression_enabled = false
tactics = ["IP"]
}
locals {
my_list_variable = [element1,element2,element3,...]
}
使用 $local.my_list_variable 会出现错误 Invalid template interpolation value。
我想知道我们是否可以在 Terraform 中做这种事情,如果可以,正确的做法是什么。
【问题讨论】:
-
您是否尝试过不带大括号和美元符号的
local.my_list_variable? -
@MarkoE 感谢您的评论。然后它像查询的字符串部分一样对待。我认为那也行不通。
-
my_list_variable = [element1,element2,element3,...]这甚至不是有效的 TF 代码。因此,不清楚您要实现的目标。也不可能得到您报告的错误,因为,好吧,您的 TF 一开始就不正确。 -
@Marcin 感谢您的评论。您能否进一步解释为什么它不是有效代码,例如,我不能将 TF 局部变量作为 locals { fruits = ["Apple","Banana","Mango"]} 吗?如果没有,我应该如何申报。
-
fruits = ["Apple","Banana","Mango"]是正确的,但my_list_variable = [element1,element2,element3,...]不是。您当前的代码让我相信,在您实际代码的其他区域,您也有一些语法错误,从而导致您的问题。
标签: syntax terraform terraform-provider-azure kql azure-sentinel