Уничтожение ресурсов Terraform

LinuxBeginner
Практиковаться сейчас

Введение

Добро пожаловать в эту лабораторную работу по уничтожению (destruction) ресурсов Terraform. Важной частью жизненного цикла инфраструктуры является не только создание и обновление ресурсов, но и их чистое удаление, когда они больше не требуются. Этот процесс известен как уничтожение.

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

В этой лабораторной работе вы узнаете, как:

  • Использовать terraform plan -destroy для предварительного просмотра плана уничтожения.
  • Интерпретировать вывод плана уничтожения.
  • Выполнить команду terraform destroy для удаления ресурсов.
  • Проверить, что ресурсы были успешно удалены как из системы, так и из файла состояния Terraform (state file).

Мы будем работать с простым ресурсом local_file, что позволит нам сосредоточиться на рабочем процессе Terraform без необходимости предоставления учетных данных облачного провайдера.

Подтверждение текущего состояния проекта

Прежде чем приступить к процессу уничтожения, давайте сначала проверим текущее состояние нашего проекта Terraform. Это поможет вам понять, какими ресурсами в настоящее время управляет Terraform.

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

Сначала перечислим файлы в каталоге проекта:

ls -la

Вы должны увидеть вывод, похожий на следующий:

total 20
drwxr-xr-x 1 labex labex  110 Oct 15 13:10 .
drwxr-x--- 1 labex labex 4096 Oct 15 13:10 ..
drwxr-xr-x 3 labex labex   23 Oct 15 13:07 .terraform
-rw-r--r-- 1 labex labex 1181 Oct 15 13:07 .terraform.lock.hcl
-rwxrwxr-x 1 labex labex   45 Oct 15 13:10 example.txt
-rw-rw-r-- 1 labex labex  258 Oct 15 13:10 main.tf
-rw-rw-r-- 1 labex labex 1088 Oct 15 13:10 terraform.tfstate

Это показывает файл main.tf и файл terraform.tfstate, созданные скриптом настройки, а также файл example.txt, созданный при применении конфигурации Terraform.

Далее, проверим текущее состояние Terraform:

terraform show

Вы должны увидеть вывод, похожий на следующий:

## local_file.example:
resource "local_file" "example" {
    content              = "This is an example file managed by Terraform."
    directory_permission = "0777"
    file_permission      = "0777"
    filename             = "./example.txt"
    id                   = "ec3adcab998872def2df6200fb03992ac6f237a4"
}

Это отображает информацию о ресурсе local_file.example, которым в настоящее время управляет Terraform.

Выполнение terraform plan -destroy для предварительного просмотра

На этом шаге вы узнаете, как сгенерировать предварительный план уничтожения. Перед уничтожением любых ресурсов лучшей практикой является точный предварительный просмотр того, что намерен сделать Terraform. Это предотвращает случайное удаление критически важной инфраструктуры. Команда terraform plan -destroy создает план выполнения, который показывает, какие ресурсы будут уничтожены, без фактического выполнения уничтожения.

Вся ваша работа будет проводиться в каталоге ~/project. Скрипт настройки уже создал файл main.tf и применил его, создав файл с именем example.txt.

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

terraform plan -destroy

Вы увидите вывод, похожий на следующий. Этот вывод подробно описывает план уничтожения единственного ресурса, которым управляет наша конфигурация.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.

Подтверждение вывода плана уничтожения

На этом шаге мы проанализируем вывод предыдущей команды. Понимание плана имеет решающее значение для безопасного использования Terraform.

Обратите внимание на вывод команды terraform plan -destroy. Выделите следующие ключевые элементы:

  1. Действие с ресурсом: Строка ## local_file.example will be destroyed четко указывает на предполагаемое действие. Символ - перед resource "local_file" "example" — это обозначение Terraform для уничтожения. Любая строка с префиксом - указывает на то, что что-то будет удалено.

  2. Изменения атрибутов: Вывод показывает все атрибуты ресурса и указывает, что они будут изменены на null, что означает удаление. Например: - filename = "./example.txt" -> null.

  3. Сводка плана: Последняя строка, Plan: 0 to add, 0 to change, 1 to destroy., предоставляет общую сводку всего плана. Это самая важная строка для быстрой проверки запланированных действий.

Просмотрев этот план, вы можете быть уверены, что будет затронут только ресурс local_file.example. Этот шаг подтверждения жизненно важен в реальных сценариях, где неправильная конфигурация может привести к непреднамеренному уничтожению важных ресурсов. На этом шаге не нужно выполнять никаких команд; он посвящен пониманию процесса.

Выполнение terraform destroy для удаления ресурсов

На этом шаге вы выполните план уничтожения. Теперь, когда вы просмотрели план и уверены в изменениях, вы можете приступить к фактическому уничтожению.

Команда terraform destroy сначала отобразит тот же план уничтожения для окончательного обзора, а затем запросит ваше подтверждение перед продолжением.

Выполните следующую команду в вашем терминале:

terraform destroy

Terraform снова отобразит план и запросит ваше одобрение.

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value:

Чтобы подтвердить уничтожение, введите yes и нажмите Enter.

yes

После подтверждения Terraform приступит к уничтожению ресурса и выведет ход выполнения.

local_file.example: Destroying... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
local_file.example: Destruction complete after 0s

Destroy complete! Resources: 1 destroyed.

Это подтверждает, что ресурс local_file был успешно уничтожен.

Проверка удаления файла из файловой системы

На этом шаге вы проверите, что уничтожение ресурса оказало предполагаемое воздействие на систему. Поскольку нашим ресурсом был локальный файл с именем example.txt, уничтожение ресурса должно было удалить этот файл из файловой системы.

Вы можете проверить это, попытавшись вывести список файла с помощью команды ls.

Выполните следующую команду в вашем терминале:

ls example.txt

Поскольку файл был удален, команда завершится неудачей, и вы увидите сообщение об ошибке от операционной системы. Эта ошибка является ожидаемым результатом и подтверждает, что ресурс был успешно уничтожен.

ls: cannot access 'example.txt': No such file or directory

Этот шаг проверки важен, поскольку он подтверждает, что действия Terraform в файле состояния отражены в реальном мире.

Проверка пустого файла terraform.tfstate

На этом шаге вы проверите файл состояния Terraform (terraform.tfstate), чтобы увидеть, как он отражает уничтожение ресурсов. Файл состояния — это JSON-файл, который отслеживает ресурсы, управляемые Terraform, и их текущее состояние.

После уничтожения всех ресурсов в конфигурации файл состояния не удаляется. Вместо этого он обновляется, чтобы отразить, что он больше не управляет никакими ресурсами. Массив resources внутри файла состояния станет пустым.

Давайте рассмотрим содержимое файла состояния. Используйте команду cat для его отображения:

cat terraform.tfstate

Вывод будет представлять собой JSON-объект. Обратите внимание, что ключ resources теперь указывает на пустой массив [].

{
  "version": 4,
  "terraform_version": "1.13.3",
  "serial": 3,
  "lineage": "f25aaab8-c186-2b16-1bae-fe9ba25f81e4",
  "outputs": {},
  "resources": [],
  "check_results": null
}

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

Резюме

Поздравляем с завершением лабораторной работы! Вы успешно прошли весь процесс уничтожения инфраструктуры, управляемой Terraform.

В этой лабораторной работе вы узнали:

  • Важность предварительного просмотра изменений с помощью terraform plan -destroy для предотвращения случайного удаления.
  • Как читать и понимать план уничтожения, обращая внимание на сводку и изменения на уровне ресурсов.
  • Как выполнить уничтожение ресурсов с помощью команды terraform destroy и необходимого шага подтверждения.
  • Как проверить, что ресурс был успешно уничтожен, проверив как реальную систему, так и файл состояния Terraform (terraform.tfstate).

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