Рефакторинг состояния Terraform: перемещение независимых каталогов в родительский модуль - PullRequest
0 голосов
/ 26 апреля 2019

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

.
└── dev
    ├── backend.tf
    ├── main.tf
    ├── outputs.tf
    ├── variables.tf
    │
    ├── cluster
    │   ├── terraform.tfstate
    │   ├── backend.tf
    │   ├── main.tf
    │   ├── outputs.tf
    │   ├── resource-efs.tf
    │   └── variables.tf
    │
    ├── db
    │   ├── terraform.tfstate
    │   ├── backend.tf
    │   ├── main.tf
    │   ├── outputs.tf
    │   └── variables.tf
    │
    └── modules
        ├── cluster
        │   ├── backend.tf
        │   ├── main.tf
        │   ├── outputs.tf
        │   └── variables.tf
        ├── efs
        │   ├── backend.tf
        │   ├── main.tf
        │   └── variables.tf
        └── db
            ├── backend.tf
            ├── main.tf
            ├── outputs.tf
            └── variables.tf

Я создал необходимые ссылкимежду ресурсами и модульной компоновкой уже, однако теперь мне нужно переместить состояния terraform из кластера и папок db в папку модулей.Кроме того, у меня есть resource-efs.tf, который я хочу перейти к этой модульной структуре.

Я узнал, что все инициализированные каталоги в Terraform являются модулями, поэтому я буду ссылаться на папку dev здесь как«root»: в настоящее время состояние кластера и папок базы данных имеют состояния, которые хранятся удаленно в двух разных папках, поэтому я решил, что сначала нужно инициализировать папку root, а затем переместить состояния двух автономных компонентов, а именно кластераи db - в верхний и в соответствующие им модули.

Я пробовал terraform mv, но получил сообщение об ошибке: я перешел в папку db и запустил

    terraform state mv -state-out=../modules/db/terraform.tfstate db module.db

И ошибка, которую я получил, была

    Error moving state: Error parsing address 'db': invalid resource address "db"

    Please ensure your addresses and state paths are valid. No
    state was persisted. Your existing states are untouched.

По праву, поскольку db - это не ресурс сам по себе, а имя моего будущего модуля.

Из https://www.terraform.io/docs/commands/state/mv.html говорят, что эта команда может «переместить данные в совершенно новое состояние, ее также можно использовать для рефакторинга одной конфигурации в несколько отдельно управляемых конфигураций Terraform.», Но я не могу понять,как это сделать - перенести целые модули, которые теперь являются «корневыми» модулями, самостоятельно;Есть ли способ сослаться на корневой модуль, выполнив что-то вроде terraform state mv -state=db.tfstate -state-out=../cluster/cluster.tfstate module.root module.db?

...