terraform init не работает при указании модулей

Я новичок в terraform и пытаюсь исправить небольшую проблему, с которой сталкиваюсь при тестировании модулей.

Ниже представлена ​​структура папок на моем локальном компьютере.

введите здесь описание изображения

У меня есть код ниже на уровне папки хранилища

#-------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, но не помог решить эту проблему. Не уверен, что мне не хватает!


person sai kumar    schedule 11.02.2019    source источник
comment
попробуйте удалить .terraform в папке ./storage. Кроме того, если ./storage является модулем, вам не нужно включать раздел provider aws, поскольку он будет унаследован от любого кода, вызывающего модуль.   -  person rclement    schedule 11.02.2019


Ответы (3)


Просто обновите существующие модули, запустив terraform get --update. Если это не сработает, удалите папку .terraform.

person Vaibhav Jain    schedule 12.02.2019

У меня была аналогичная проблема, но проблема для меня заключалась в том, что созданный мной модуль искал Provider.tf, поэтому мне пришлось добавить его и для модулей, и это сработало.

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

Таким образом, мои провайдеры присутствовали в корневых местоположениях, которые ранее не могли использоваться модулями, поэтому проблема для меня.

person Tara Prasad Gurung    schedule 15.02.2021
comment
это решило проблему для меня. Я ошибочно предположил, что поставка version.tf в корневой каталог будет распространяться на подмодули ... нет. Версии необходимо размещать в подмодулях, где они используются, иначе terraform, кажется, пытается найти свою собственную версию ресурсов, не находит их и не запускается. - person Rob Evans; 22.03.2021

Я согласен с комментариями @rclement.

Несколько способов устранения проблем с терраформом.

  1. Очистите папку .terraform и перезапустите terraform init.

Это всегда первый выбор. Но когда вы в следующий раз запустите terraform init, потребуется время, и он снова начнет установку всех провайдеров и модулей.

  1. Если вы не хотите очищать .terraform для экономии времени развертывания, вы можете запустить terraform get --update=true

В большинстве случаев вы внесли некоторые изменения в модули, и их необходимо обновить.

person BMW    schedule 11.02.2019