You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terragrunt执行fmt时merge函数入参为string类型报错如何解决

问题根因
  • overrides.yaml语法不符合YAML规范:YAML的键值对需使用冒号+空格分隔,你当前使用了HCL的等号=语法,导致yamldecode解析后local.overrides.base_s3被识别为普通字符串,而非预期的map/object对象,触发merge函数的类型校验失败。
  • merge函数使用逻辑错误:merge的作用是合并多个map/object对象,仅传入单个参数属于无效调用,没有实际意义。
修复步骤
  1. 修正overrides.yaml的语法,将等号替换为冒号+空格:
base_s3:
  team: "staging-one"
  aws_region: "us-east-1"
  1. 修正terragrunt.hcl中overridden变量的定义,移除冗余的merge调用,直接取值即可:
local {
  team   = "testing-env"
  environment = "test-one"
  aws_region = "us-east-1"
  overrides_path = "${get_terragrunt_dir()}/overrides.yaml"
  overrides = yamldecode(fileexists(local.overrides_path) ? file(local.overrides_path) : "{}")
  # 修正后逻辑:文件存在时直接取base_s3对象,否则返回空map
  overridden = fileexists(local.overrides_path) ? local.overrides.base_s3 : {}
}

如果你确实需要将覆盖配置和默认S3配置合并,可以按照merge的正确用法传入多个参数,示例如下:

# 假设存在默认S3配置
default_s3 = {
  team = "testing-env"
  aws_region = "us-east-1"
  enable_versioning = true
}
# 合并默认配置和覆盖配置,覆盖配置优先级更高
overridden = fileexists(local.overrides_path) ? merge(local.default_s3, local.overrides.base_s3) : local.default_s3

内容的提问来源于stack exchange,提问作者dcloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:09:03