指定模块时,terraform init不起作用

时间:2019-02-11 19:00:48

标签: terraform terraform-provider-aws

我是terraform的新手,正在尝试解决测试模块时面临的一个小问题。

下面是我在本地计算机上拥有的文件夹结构。

enter image description here

我在存储文件夹级别具有以下代码

#-------storage/main.tf

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "my-first-terraform-bucket" {
    bucket = "first-terraform-bucket"
    acl = "private"
    force_destroy = true
}

main_code级别下引用存储模块的代码段

#-------main_code/main.tf

module "storage" {
    source = "../storage"
}

当我从存储文件夹发出terraform init / plan / apply时,它工作得很好,并且terraform创建了s3存储桶。

但是当我尝试从main_code文件夹尝试相同操作时,出现以下错误-

main_code@DFW11-8041WL3: terraform init
Initializing modules...
- module.storage
Error downloading modules: Error loading modules: module storage: No Terraform configuration files found in directory: .terraform/modules/0d1a7f4efdea90caaf99886fa2f65e95

我已经阅读了许多关于堆栈溢出和其他github问题论坛的问题公告板,但并没有帮助解决这个问题。不知道我在想什么!

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,但对我来说问题是,我创建的模块正在寻找 providers.tf,因此也必须为模块添加它并且它起作用了。 >

├── main.tf
├── modules
│   └── droplets
│       ├── main.tf
│       ├── providers.tf
│       └── variables.tf
└── variables.tf

所以我的提供者存在于之前的根位置,哪些模块无法使用,所以这对我来说是个问题。

答案 1 :(得分:0)

我同意@rclement的评论。

几种解决Terraform问题的方法。

  1. 清理jq --argjson filter "$filter" ' map((.title | split(" ")) as $title | select(all( $title[] as $t | $filter[] as $kw | $kw != $t )))' input.json 文件夹,然后重新运行.terraform

这始终是第一选择。但是,下次运行terraform init会花费一些时间,它将再次开始安装所有提供程序和模块。

  1. 如果您不想清理terraform init来节省部署时间,则可以运行.terraform

大多数情况下,您对模块进行了一些更改,因此需要刷新。

答案 2 :(得分:0)

只需运行terraform get --update来更新现有模块。如果这样不起作用,请删除.terraform文件夹。