如何在Terraform中拆分any类型变量并提取bucket_name值?
提取Terraform any类型变量中的bucket_name值
针对你的场景,要提取目标bucket_name,关键是定位变量内部的层级结构:var.replica_config.rules是一个数组,每个数组元素下的destination.bucket就是你需要的值。
场景1:规则数组仅含单个元素
直接通过索引访问即可拿到目标值:
output "bucket_name" { value = var.replica_config.rules[0].destination.bucket }
场景2:规则数组存在多个元素,提取所有bucket名称
如果后续规则可能不止一条,用for表达式遍历数组提取所有bucket值:
output "all_bucket_names" { value = [for rule in var.replica_config.rules : rule.destination.bucket] }
输出结果会是一个包含所有bucket名称的数组,格式类似["bucket_name1", "bucket_name2"]。
额外提一句:虽然当前变量类型设为any也能正常访问内部结构,但如果后续变量的结构固定,建议把type定义为更具体的对象类型,这样能提前发现配置错误,示例如下:
variable "replica_config" { type = object({ role = string rules = list(object({ id = string status = bool priority = number delete_marker_replication = bool destination = object({ bucket = string storage_class = string replica_kms_key_id = string account_id = string replication_time = object({ status = string minutes = number }) }) })) }) default = { role = "role_name" rules = [ { id = "full-s3-replication" status = true priority = 10 delete_marker_replication = false destination = { bucket = "bucket_name" storage_class = "STANDARD" replica_kms_key_id = "key_id" account_id = "account_id" replication_time = { status = "Enabled" minutes = 15 } } } ] } }
内容的提问来源于stack exchange,提问作者Sebastien
相关产品推荐
相关产品推荐

