Terraform использует бэкэнд в модуле

Мне нужно создать оптимизацию структуры терраформ.

Имейте в корневом пути переменные, которые я импортировал, например, модуль /variables.tf

variable "aws_profile" { default = "default" }
variable "aws_region" { default = "us-east-1" }

После есть папка модуля /ec2_instance/main.tf

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

provider "aws" {
  region  = module.global_vars.aws_region
  profile = module.global_vars.aws_profile
}

terraform {
  backend "s3" {
    encrypt = true
    bucket  = "some_bucket"
    key     = "path_to_statefile/terraform.tfstate"
    region  = "region"
    profile = "profile"
  }
}

module "instances_cluster" {
  some actions
}

Он работает, но мне нужно переместить бэкэнд и часть провайдера в main.tf в корневой папке, а затем включить, как модуль. Как я могу это сделать?

Я попытался создать /main.tf в корневой папке с серверной частью, но они не работают и поддерживают запись файлов состояния локально.


person Manish Iarhovich    schedule 13.03.2020    source источник


Ответы (1)


Вам придется немного поработать с рефакторингом, но я бы предпринял следующие шаги

  1. Запустите terraform plan в корневом и ec2_instance модулях, чтобы проверить отсутствие изменений и начать рефакторинг.
  2. Закомментируйте backend для ec2_instance/main.tf
  3. Поместите серверную часть из ec2_instance/main.tf в корень main.tf
  4. В корне main.tf сделайте ссылку на модуль ec2_instance
  5. Запустите terraform plan в корневом модуле и обратите внимание на создание и удаление
  6. Для каждой пары создания и удаления создайте инструкцию terraform state mv и запустите каждую
  7. Убедитесь, что terraform plan не имеет изменений
person SomeGuyOnAComputer    schedule 29.03.2020