Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
  • Интернет-магазины
  • Хранение и восстановление данных
  • Для разработчиков
  • Тестовая среда
  • Управление инфраструктурой
  • Построение Data Platform
    • Все руководства
    • Миграция БД из стороннего кластера Apache Kafka® в Managed Service for Apache Kafka®
    • Перенос данных между кластерами Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for YDB в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for Greenplum® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for Elasticsearch с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for MongoDB с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for MySQL с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for OpenSearch с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for PostgreSQL с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for YDB с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Data Streams с помощью Data Transfer
    • Настройка Kafka Connect для работы с кластером Managed Service for Apache Kafka®
    • Управление схемами данных в Managed Service for Apache Kafka®
    • Использование Managed Schema Registry с Managed Service for Apache Kafka®
    • Использование Confluent Schema Registry с Managed Service for Apache Kafka®
    • Поставка данных из Managed Service for MySQL в Managed Service for ClickHouse с помощью Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Обмен данными между Managed Service for ClickHouse и Data Proc
    • Настройка Managed Service for ClickHouse для Graphite
    • Получение данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse с помощью Data Transfer
    • Получение данных из RabbitMQ в Managed Service for ClickHouse
    • Сохранение потока данных Data Streams в Managed Service for ClickHouse
    • Асинхронная репликация данных из Яндекс Метрика в ClickHouse с помощью Data Transfer
    • Использование гибридного хранилища в Managed Service for ClickHouse
    • Шардирование таблиц Managed Service for ClickHouse
    • Настройка Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Настройка Cloud DNS для доступа к кластеру Managed Service for ClickHouse из других облачных сетей
    • Обмен данными между Managed Service for ClickHouse и Data Proc
    • Импорт данных из Managed Service for MySQL в Data Proc с помощью Sqoop
    • Импорт данных из Managed Service for PostgreSQL в Data Proc с помощью Sqoop
    • Использование скриптов инициализации для настройки GeeseFS в Data Proc
    • Миграция данных из стороннего кластера Elasticsearch в Managed Service for Elasticsearch с помощью Reindex API
    • Миграция коллекций из стороннего кластера MongoDB в Managed Service for MongoDB
    • Миграция данных в Managed Service for MongoDB
    • Шардирование коллекций MongoDB
    • Анализ производительности и оптимизация MongoDB
    • Миграция БД из стороннего кластера MySQL в кластер Managed Service for MySQL
    • Анализ производительности и оптимизация Managed Service for MySQL
    • Синхронизация данных из стороннего кластера MySQL в Managed Service for MySQL с помощью Data Transfer
    • Миграция БД из Managed Service for MySQL в сторонний кластер MySQL
    • Миграция БД из Managed Service for MySQL в Object Storage с помощью Data Transfer
    • Импорт данных из Managed Service for MySQL в Data Proc с помощью Sqoop
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Debezium
    • Миграция БД из Managed Service for MySQL в Managed Service for YDB с помощью Data Transfer
    • Захват изменений MySQL и поставка в YDS
    • Миграция данных из Elasticsearch в Managed Service for OpenSearch
    • Создание кластера PostgreSQL для «1С:Предприятия»
    • Анализ производительности и оптимизация Managed Service for PostgreSQL
    • Миграция БД из Managed Service for PostgreSQL
    • Миграция БД из стороннего кластера PostgreSQL в Managed Service for PostgreSQL
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Импорт данных из Managed Service for PostgreSQL в Data Proc с помощью Sqoop
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for YDB с помощью Data Transfer
    • Миграция БД из Managed Service for PostgreSQL в Object Storage
    • Захват изменений PostgreSQL и поставка в YDS
    • Миграция БД из Greenplum® в ClickHouse
    • Миграция БД из Greenplum® в PostgreSQL
    • Миграция БД из стороннего кластера Redis в Managed Service for Redis
    • Использование кластера Managed Service for Redis в качестве хранилища сессий PHP
  • Продукты Microsoft в Yandex Cloud
  • Сетевая инфраструктура
  • Визуализация и анализ данных
  • Интернет вещей
  • Бессерверные технологии
  1. Построение Data Platform
  2. Миграция данных из Elasticsearch в Managed Service for OpenSearch

Миграция данных из Elasticsearch в Yandex Managed Service for OpenSearch

Статья создана
Yandex Cloud
  • Миграция с помощью снапшотов
    • Перед началом работы
    • Создайте снапшот на кластере-источнике
    • Восстановите снапшот в кластере-приемнике
    • Закончите миграцию
    • Удалите созданные ресурсы
  • Миграция с помощью переиндексации
    • Перед началом работы
    • Настройте кластер-приемник
    • Запустите переиндексацию
    • Проверьте результат
    • Удалите созданные ресурсы

Перенести данные из кластера-источника Elasticsearch в кластер-приемник Yandex Managed Service for OpenSearch можно с помощью двух механизмов:

  • Снапшотов (snapshots).

    Этот способ подходит для кластеров Elasticsearch версии не выше 7.11.

    Подробнее о механизме снапшотов см. в документации OpenSearch.

  • Удаленной переиндексации (reindex data).

    С ее помощью можно перенести существующие индексы, псевдонимы (aliases) или потоки данных. Этот способ подходит для всех кластеров Elasticsearch версии 7.

Миграция с помощью снапшотов

Чтобы мигрировать данные из кластера-источника Elasticsearch в кластер-приемник Managed Service for OpenSearch с помощью снапшотов:

  1. Создайте снапшот на кластере-источнике.
  2. Восстановите снапшот в кластере-приемнике.
  3. Закончите миграцию.

Если используемые ресурсы вам больше не нужны, удалите их.

Перед началом работы

Подготовьте инфраструктуру

  1. Создайте бакет Object Storage с ограниченным доступом. Этот бакет будет использоваться в качестве репозитория снапшотов.

  2. Создайте сервисный аккаунт и назначьте ему роль storage.editor. Сервисный аккаунт необходим для доступа к бакету из кластера-источника и кластера-приемника.

  3. Если вы переносите данные из стороннего кластера Elasticsearch, создайте статический ключ доступа для этого сервисного аккаунта.

    Важно

    Сохраните идентификатор ключа и секретный ключ. Они понадобятся позднее.

  4. Создайте кластер-приемник Managed Service for OpenSearch нужной вам конфигурации со следующими настройками:

    • Плагин — repository-s3.
    • Публичный доступ к группе хостов с ролью DATA.

Завершите настройку и проверьте доступ к ресурсам

  1. Настройте ACL для бакета:

    1. В выпадающем списке Выберите пользователя укажите созданный ранее сервисный аккаунт.
    2. Задайте разрешения READ и WRITE для выбранного сервисного аккаунта.
    3. Нажмите кнопку Добавить.
    4. Нажмите кнопку Сохранить.
  2. Настройте кластер-источник Elasticsearch:

    Сторонний кластер Elasticsearch
    Managed Service for Elasticsearch
    1. Установите плагин repository-s3 на все хосты кластера.

    2. Чтобы плагин repository-s3 заработал, перезапустите сервисы Elasticsearch и Kibana на всех хостах кластера.

    3. Убедитесь, что у кластера-источника Elasticsearch есть доступ в интернет.

    1. Установите плагин repository-s3.

    2. Установите SSL-сертификат.

    3. Убедитесь, что вы можете подключиться к кластеру-источнику с помощью Elasticsearch API и Kibana.

  3. Установите SSL-сертификат.

  4. Убедитесь, что вы можете подключиться к кластеру-приемнику Managed Service for OpenSearch с помощью OpenSearch API и Dashboards.

Создайте снапшот на кластере-источнике

  1. Подключите бакет в качестве репозитория снапшотов на кластере-источнике:

    Сторонний кластер Elasticsearch
    Managed Service for Elasticsearch
    1. Добавьте сведения о ключе статического доступа в хранилище ключей (keystore) Elasticsearch.

      Примечание

      Выполните процедуру на всех хостах кластера-источника.

      Добавьте:

      • Идентификатор ключа:

        $ES_PATH/bin/elasticsearch-keystore add s3.client.default.access_key
        
      • Секретный ключ:

        $ES_PATH/bin/elasticsearch-keystore add s3.client.default.secret_key
        

      Примечание

      Путь к Elasticsearch ($ES_PATH) зависит от выбранного способа установки. Найти путь к установленному Elasticsearch можно в документации по установке (например, для DEB, RPM).

    2. Загрузите данные из хранилища ключей:

      curl --request POST "https://<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200/_nodes/reload_secure_settings"
      
    3. Зарегистрируйте репозиторий:

      curl --request PUT \
           "https://<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200/_snapshot/<имя репозитория>" \
           --header 'Content-Type: application/json' \
           --data '{
             "type": "s3",
             "settings": {
               "bucket": "<имя бакета>",
               "endpoint": "storage.yandexcloud.net"
             }
           }'
      

    Выполните команду:

    curl --request PUT \
         "https://admin:<пароль пользователя admin>@<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200/_snapshot/<имя репозитория>" \
         --cacert ~/.elasticsearch/root.crt \
         --header 'Content-Type: application/json' \
         --data '{
           "type": "s3",
           "settings": {
             "bucket": "<имя бакета>",
             "endpoint": "storage.yandexcloud.net"
           }
         }'
    

    Подробнее о подключении репозитория см. в документации плагина.

    Внимание

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

  2. Запустите создание снапшота в репозитории, созданном на предыдущем шаге. Можно создать снапшот всего кластера или части данных. Подробнее см. в документации Elasticsearch.

    Пример создания снапшота с именем snapshot_1 для всего кластера:

    Сторонний кластер Elasticsearch
    Managed Service for Elasticsearch
    curl --request PUT \
         "https://<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200/_snapshot/<имя репозитория>/snapshot_1?wait_for_completion=false&pretty"
    
    curl --request PUT \
         "https://admin:<пароль пользователя admin>@<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200/_snapshot/<имя репозитория>/snapshot_1?wait_for_completion=false&pretty" \
         --cacert ~/.elasticsearch/root.crt
    

    Процесс создания снапшота может занять длительное время. Отслеживайте ход выполнения операции с помощью инструментов Elasticsearch, например:

    Сторонний кластер Elasticsearch
    Managed Service for Elasticsearch
    curl --request GET \
         "https://<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200/_snapshot/<имя репозитория>/snapshot_1/_status?pretty"
    
    curl --request GET \
         "https://admin:<пароль пользователя admin>@<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200/_snapshot/<имя репозитория>/snapshot_1/_status?pretty" \
         --cacert ~/.elasticsearch/root.crt
    

Восстановите снапшот в кластере-приемнике

  1. Настройте доступ к бакету со снапшотами для кластера-приемника. Используйте созданный ранее сервисный аккаунт.

  2. Подключите к кластеру-приемнику бакет Object Storage в качестве хранилища снапшотов в режиме только для чтения:

    curl --request PUT \
         "https://admin:<пароль пользователя admin>@<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_snapshot/<имя репозитория>" \
         --cacert ~/.opensearch/root.crt \
         --header 'Content-Type: application/json' \
         --data '{
           "type": "s3",
           "settings": {
             "bucket": "<имя бакета>",
             "readonly" : "true",
             "endpoint": "storage.yandexcloud.net"
           }
         }'
    
  3. Выберите способ восстановления индексов на кластере-приемнике.

    При настройках по умолчанию попытка восстановления индекса завершится неудачей, если в кластере уже открыт индекс с тем же именем. Даже если кластер Managed Service for OpenSearch не содержит пользовательских данных, в нем есть открытые системные индексы (такие как .apm-custom-link, .kibana_* и другие), что может помешать восстановлению. Чтобы этого избежать, воспользуйтесь одним из способов:

    • Переносите только пользовательские индексы. Существующие системные индексы не переносятся, в процессе импорта участвую только индексы, созданные на кластере-источнике пользователем.

    • Используйте параметры rename_pattern и rename_replacement. Индексы будут переименовываться по мере их восстановления. Подробнее см. в документации OpenSearch.

    Пример восстановления снапшота целиком:

    curl --request POST \
         "https://admin:<пароль пользователя admin>@<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_snapshot/<имя репозитория>/snapshot_1/_restore" \
         --cacert ~/.opensearch/root.crt
    
  4. Запустите восстановление из снапшота на кластере-приемнике.

    Пример восстановления снапшота с указанием пользовательских индексов, которые нужно восстановить в кластере-приемнике:

    curl --request POST \
         "https://admin:<пароль пользователя admin>@<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_snapshot/<имя репозитория>/snapshot_1/_restore?wait_for_completion=false&pretty" \
         --cacert ~/.opensearch/root.crt \
         --header 'Content-Type: application/json' \
         --data '{
           "indices": "<список индексов>"
         }'
    

    Где список индексов — список восстанавливаемых индексов через запятую, например my_index*, my_index_2.*.

    Процесс восстановления может занять длительное время. Чтобы проверить статус восстановления, выполните команду:

    curl --request GET \
         "https://admin:<пароль пользователя admin>@<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_snapshot/<имя репозитория>/snapshot_1/_status?pretty" \
         --cacert ~/.opensearch/root.crt
    

Закончите миграцию

  1. Убедитесь, что все нужные индексы перенесены в кластер-приемник Managed Service for OpenSearch, а количество документов в них такое же, как и в кластере-источнике:

    Bash
    OpenSearch Dashboards

    Выполните команду:

    curl \
        --user <имя пользователя в кластере-приемнике>:<пароль пользователя в кластере-приемнике> \
        --cacert ~/.opensearch/root.crt \
        --request GET 'https://<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_cat/indices?v'
    

    В списке должны быть перенесенные индексы из Elasticsearch с количеством документов в столбце docs.count.

    1. Подключитесь к кластеру-приемнику с помощью OpenSearch Dashboards.
    2. Выберите общий тенант Global.
    3. Откройте панель управления, нажав на значок .
    4. В разделе OpenSearch Plugins выберите Index Management.
    5. Перейдите в раздел Indices.

    В списке должны быть перенесенные индексы из Elasticsearch с количеством документов в столбце Total documents.

  2. При необходимости отключите репозиторий снапшотов на стороне кластера-источника и кластера-приемника.

Удалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

  • Удалите сервисный аккаунт.
  • Удалите снапшоты из бакета и затем удалите бакет целиком.
  • Удалите кластер Managed Service for OpenSearch.

Миграция с помощью переиндексации

Чтобы мигрировать данные из кластера-источника Elasticsearch в кластер-приемник Managed Service for OpenSearch с помощью переиндексации:

  1. Настройте кластер-приемник.
  2. Запустите переиндексацию.
  3. Проверьте результат.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

  1. Создайте кластер-приемник Managed Service for OpenSearch нужной вам конфигурации с публичным доступом к группе хостов с ролью DATA.

  2. Установите SSL-сертификат:

    Linux (Bash)
    Windows (PowerShell)
    sudo mkdir --parents ~/.opensearch && \
    sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \
        --output-document ~/.opensearch/root.crt && \
    sudo chmod 0600 ~/.opensearch/root.crt
    

    Сертификат будет сохранен в каталоге $HOME/.opensearch/root.crt.

    mkdir $HOME\.opensearch; curl -o $HOME\.opensearch\root.crt https://storage.yandexcloud.net/cloud-certs/CA.pem
    

    Сертификат будет сохранен в каталоге $HOME\.opensearch\root.crt.

  3. Убедитесь, что вы можете подключиться к кластеру-приемнику Managed Service for OpenSearch с помощью OpenSearch API и Dashboards.

  4. Убедитесь, что у кластера-источника Elasticsearch есть доступ в интернет.

  5. Создайте в кластере-источнике пользователя с ролями monitoring_user и viewer.

Настройте кластер-приемник

  1. Создайте роль с привилегиями create_index и write для всех индексов (*).

  2. Создайте пользователя и назначьте ему эту роль.

    Совет

    В кластерах Managed Service for OpenSearch вы можете использовать переиндексацию от имени пользователя admin, имеющего роль superuser, но безопаснее для каждой задачи создавать отдельных пользователей с ограниченными привилегиями. Подробнее см. в разделе Управление пользователями OpenSearch.

Запустите переиндексацию

  1. Получите список хостов кластера-приемника.

  2. Для запуска переиндексации выполните запрос к хосту с ролью DATA в кластере-приемнике:

    curl --user <имя пользователя в кластере-приемнике>:<пароль пользователя в кластере-приемнике> \
         --cacert ~/.opensearch/root.crt \
         --request POST \
         "https://<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_reindex?wait_for_completion=false&pretty" \
         --header 'Content-Type: application/json' \
         --data '{
           "source": {
             "remote": {
               "host": "https://<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200",
               "username": "<имя пользователя в кластере-источнике>",
               "password": "<пароль пользователя в кластере-источнике>"
             },
             "index": "<имя индекса, псевдонима или потока данных в кластере-источнике>"
           },
           "dest": {
             "index": "<имя индекса, псевдонима или потока данных в кластере-приемнике>"
           }
         }'
    

    Результат:

    {
      "task" : "<идентификатор задачи переиндексации>"
    }
    

    Чтобы перенести несколько индексов, используйте цикл for:

    for index in <имена индексов, псевдонимов или потоков данных, разделенные пробелами>; do
      curl --user <имя пользователя в кластере-приемнике>:<пароль пользователя в кластере-приемнике> \
           --cacert ~/.opensearch/root.crt \
           --request POST \
           "https://<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_reindex?wait_for_completion=false&pretty" \
           --header 'Content-Type: application/json' \
           --data '{
             "source": {
               "remote": {
                 "host": "https://<IP адрес или FQDN хоста с ролью DATA в кластере-источнике>:9200",
                 "username": "<имя пользователя в кластере-источнике>",
                 "password": "<пароль пользователя в кластере-источнике>"
               },
               "index": "'$index'"
             },
             "dest": {
               "index": "'$index'"
             }
           }'
    done
    

    Результат:

    {
      "task" : "<идентификатор задачи переиндексации 1>"
    }
    {
      "task" : "<идентификатор задачи переиндексации 2>"
    }
    ...
    

    Подробнее о параметрах переиндексации см. в документации OpenSearch.

    Процесс переиндексации может занять длительное время. Чтобы проверить статус операции, выполните команду:

    curl --user <имя пользователя в кластере-приемнике>:<пароль пользователя в кластере-приемнике> \
         --cacert ~/.opensearch/root.crt \
         --request GET \
         "https://<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_tasks/<идентификатор задачи переиндексации>"
    
  3. Чтобы отменить операцию переиндексации, выполните команду:

    curl --user <имя пользователя в кластере-приемнике>:<пароль пользователя в кластере-приемнике> \
         --cacert ~/.opensearch/root.crt \
         --request POST \
         "https://<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_tasks/<идентификатор задачи переиндексации>/_cancel"
    

Проверьте результат

Убедитесь, что все нужные индексы перенесены в кластер-приемник Managed Service for OpenSearch, а количество документов в них такое же как и в кластере-источнике:

Bash
OpenSearch Dashboards

Выполните команду:

curl \
    --user <имя пользователя в кластере-приемнике>:<пароль пользователя в кластере-приемнике> \
    --cacert ~/.opensearch/root.crt \
    --request GET 'https://<идентификатор хоста OpenSearch с ролью DATA>.mdb.yandexcloud.net:9200/_cat/indices?v'

В списке должны быть перенесенные индексы из Elasticsearch с количеством документов в столбце docs.count.

  1. Подключитесь к кластеру-приемнику с помощью OpenSearch Dashboards.
  2. Выберите общий тенант Global.
  3. Откройте панель управления, нажав на значок .
  4. В разделе OpenSearch Plugins выберите Index Management.
  5. Перейдите в раздел Indices.

В списке должны быть перенесенные индексы из Elasticsearch с количеством документов в столбце Total documents.

Удалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

  • Удалите кластер Managed Service for OpenSearch.
  • Если вы зарезервировали для доступа к кластеру публичные статические IP-адреса, освободите и удалите их.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Миграция с помощью снапшотов
  • Перед началом работы
  • Создайте снапшот на кластере-источнике
  • Восстановите снапшот в кластере-приемнике
  • Закончите миграцию
  • Удалите созданные ресурсы
  • Миграция с помощью переиндексации
  • Перед началом работы
  • Настройте кластер-приемник
  • Запустите переиндексацию
  • Проверьте результат
  • Удалите созданные ресурсы