Terraform постоянные и динамические части инфраструктуры?

Я хочу разделить свою инфраструктуру на две части:

  1. Постоянные (межсетевые экраны, блочные хранилища и т. д.)
  2. Динамический (который будет потреблять постоянные ресурсы из №1)

Я хочу быть уверенным, что постоянная часть никогда не будет удалена, и в то же время будет опция terraform destroy в части динамической инфраструктуры.

Я просто изучал это и не нашел никакой полезной информации. По-видимому, в terraform нет концепции постоянной инфраструктуры (назовите ее статической?), Поэтому я создал запрос функции (ссылка ниже) с возможной идеей реализации для такой, где ресурс может быть помечен как постоянный и сохранен при выполнении уничтожения terraform. Возможно, вам захочется присмотреть за github.com/hashicorp/terraform/issues/20065.

EduardoAPP 22.01.2019 14:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
393
4

Ответы 4

Все ресурсы, которые вы не хотите уничтожать, вы должны добавить политику жизненного цикла: prevent_destroy

Посмотрите документацию: https://www.terraform.io/docs/configuration/resources.html#prevent_destroy

Да, но prevent_destroy просто предотвращает команду destroy, если ресурс с этой директивой планируется удалить. И я хочу иметь возможность разрушить «динамическую» часть инфраструктуры и оставить «постоянную».

Alex T 05.05.2018 17:26

Чтобы полностью предотвратить разрушение, вам нужно будет точно настроить разрешения для ресурсов у вашего провайдера. Однако есть простой способ разделить вашу инфраструктуру.

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

Можете привести пример, как решить проблему из вопроса? Насколько я понял, удаленное состояние позволяет использовать .tfstate, который больше похож на контроль версий для одного проекта, а затем на импорт вывода из другого проекта.

Alex T 06.05.2018 08:27

@AlexT Ну, вы создаете один проект для постоянной инфраструктуры, а другой - для динамической инфраструктуры. Вы работаете только над динамическим проектом, обращаетесь к выходным данным другого проекта через поставщика удаленного состояния, поэтому вы не можете ничего случайно удалить и можете запретить некоторым пользователям изменять это.

Jakub Kania 06.05.2018 23:16

У меня немного другая работа. Ресурсы, которые я не хочу удалять с помощью "terraform destroy", я создаю как "null_resource" с помощью средства обеспечения с CLI. Вы по-прежнему можете использовать свои переменные в терраформе.

например (Создайте группу ресурсов, но она постоянна из-за null_resource)

resource "null_resource" "backend-config" {
        provisioner "local-exec" {
        command     = <<EOT
    az group create --location ${var.Location} --name ${var.Resource_group_name} --tags 'LineOfBusiness=${var.Lob}' 'Region=${var.Region}' 'Purpose = "Terraform-Primary-Resource-Group-${var.Lob}'
    EOT
        interpreter = ["Powershell", "-Command"]
      }
    }

Теперь, если вы уничтожите ресурсы с помощью terraform destroy. Любой null_resource останется нетронутым.

Я бы решил эту проблему, имея 2 развертывания Terraform. Вы создаете «статические» ресурсы один раз и не трогаете их. Для дополнительной безопасности вручную добавьте блокировку удаления для этих ресурсов (например, я знаю, что вы можете сделать это в Azure, я предполагаю, что другие облачные провайдеры имеют аналогичное решение).

Импортируйте эти ресурсы в свое развертывание Dynamic Terraform, используя блоки данные (не ресурсы). Terraform никогда не будет пытаться удалить ресурсы, которые вы импортируете с помощью блоков данных.

Другие вопросы по теме