При нанесении шаблона террафора состояние развертывания инфраструктуры хранится в местном Terraform.tfstate
файл. Если вы являетесь единственным разработчиком в проекте, наличие этого сохраненного в вашей папке проекта или репо, может работать для вас; В команде вы хотите убедиться, что последняя версия состояния вашего террафора хранится в центральном месте, а контроль источника не лучшее решение для этого.
Вы не хотите попасть в ситуацию, когда несколько разработчиков работают над одной и той же облачной инфраструктурой стеком и наступают на пальцы друг друга. Вам нужно решение, которое предотвращает коррупцию стека, сохраняет редащую историю и удаляет конфиденциальные файлы из вашей структуры проекта (что может быть на нескольких рабочих столах).
Так куда я должен хранить его?
Terraform позволяет хранить это состояние в ведре S3, используя ресурс Backend 🎉
1. Создание ведра S3
В AWS вам нужно создать ведро S3.
Перейдите к разделу S3 в AWS и нажмите «Создать ведро».
Введите имя и выберите регион, в котором вы хотите установить ведро, затем нажмите «Далее».
Убедитесь, что вы щелкнули флажок «Версии» (сохраните все версии объекта в одном ведре.) «Затем нажмите« Далее ».
Важно: .. Убедитесь, что выбран «Block Public Access», он должен быть по умолчанию, затем нажмите «Далее».
Просмотрите вашу конфигурацию, и если вы счастливы, нажмите «Создать ведро».
2. Интеграция с вашим ведром S3
Теперь вы создали ведро S3, вы готовы создать бэкэнд-ресурс, который позволяет террафом хранить и прочитать состояние от S3.
В каталоге, где текущие файлы Terraform живут, вам нужно будет создать новый файл, который вы можете назвать все, что вам нравится, для этого учебника, мы назовем это
BackeND.terrasorform.
Здесь вам нужно будет иметь следующую структуру:
terraform { backend "s3" { bucket = "{your-bucket-name}" encrypt = true key = "path/to/state/state.tfstate" # Where you want to store state in S3 region = "{your-bucket-region}" } }
После того, как у вас есть этот файл в вашем каталоге Terraform, вы теперь готовы хранить и прочитать ваше состояние из S3; Запуск команды, как
Террафом применяется
заставит это. Вы сможете увидеть, что файл теперь хранится включ
каталог, указанный в ведре S3.Вы можете подтвердить, что это работает, навигации к
.terraform/Terraform.tfstate
В вашем каталоге Terraform и посмотрите, какой бэкэнд используется.
Теперь, когда ваше состояние Terraporm хранится в ведре S3, как мы мешаем нескольким людям, применяющим стек одновременно? 🤯
Мы будем держать блокировку файлов в таблице Dynamodb 😁
1. Создание таблицы dynamodb
В AWS вам нужно создать таблицу dynamodb.
Перейдите к разделу Dynamodb в AWS и нажмите «Создать таблицу».
Дайте имя на таблицу Dynamodb и установите клавишу первичной клавиши/раздела AS
Лозайд
ОтказОстальные настройки можно оставить по умолчанию. Нажмите «Создать ведро».
2. Интеграция с вашим таблицей Dynamodb
Теперь вы создали таблицу Dynamodb, вы готовы интегрировать свою бэкэнду с этим, чтобы убедиться, что состояние Terraform заблокировано при применении изменений.
- Измените свою бэкэнд (файл, который мы создали ранее, названные
Backend.terrashorform
В нашем случае) и добавьте новый ключ:
terraform { backend "s3" { bucket = "{your-bucket-name}" dynamodb_table = "{your-dynamodb-table-name}" # This is the new key encrypt = true key = "path/to/state/state.tfstate" region = "{your-bucket-region}" } }
- Вот и все, состояние блокировки теперь работает в вашем стеке террафора. Вы можете проверить это, запустив
План террафора
И пока он работает, навигация на вашем таблице Dynamodb в AWS и в разделе «Поиск», нажмите «Поиск», и должен бытьБезразличный
там; Это исчезнет однаждыПлан
Процесс завершен.
Вуаля, сделано! 💥
Там есть много материалов на том, как настроить это, но это то, что мне нравилось делать, в короткие сроки, когда желая начать вести блог, поэтому вот мой первый на dev.to, хотя это не первый этого типа статьи!
Разрешения: Вам нужно будет обеспечить, чтобы профиль AWS вы используете, имеет правильные разрешения для доступа к ведрам S3 и выполняют правильные операции против таблицы DynamOdb. Они можно найти здесь: https://www.terraform.io/docs/backends/types/s3.html
Оригинал: «https://dev.to/iamstej/protecting-your-terraform-state-6gn»