Terraform Init初始化模块阶段耗时过长,如何解决?
Terraform Init 拉取Git模块耗时过长排查与解决思路
问题背景
所有资源通过Terraform模块管理,terraform init原本1分钟即可完成,近期耗时突增至5-20分钟。开启TF_LOG=TRACE后确认:从Git仓库拉取模块耗时8分钟(时间戳09:22:43至09:30:45),但直接执行git clone该仓库可瞬间完成,排除Git本身问题。补充情况:
- 日志中出现Checkpoint连接超时错误,但无该错误时初始化延迟仍存在
- 升级至最新版Terraform无法解决延迟问题
排查与解决方法
1. 清理Terraform模块缓存
Terraform会将拉取的模块缓存至~/.terraform.d/modules目录,若缓存文件损坏或残留旧版本,可能导致拉取时校验、比对异常。
- 执行命令清理缓存:
清理后重新运行rm -rf ~/.terraform.d/modulesterraform init,观察耗时变化。
2. 强制Terraform使用Git浅克隆
直接git clone是完整克隆,但Terraform拉取模块时可能默认拉取全量历史、标签等内容,导致耗时增加。可强制启用浅克隆:
- 在模块引用中添加
shallow = true(Terraform 0.14+支持):module "example" { source = "git::https://your-git-repo-url.git//path/to/module?ref=main" shallow = true } - 或全局配置Git默认浅克隆,让Terraform继承该设置:
git config --global clone.defaultDepth 1
3. 禁用HashiCorp Checkpoint服务
Terraform初始化时会尝试连接Checkpoint服务做版本检查、遥测,即使超时也会触发重试逻辑,隐性增加耗时。可完全禁用该服务:
- 设置临时环境变量:
export TF_DISABLE_CHECKPOINT=true export TF_DISABLE_CHECKPOINT_SIGNAL=true - 或在
~/.terraformrc中添加永久配置:disable_checkpoint = true
4. 排查网络代理差异
直接git clone与Terraform拉取模块可能使用不同的代理配置,导致网络路径差异:
- 查看当前代理环境变量:
确认配置与直接执行echo $HTTP_PROXY $HTTPS_PROXY $NO_PROXYgit clone时一致,必要时临时取消代理后测试terraform init。
5. 检查Git仓库子模块
若模块仓库包含子模块,Terraform拉取时会递归拉取所有子模块,而直接git clone默认不会拉取子模块,这可能是耗时差异的原因:
- 检查仓库是否存在子模块:
若存在子模块,可优化子模块拉取速度,或调整Terraform模块引用逻辑,避免拉取不必要的子模块。git submodule status
内容的提问来源于stack exchange,提问作者PraveenBuilds
相关产品推荐
相关产品推荐

