Безопасно ли применять план Terraform, если в нем говорится, что необходимо заменить экземпляр базы данных? - PullRequest
1 голос
/ 29 мая 2020

Я импортирую существующие ресурсы (AWS RDS), но команда terraform plan показала сводку:

#aws_db_instance.my_main_db must be replaced 
+/- resource "aws_db_instance" "my_main_db" {
~ address = x
allocated_storage = x
+ apply_immediately = x
~ arn = x
~ username = x
+ password = x
(others arguments with alot of +/- and ~)
}

my_main_db подключен к сети с постоянными данными. Мой вопрос в заголовке; Безопасно ли запускать terrafrom apply в существующей базе данных? Я не хочу потерять все данные своих клиентов.

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

«Заменить» в терминологии Terraform означает уничтожить существующий объект и создать новый для его замены. Символ +/- (в отличие от -/+) указывает, что этот конкретный ресурс будет заменен в режиме «создать перед уничтожением», когда во время операции на короткое время будут существовать два экземпляра базы данных. (Это может или не может быть возможным на практике, в зависимости от того, изменяется ли имя экземпляра как часть этой операции.)

Для aws_db_instance, в частности, уничтожение экземпляра эквивалентно удалению экземпляра в Консоль RDS: если у вас нет резервной копии содержимого базы данных, она будет потеряна. Даже если у вас есть резервная копия, вам нужно будет восстановить ее через консоль RDS или API, а не с помощью Terraform, потому что Terraform не знает о механизме резервного копирования / восстановления и поэтому его идея «создать "означает создание совершенно новой, пустой базы данных.

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

Если вам требуется для внесения изменений в вашу базу данных, которые невозможно выполнить без создания совершенно нового экземпляра RDS, вам обычно необходимо внести эти изменения за пределами Terraform с использованием инструментов RDS c, чтобы вы могли реализовать некоторый процесс для передачи данных между старым и новым экземплярами, будь то резервное копирование и последующее восстановление (что потребует временного отключения) или временный запуск обоих экземпляров и настройка включите репликацию от старого к новому, пока вы не будете готовы отключить старую. Детали такой миграции выходят за рамки Terraform, потому что они указаны c для любого движка базы данных, который вы используете.

2 голосов
/ 29 мая 2020

Это, скорее всего, небезопасно, но на самом деле такое решение может принять только тот, кто знаком с приложением. Посмотрите на свойства и на то, что будет изменено или воссоздано. Если вас не устраивает изменение всех этих свойств, это небезопасно.

...