Удаление объекта
Важно
По умолчанию операция удаления необратима. Восстановить можно только те объекты, которые были загружены при включенном версионировании.
Удалить объект или версию объекта без блокировки
Любой объект или версию объекта, на которую не установлена блокировка (в том числе если в бакете не включены блокировки), можно удалить без дополнительных подтверждений.
Примечание
Объект, составная загрузка которого не завершена, удаляется по другой инструкции.
Минимальная необходимая роль — storage.editor
.
Чтобы удалить объект:
-
В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, где хранится удаляемый объект. -
На панели слева выберите
Объекты. -
Чтобы видеть все версии объектов в списке, справа от поля поиска объекта в бакете, включите опцию Показать версии.
-
Чтобы удалить один объект, нажмите
→ Удалить.Чтобы выполнить это же действие с несколькими объектами, отметьте их в списке и нажмите кнопку Удалить в нижней части экрана.
Примечание
Можно удалить папку с объектами. Это асинхронная операция, после запуска которой объекты не исчезают сразу из бакета, а удаляются постепенно. Вы в это время можете выполнять другие операции в консоли управления, в том числе загрузку новых объектов в удаляемую папку. Детали смотрите в разделе Папка.
-
В открывшемся окне нажмите кнопку Удалить.
В консоли управления информация о количестве объектов в бакете и занятом месте обновляется с задержкой в несколько минут.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>
. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для удаления объекта из бакета:
yc storage s3api delete-object --help
-
Получите список бакетов в каталоге по умолчанию:
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 | +------------------+----------------------+-------------+-----------------------+---------------------+
-
Выполните команду:
yc storage s3api put-object \ --bucket <имя_бакета> \ --key <ключ_объекта>
Где:
--bucket
— имя вашего бакета.--key
— ключ объекта.
Результат:
request_id: 0311ec7********
Альтернативная команда:
yc storage s3 rm \ s3://<имя_бакета>/<ключ_объекта>
Результат:
delete: s3://my-bucket/object.txt
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
В терминале выполните команду aws s3api delete-object
:
aws s3api delete-object \
--endpoint-url https://storage.yandexcloud.net \
--bucket <имя_бакета> \
--key <ключ_объекта>
Где:
--bucket
— имя вашего бакета.--key
— ключ объекта.
Чтобы одновременно удалить список объектов, укажите ключи этих объектов в параметре --delete
:
-
Bash:
aws s3api delete-objects \ --endpoint-url=https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --delete '{"Objects":[{"Key":"<ключ_объекта_1>"},{"Key":"<ключ_объекта_2>"},...,{"Key":"<ключ_объекта_n>"}]}'
-
PowerShell:
aws s3api delete-objects ` --endpoint-url=https://storage.yandexcloud.net ` --bucket <имя_бакета> ` --delete '{\"Objects\":[{\"Key\":\"<ключ_объекта_1>\"},{\"Key\":\"<ключ_объекта_2>\"},...,{\"Key\":\"<ключ_объекта_n>\"}]}'
Где:
--bucket
— имя бакета.<ключ_объекта_1>
,<ключ_объекта_2>
,<ключ_объекта_n>
— ключи объектов, которые нужно удалить.
Результат:
{
"Deleted": [
{
"Key": "<ключ_объекта_1>",
"VersionId": "null"
},
{
"Key": "<ключ_объекта_2>",
"VersionId": "null"
}
...
{
"Key": "<ключ_объекта_n>",
"VersionId": "null"
}
]
}
Указать объекты для удаления можно с помощью шаблона запроса в формате JMESPath. Для удаления объектов по шаблону выполните команду:
-
Bash:
aws s3api list-objects \ --endpoint-url https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --query '<запрос>' \ --output text | xargs -I {} aws s3api delete-object --endpoint-url https://storage.yandexcloud.net --bucket <имя_бакета> --key {}
Где:
--bucket
— имя бакета.--query
— запрос в формате JMESPath .
Пример команды для удаления из бакета
sample-bucket
всех объектов, расположенных в папкеscreenshots
, имена файлов которых начинаются с даты20231002
:aws s3api list-objects \ --endpoint-url https://storage.yandexcloud.net \ --bucket sample-bucket \ --query 'Contents[?starts_with(Key, `screenshots/20231002`) == `true`].[Key]' \ --output text | xargs -I {} aws s3api delete-object --endpoint-url https://storage.yandexcloud.net --bucket sample-bucket --key {}
-
PowerShell:
Foreach($x in (aws s3api list-objects ` --endpoint-url https://storage.yandexcloud.net ` --bucket <имя_бакета> ` --query '<запрос>' ` --output text)) ` {aws s3api delete-object --endpoint-url https://storage.yandexcloud.net --bucket <имя_бакета> --key $x}
Где:
--bucket
— имя бакета.--query
— запрос в формате JMESPath .
Пример команды для удаления из бакета
sample-bucket
всех объектов, расположенных в папкеscreenshots
, имена файлов которых начинаются с даты20231002
:Foreach($x in (aws s3api list-objects ` --endpoint-url https://storage.yandexcloud.net ` --bucket sample-bucket ` --query 'Contents[?starts_with(Key, `screenshots/20231002`) == `true`].[Key]' ` --output text)) ` {aws s3api delete-object --endpoint-url https://storage.yandexcloud.net --bucket sample-bucket --key $x}
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы удалить объект из бакета, созданный с помощью Terraform:
-
Откройте файл конфигурации Terraform и удалите фрагмент с описанием объекта.
Пример описания объекта в конфигурации Terraform
... resource "yandex_storage_object" "cute-cat-picture" { access_key = "YCAJEX9Aw2ge********-w-lJ" secret_key = "YCONxG7rSdzVF9UMxLA_NRy5VbKzKlqZ********" bucket = "cat-pictures" key = "cute-cat" source = "/images/cats/cute-cat.jpg" } ...
-
В командной строке перейдите в папку, где расположен файл конфигурации Terraform.
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.Проверить изменения можно в консоли управления
.
Удалить версию объекта с блокировкой (object lock)
Если в бакете включены блокировки версий объектов, некоторым или всем пользователям может быть запрещено удалять версию объекта.
Чтобы проверить, установлена ли блокировка, и удалить версию объекта при возможности:
- Если это возможно, снимите блокировку с объекта который вы хотите удалить.
- Удалите объект.
В консоли управления информация о количестве объектов в бакете и занятом месте обновляется с задержкой в несколько минут.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>
. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name
или --folder-id
.
-
Получите информации о блокировке версии объекта::
yc storage s3api head-object \ --bucket <имя_бакета> \ --key <ключ_объекта> \ --version-id <идентификатор_версии>
Где:
--bucket
— имя вашего бакета.--key
— ключ объекта.--version-id
— идентификатор версии объекта.
Если на версию установлена блокировка, об этом отобразится информация:
object_lock_mode: GOVERNANCE object_lock_retain_until_date: "2024-10-11T10:23:12Z"
Или:
object_lock_legal_hold_status: ON
Где:
-
object_lock_mode
— тип временной блокировки:GOVERNANCE
— временная управляемая блокировка. Удалить версию объекта может пользователь с рольюstorage.admin
.COMPLIANCE
— временная строгая блокировка. Удалить версию объекта нельзя.
-
object_lock_retain_until_date
— дата и время окончания временной блокировки в любом из форматов, описанных в стандарте HTTP . Например,Mon, 12 Dec 2022 09:00:00 GMT
. -
object_lock_legal_hold_status
— статус бессрочной блокировки:ON
— включена. Удалить версию объекта нельзя. Снять блокировку может пользователь с рольюstorage.uploader
.OFF
— выключена.
Если на версии объекта нет блокировки, эти поля не отобразятся, и версию объекта можно удалить по инструкции по удалению версии без блокировки.
-
Получите список бакетов в каталоге по умолчанию:
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 | +------------------+----------------------+-------------+-----------------------+---------------------+
-
Если установлена временная управляемая блокировка (
"object_lock_mode": "GOVERNANCE"
) и у вас есть рольstorage.admin
, удалите версию объекта:yc storage s3api delete-object \ --bucket <имя_бакета> \ --key <ключ_объекта> \ --version-id <идентификатор_версии> \ --bypass-governance-retention
Где:
--bucket
— имя вашего бакета.--key
— ключ объекта.--version-id
— идентификатор версии объекта.--bypass-governance-retention
— флаг, подтверждающий обход блокировки.
Результат:
request_id: a58bf215******** version_id: "null"
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Получите информацию о блокировке версии объекта:
aws --endpoint-url=https://storage.yandexcloud.net \ s3api head-object \ --bucket <имя_бакета> \ --key <ключ_объекта> \ --version-id <идентификатор_версии>
Где:
--bucket
— имя вашего бакета.--key
— ключ объекта.--version-id
— идентификатор версии объекта.
Если на версию установлена блокировка, информация о ней отобразится в результате выполнения команды:
{ ... "ObjectLockMode": "<тип_временной_блокировки>", "ObjectLockRetainUntilDate": "<дата_и_время>", "ObjectLockLegalHoldStatus": "<статус_бессрочной_блокировки>", ... }
Где:
-
ObjectLockMode
— тип временной блокировки:GOVERNANCE
— временная управляемая блокировка. Удалить версию объекта может пользователь с рольюstorage.admin
.COMPLIANCE
— временная строгая блокировка. Удалить версию объекта нельзя.
-
ObjectLockRetainUntilDate
— дата и время окончания временной блокировки в любом из форматов, описанных в стандарте HTTP . Например,Mon, 12 Dec 2022 09:00:00 GMT
. -
ObjectLockLegalHoldStatus
— статус бессрочной блокировки:ON
— включена. Удалить версию объекта нельзя. Снять блокировку может пользователь с рольюstorage.uploader
.OFF
— выключена.
Если на версии объекта нет блокировки, эти поля не отобразятся, и версию объекта можно удалить по инструкции по удалению версии без блокировки.
-
Если установлена временная управляемая блокировка (
"ObjectLockMode": "GOVERNANCE"
) и у вас есть рольstorage.admin
, удалите версию объекта:aws --endpoint-url=https://storage.yandexcloud.net \ s3api delete-object \ --bucket <имя_бакета> \ --key <ключ_объекта> \ --version-id <идентификатор_версии> \ --bypass-governance-retention
Где:
--bucket
— имя вашего бакета.--key
— ключ объекта.--version-id
— идентификатор версии объекта.--bypass-governance-retention
— флаг, подтверждающий обход блокировки.
- Чтобы получить информацию о блокировке версии объекта, воспользуйтесь методами S3 API getObjectRetention (временная блокировка) и getObjectLegalHold (бессрочная блокировка).
- Если установлена только временная управляемая блокировка (
GOVERNANCE
) и у вас есть рольstorage.admin
, для удаления версии объекта воспользуйтесь методом S3 API delete. Укажите в запросе идентификатор версии и заголовокX-Amz-Bypass-Governance-Retention
, чтобы подтвердить обход блокировки.