Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Object Storage
    • Все инструкции
      • Загрузка объекта
      • Составная загрузка объекта
      • Получение списка объектов в бакете
      • Получение информации об объекте
      • Скачивание объекта
      • Восстановление версии объекта
      • Переименование и перемещение объекта
      • Копирование объектов
      • Получение публичной ссылки на объект
      • Настройка блокировок версии объекта
      • Удаление объекта
      • Удаление всех объектов
      • Удаление частично загруженного объекта
      • Редактирование ACL объекта
      • Управление метками объекта
      • Управление пользовательскими метаданными объекта
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы
  1. Пошаговые инструкции
  2. Объекты
  3. Удаление всех объектов

Удаление всех объектов из бакета

Статья создана
Yandex Cloud
Улучшена
Обновлена 5 мая 2025 г.

Важно

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

Примечание

Для автоматического удаления частично загруженных объектов в Object Storage настройте правило жизненных циклов.

Чтобы очистить бакет и не платить за хранение:

Yandex Cloud CLI
AWS CLI
Python (boto3)
API

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Посмотрите описание команды CLI для удаления объектов:

    yc storage s3api delete-objects --help
    
  2. Получите список бакетов в каталоге по умолчанию:

    yc storage bucket list
    

    Результат:

    +------------------+----------------------+-------------+-----------------------+---------------------+
    |       NAME       |      FOLDER ID       |  MAX SIZE   | DEFAULT STORAGE CLASS |     CREATED AT      |
    +------------------+----------------------+-------------+-----------------------+---------------------+
    | first-bucket     | b1gmit33ngp6******** | 53687091200 | STANDARD              | 2022-12-16 13:58:18 |
    +------------------+----------------------+-------------+-----------------------+---------------------+
    
  3. Подготовьте файл JSON со списком объектов для удаления. Пример наполнения:

    {
        "Objects": [
            {
                "Key": "<ключ_объекта>"
            },
            {
                "Key": "<ключ_объекта>"
            },
            ...
        ]          
    }
    

    Где:

    • Objects — массив объектов для удаления.
    • Key — ключ объекта.
  4. Выполните команду:

    yc storage s3api delete-objects \
      --bucket <имя_бакета> \
      --delete <путь_к_файлу_json>
    

    Где:

    • --bucket — имя вашего бакета.
    • --delete — путь к файлу JSON со списком объектов для удаления.

    Результат:

    deleted:
      - key: file-1
        version_id: "null"
      - key: file-2
        version_id: "null"
    request_id: 4c35e7d4********
    

    Альтернативная команда:

    yc storage s3 rm \
      s3://<имя_бакета>/ \
      --recursive
    

    Где --recursive — параметр для удаления всех объектов.

    Результат:

    delete: s3://my-bucket/object-1.txt
    delete: s3://my-bucket/object-2.txt
    ...
    delete: s3://my-bucket/object-n.txt
    

Если у вас еще нет AWS CLI, установите и сконфигурируйте его.

  1. Создайте переменную с именем бакета:

    BUCKET_NAME=<имя_бакета>
    
  2. Удалите все версии объектов из бакета:

    aws s3api delete-objects \
      --endpoint-url https://storage.yandexcloud.kz \
      --bucket $BUCKET_NAME \
      --delete \
        "$(aws s3api list-object-versions \
          --endpoint-url https://storage.yandexcloud.kz \
          --bucket $BUCKET_NAME \
          --query '{Objects: Versions[].{Key: Key, VersionId: VersionId}}' \
          --max-items 1000)"
    

    Также вместо параметра --max-items вы можете использовать --max-keys.

    Результат:

    {
        "Deleted": [
            {
                "Key": "object_000",
                "VersionId": "0005CDD3********"
            },
            {
                "Key": "object_001",
                "VersionId": "0005CDD3********"
            },
            ...
        ]
    }
    

    С помощью этой команды можно удалить до 1000 версий объектов: это связано с ограничением операции aws s3api delete-objects. Если в бакете больше версий, повторите команду несколько раз.

  3. Если для бакета включено версионирование, удалите все delete-маркеры:

    aws s3api delete-objects \
      --endpoint-url https://storage.yandexcloud.kz \
      --bucket $BUCKET_NAME \
      --delete \
        "$(aws s3api list-object-versions \
          --endpoint-url https://storage.yandexcloud.kz \
          --bucket $BUCKET_NAME \
          --query '{Objects: DeleteMarkers[].{Key: Key, VersionId: VersionId}}' \
          --max-items 1000)"
    

    Также вместо параметра --max-items вы можете использовать --max-keys.

    Результат:

    {
        "Deleted": [
            {
                "Key": "object_034",
                "DeleteMarker": true,
                "DeleteMarkerVersionId": "0005CDD3********"
            },
            {
                "Key": "object_057",
                "DeleteMarker": true,
                "DeleteMarkerVersionId": "0005CDD3********"
            },
            ...
        ]
    }
    

    С помощью этой команды можно удалить до 1000 delete-маркеров: это связано с ограничением операции aws s3api delete-objects. Если в бакете больше delete-маркеров, повторите команду несколько раз.

  4. Удалите частично загруженные объекты:

    aws s3api list-multipart-uploads \
      --endpoint-url https://storage.yandexcloud.kz \
      --bucket $BUCKET_NAME \
    | jq -r '.Uploads[] | "--key \"\(.Key)\" --upload-id \(.UploadId)"' \
    | while read -r line; do
      eval 
        "aws s3api abort-multipart-upload \
          --endpoint-url https://storage.yandexcloud.kz \
          --bucket $BUCKET_NAME \
          $line";
    done
    
  5. Получите список частей объектов, оставшихся в бакете:

    aws s3api list-multipart-uploads \
      --endpoint-url https://storage.yandexcloud.kz \
      --bucket $BUCKET_NAME \
    | jq -r '.Uploads[] | "--key \"\(.Key)\" --upload-id \(.UploadId)"' \
    | while read -r line; do
      eval 
        "aws s3api list-parts \
          --endpoint-url https://storage.yandexcloud.kz \
          --bucket $BUCKET_NAME \
          $line";
    done
    

    В списке могут оказаться части объектов, загрузка которых началась до выполнения предыдущего шага и закончилась после него. Если список не пуст, повторите шаги 4–5.

Выполните следующий код:

import boto3

bucket_name = '<имя_бакета>'
s3 = boto3.resource('s3',
    endpoint_url='https://storage.yandexcloud.kz',
    aws_access_key_id='<идентификатор_ключа>',
    aws_secret_access_key='<секретный_ключ>')
bucket = s3.Bucket(bucket_name)

# Deleting all versions (works for non-versioned buckets too).
bucket.object_versions.delete()

# Aborting all multipart uploads, which also deletes all parts.
for multipart_upload in bucket.multipart_uploads.iterator():
    # Part uploads that are currently in progress may or may not succeed,
    # so it might be necessary to abort a multipart upload multiple times.
    while len(list(multipart_upload.parts.all())) > 0:
        multipart_upload.abort()

Воспользуйтесь методом S3 API deleteMultipleObjects.

В консоли управления информация о количестве объектов в бакете и занятом месте обновляется с задержкой в несколько минут.

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

Предыдущая
Удаление объекта
Следующая
Удаление частично загруженного объекта
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»