如何在Terraform模块中通过数据源输出BigQuery表ID
解决Terraform获取BigQuery数据集表ID的问题
问题根源
你遇到的报错是因为data.google_bigquery_dataset.dataset.access是对象集合(set of objects),而非单个对象或有序列表,因此无法直接通过索引(如[0])或直接跨集合访问属性,必须通过遍历处理每个元素。
正确实现代码
要提取仅包含表ID的列表,需要通过for表达式遍历access集合,同时过滤出仅属于视图类型的条目(因为access中还包含用户、组等其他权限类型,只有VIEW类型的条目才有view属性):
data "google_bigquery_dataset" "dataset" { dataset_id = "my-dataset" project = "my-project" } output "bq_tables" { value = [ for item in data.google_bigquery_dataset.dataset.access : item.view.tableId if item.type == "VIEW" ] }
代码说明
for item in ...:遍历access集合中的每一个权限条目if item.type == "VIEW":仅筛选视图类型的权限条目,避免访问不存在view属性的条目导致报错item.view.tableId:提取每个视图条目中的表ID,最终组成纯表ID的列表
错误写法分析
access[0].view.tableId[0]:错误有两点:一是access是set类型,不支持数字索引;二是tableId是字符串类型,不需要用[0]索引access.view.tableId[0]:错误在于直接在集合对象上访问属性,Terraform无法自动遍历集合所有元素,必须显式使用for表达式处理
内容的提问来源于stack exchange,提问作者Deepesh P Belani
相关产品推荐
相关产品推荐

