Terraform 如何确定何时下载模块?

How does terraform determine when to download modules?

我想使用terraform的EKS模块

module "eks" {
    source = "terraform-aws-modules/eks/aws"
    version = "17.22.0"
    ...
}

这工作正常。

我想要实现的是,如果模块已存在于本地,terraform 不会下载该模块。我正在使用 terraform 变量 TF_DATA_DIR 来设置 terraform 的数据目录。

export TF_DATA_DIR="${SOME_DIR}/.terraform"

当我 运行 宁 terraform init 时,EKS 模块仍然从注册表中提取,即使该模块存在于本地。当我 运行 terraform init 第二次时,这不会发生。

terraform init
terraform init

输出:

...
Initializing modules...
Downloading terraform-aws-modules/eks/aws 17.22.0 for eks.eks...
- eks.eks in .terraform/modules/eks.eks
- eks.eks.fargate in .terraform/modules/eks.eks/modules/fargate
- eks.eks.node_groups in .terraform/modules/eks.eks/modules/node_groups
...
Initializing modules...
...

文件总是加载到 "${SOME_DIR}/.terraform",所以我希望 TF_DATA_DIR 能按预期工作。

如何防止 terraform 下载已经存在的模块?我不想使用本地路径,我想使用缓存机制。

我使用的是 Terraform 版本 0.14.7

找到解决方案:

由于我使用了 terraform 变量 TF_DATA_DIR,每次 terraform init 执行时的值都不同,因此 .terraform/modules/modules.json 中的内容不同,因此已重新下载。