Terraform模块source地址中双斜杠的作用原理是什么?
Terraform模块源中双斜杠的工作原理解释
核心逻辑:双斜杠是模块包与子模块的分隔符
在Terraform Registry模块的引用规则里,双斜杠//是一个特殊分隔符,用来明确区分Registry上的模块包地址和包内部的子模块相对路径:
- 双斜杠前面的部分
terraform-aws-modules/eks/aws是Terraform Registry上的标准模块包标识(格式为namespace/module-name/provider),对应官方的EKS模块包。 - 双斜杠后面的
modules/karpenter则是这个已下载的模块包内部的子模块路径,告诉Terraform要使用该包下的karpenter子模块。
单斜杠报错的原因
当你改成单斜杠后,Terraform会把整个字符串terraform-aws-modules/eks/aws/modules/karpenter当作一个完整的模块包标识去Registry查找,但Registry上根本不存在这个命名的模块包(正确的包名是terraform-aws-modules/eks/aws)。此时Terraform无法识别这是Registry模块引用,会误以为你要引用本地文件路径,因此抛出错误提示你添加./前缀。
本地目录结构的验证
执行terraform init后,Terraform会先完整拉取terraform-aws-modules/eks/aws整个模块包到本地.terraform/modules目录,再根据双斜杠后的路径定位到包内的modules/karpenter子模块,这也直观印证了双斜杠的拆分逻辑:先拉取完整模块包,再加载指定子模块。
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

