我正在尝试使用terraform部署BigQuery计划查询,但我不知道如何使用list
和for_each
语法。
我有这个模板文件。
SELECT *
FROM mydataset.mytable_${suffix}
然后使用template_file模块生成查询列表。 var.suffix_list
这里是字符串列表。
data "template_file" "query" {
for_each = var.suffix_list # list(string)
template = "file/path/to/template/file"
vars = {
suffix = each.value
}
}
我要从此模块生成查询列表。
output "query" {
value = # a list of rendered query
}
此输出将是google_bigquery_data_transfer_config
资源的输入。
resource "google_bigquery_data_transfer_config" "query_config" {
for_each = # a list of rendered query
data_refresh_window_days = var.data_refresh_window_days
data_source_id = "scheduled_query"
display_name = var.display_name
disabled = var.disabled
destination_dataset_id = var.destination_dataset_id
location = var.query_location
project = var.gcp_project
schedule = var.query_schedule
params = {
destination_table_name_template = var.destination_table_name_template
query = each.value
}
}
如何为google_bigquery_data_transfer_config
输出定义和输入?
预先感谢。
答案 0 :(得分:2)
要完成这项工作,需要做几件事。
您对for_each
的参数应该是一个集合,因此您需要使用
for_each = toset(var.suffix_list)
在模板本身中,变量名为suffix
,但是,您正在传递变量schema
。这些应该匹配。
template
参数实际上需要是模板的文本。因此,您需要使用file
函数来读取文件,例如
template = file("path/to/template/file")
然后,最后,要编写您的实际输出,可以使用列表理解
output "query" {
value = [for query in data.template_file.query : query.rendered]
}