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

Terragrunt状态文件被覆盖:多模块执行apply资源误删求助

问题原因与解决方案

问题根源

你当前的remote_state配置中,状态文件路径为${get_parent_terragrunt_dir()}/${local.aws_profile}-terraform.tfstate,其中get_parent_terragrunt_dir()会返回当前Terragrunt配置文件所在目录的父目录。对于dev/IAM/terragrunt.hcl和dev/S3/terragrunt.hcl来说,它们的父目录都是dev,这导致两个模块共用同一个本地状态文件。

当你在IAM目录执行terragrunt apply时,状态文件记录了IAM资源;切换到S3目录执行时,Terragrunt加载同一个状态文件,发现当前S3模块的配置中没有之前的IAM资源,就会判定这些资源需要被销毁,随后创建S3资源——本质是不同模块共享覆盖了同一个状态文件。

解决方法

修改根目录terragrunt.hcl中的remote_state配置,给状态文件路径添加模块唯一标识,确保每个模块拥有独立的状态文件。例如,提取当前模块目录的最后一级名称作为标识:

remote_state {
  backend = "local"
  config = {
    path = "${get_parent_terragrunt_dir()}/${local.aws_profile}-${basename(get_terragrunt_dir())}-terraform.tfstate"
  }
}

修改后,IAM模块的状态文件路径会变为dev/xxx-IAM-terraform.tfstate,S3模块的路径为dev/xxx-S3-terraform.tfstate,二者状态文件独立,不会再出现互相覆盖、误销毁资源的问题。

另外,本地后端仅适合测试场景,若后续需要多人协作或更可靠的状态管理,建议切换至S3+DynamoDB这类远程后端,同时支持状态锁定功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:40:05