Terraform использует бэкэнд на модуле - PullRequest
0 голосов
/ 13 марта 2020

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

Имеет на root переменные пути, которые я импортировал как модуль /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 в папке root и после включить как модуль. Как я могу это сделать?

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

1 Ответ

0 голосов
/ 30 марта 2020

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

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