Как мне обрабатывать `депонированные` ресурсы в Terraform?

Я изо всех сил пытаюсь понять, как я должен обрабатывать deposed ресурсы, обнаруженные в моем состоянии TF.

В частности, при запуске приложения я получаю некоторые ошибки, подобные приведенным ниже:

Error applying plan:

11 error(s) occurred:

* aws_instance.mongo-replica-01 (deposed #0): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-0f0bdc2c16e922fbc' does not exist
    status code: 400, request id: 71b98708-cb06-4f11-ad14-8d3d160fbc1a
* aws_instance.mongo-replica-01 (deposed #1): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-080ef01dc84c09685' does not exist
    status code: 400, request id: 07c96f82-1e32-4944-a1d6-ab0e6306b82e
* aws_instance.mongo-replica-02 (deposed #1): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-085b997daac742c1e' does not exist
    status code: 400, request id: 20ff2b73-39c9-4d49-af41-f4ec542ec782
* aws_instance.mongo-replica-02 (deposed #0): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-00bc7fd15b04a3688' does not exist
    status code: 400, request id: cdea3c4f-9bec-496a-aedd-bcfbf0a706d2

Рассматриваемые экземпляры AWS EC2 действительно не существуют, но при попытке их удаления возникают ошибки TF (предположительно, потому что они не существуют) и по-прежнему сохраняет их в состоянии.

Я пробовал использовать команду terraform state, пытаясь удалить deposed ресурсы, но она позволяет мне удалить только весь ресурс, а не только его deposed экземпляр ...

Ожидается ли, что я просто вручную зайду в файл состояния terraform и удаляю депонированные разделы ??


person gsaslis    schedule 25.01.2017    source источник
comment
Я не совсем понимаю, что вы имеете в виду под свержением? Вы имеете в виду, что они были удалены кем-то другим, кроме TF? Параметр -refresh=true по умолчанию, равный terraform destroy, должен автоматически обновлять файл состояния с учетом того, что находится в AWS, и, таким образом, удалять отсутствующие экземпляры, а затем не пытаться их уничтожить.   -  person ydaetskcoR    schedule 26.01.2017
comment
Видимо низложено государство. См., Например, эту проблему: github.com/hashicorp/terraform/issues/9844   -  person gsaslis    schedule 30.01.2017
comment
Действительно, документации по депонированному состоянию немного, как указано в проблеме github здесь   -  person ILMostro_7    schedule 01.07.2017


Ответы (3)


Из проблемы GitHub с запросом документации о состоянии "депонировано"

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

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

Таким образом, все это означает: эти удаленные экземпляры являются остатками сбоя во время замены этих ресурсов с помощью create_before_destroy. Если вы посмотрите в файл состояния Terraform (terraform.tfstate или .terraform / terraform.tfstate, в зависимости от того, включено ли удаленное состояние), вы должны найти их записи, выполнив поиск слова deposed; вы можете использовать данные, которые Terraform хранит для них, чтобы решить, можно ли их безопасно удалить, прежде чем позволить Terraform продолжить здесь.

Таким образом, вы можете сделать вывод, что «депонированное» состояние этих ресурсов просто указывает на основную проблему, которая вызвала ошибки на этапе destroy. Как упоминалось в цитате, "депонированные" ресурсы должны быть "разрешены", за неимением лучшего термина, при следующем запуске terraform apply. А пока проверьте tfstate файлы на наличие любой / всей конкретной информации, которую terraform хранит, чтобы определить, безопасно ли продолжить и / или, потенциально, диагностировать, где может быть проблема.

Кроме того, вы можете попробовать следующее, чтобы обновить локальное состояние

terraform refresh      Update local state file against real resources

Также,

terraform debug              Debug output management
terraform state              Advanced state management
person ILMostro_7    schedule 01.07.2017
comment
terraform destroy и refresh ничего не делают для меня; terraform state список показывает 5 ресурсов, но terraform show указывает, что все 5 пусты и удалены. Удалить их с помощью terraform state rm? Затем осталась еще куча объектов данных. Может быть проще отказаться от этого состояния (в AWS не осталось ресурсов, связанных с этим). - person Oliver; 30.04.2020

У меня была аналогичная проблема с экземплярами EC2, которые я удалил, но остановил процесс на полпути, и в итоге я вручную отредактировал свой файл terraform tfstate.

В нем я обнаружил элементы, которые были отложены, изменил tainted на false и очистил массив deposed.

После запуска terraform plan экземпляры исчезли из вывода.

введите здесь описание изображения

person Simon Fredsted    schedule 02.08.2019

terraform state rm, за которым следует terraform import, удаляет удаленный объект из состояния.

person Morgan Christiansson    schedule 26.03.2021