Проверка и применение изменения хранилища

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

Введение

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

Эта независимая среда подготавливает небольшое исходное хранилище и локальное состояние. Используйте знания о plan/apply, файлах переменных и запросах S3; удалённое состояние и автоматизированные одобрения не требуются.

Связь с сертификацией

Сертификация Задача экзамена Практика
Cloud Practitioner (CLF-C02) Задача 3.1 Использование воспроизводимых определений инфраструктуры и эксплуатационных запросов к ресурсам.
Developer – Associate (DVA-C02) Задача 3.3, навык 3.3.4 Базовая практика развёртывания определения инфраструктуры.
DevOps Engineer – Professional (DOP-C02) Задача 2.1 Базовая практика управления ресурсами через определение IaC.

Обзор фактических ресурсов этой лабораторной работы и границ их сохранения.

Проверка и применение сохранённого плана

На этом шаге вы обновите тег выпуска подготовленного хранилища отчётов с помощью сохранённого плана, сохранив существующий бакет и отчёт.

Эта новая корневая конфигурация уже управляет небольшим хранилищем, создавать которое вы научились в предыдущих лабораторных работах. Подготовка предоставляет эту исходную ситуацию, чтобы вы могли сосредоточиться на проверке изменений. Желаемый новый выпуск — 2; существующий отчёт должен остаться orders,12. Начните с чтения конфигурации, значений и текущего тега:

cd /home/labex/project/storage-change
cat main.tf
cat release.tfvars
terraform state list
aws s3api \
  get-bucket-tagging \
  --bucket terraform-change-reports

Файл входных значений сейчас выбирает выпуск 1. Изменение имени ресурса могло бы заменить хранилище, а изменение тега может обновить существующий бакет. Измените только входное значение выпуска:

cat > release.tfvars <<'EOF'
release = "2"
EOF
terraform plan -var-file=release.tfvars -out=change.tfplan

Ожидайте обновление бакета на месте: 0 to add, 1 to change, 0 to destroy. -out записывает собственный артефакт плана Terraform, который содержит эту конфигурацию и эти входные значения. В отличие от несохранённого предварительного просмотра, применение этого файла использует проверенный план, а не создаёт новый на основе последующих правок. В реальных проектах планы могут содержать конфиденциальные значения, поэтому обращайтесь с ними как с артефактами проекта.

Прочитайте сохранённый план перед применением:

terraform show change.tfplan

Убедитесь, что Release меняется с 1 на 2 и ни объект, ни бакет не заменяется. Затем примените артефакт. Для сохранённого плана дополнительный запрос yes не появляется:

terraform apply change.tfplan

Запросите текущий тег и прочитайте отчёт:

aws s3api \
  get-bucket-tagging \
  --bucket terraform-change-reports
aws s3api \
  get-object \
  --bucket terraform-change-reports \
  --key reports/current.csv \
  retained.csv
cat retained.csv

Ожидайте выпуск 2 и orders,12. Сохранённый план полезен только тогда, когда изменённый ресурс и сохранённые данные соответствуют проверенному изменению. AWS View после развёртывания: фактическое хранилище под вашим управлением отображается рядом с сохранённым эталонным отчётом.

Обнаружение и исправление дрейфа тега

На этом шаге вы увидите реальное изменение тега вне Terraform и восстановите объявленную конфигурацию, не меняя отчёт.

Дрейф — это различие между развёрнутым ресурсом и его желаемой конфигурацией. Используйте AWS CLI, чтобы изменить тег вне Terraform. Это намеренное упражнение меняет реальный атрибут ресурса, который провайдер может прочитать; оно не редактирует локальный маркер успеха.

aws s3api \
  put-bucket-tagging \
  --bucket terraform-change-reports \
  --tagging '{"TagSet":[{"Key":"Project","Value":"TerraformReports"},{"Key":"Release","Value":"unexpected"}]}'

Попросите Terraform сравнить текущий ресурс с желаемым выпуском. -detailed-exitcode различает 0 (нет изменений), 2 (предлагается изменение) и 1 (ошибка). Следующий план намеренно возвращает 2; это означает, что он нашёл различие тега, а не что развёртывание завершилось неудачно.

terraform plan -var-file=release.tfvars -detailed-exitcode

План предлагает вернуть unexpected к 2. Изучите и сохраните исправление, затем примените этот артефакт:

terraform plan -var-file=release.tfvars -out=repair.tfplan
terraform show repair.tfplan
terraform apply repair.tfplan

Подтвердите текущий тег и план без расхождений:

aws s3api \
  get-bucket-tagging \
  --bucket terraform-change-reports
terraform plan -var-file=release.tfvars -detailed-exitcode

Тег равен 2; итоговый план сообщает No changes и завершается с кодом 0. Отчёт остаётся без изменений. Это демонстрирует дрейф тега, доступный для чтения провайдером, а не обнаружение всех возможных изменений данных вне Terraform. О сохранённых планах и подробных кодах завершения читайте в документации Terraform plan.

Удаление изменённого хранилища

На этом шаге вы удалите только хранилище под управлением этой корневой конфигурации после успешных проверок изменения и дрейфа.

Изучите и выполните удаление, введя yes для destroy:

terraform plan -destroy -var-file=release.tfvars
terraform destroy -var-file=release.tfvars

Объект отчёта удаляется раньше своего бакета. Запросите оставшиеся ресурсы и пустое сопоставление:

terraform state list
aws s3api \
  list-buckets \
  --query 'Buckets[].Name'
aws s3api \
  head-object \
  --bucket team-reference-reports \
  --key keep.txt \
  --query ContentLength

Эталонный отчёт команды сохраняется. Сохранённые локальные планы — артефакты проверки; их наличие не означает, что удалённые ресурсы AWS всё ещё существуют.

Резюме

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