Удаление объекта
Удалить объект или версию объекта без блокировки
Любой объект или версию объекта, на которую не установлена блокировка (в том числе если в бакете не включены блокировки), можно удалить без дополнительных подтверждений.
Примечание
Объект, составная загрузка которого не завершена, удаляется по другой инструкции.
Минимальная необходимая роль — storage.editor
.
Чтобы удалить объект:
-
В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, где хранится удаляемый объект. -
На панели слева выберите
Объекты. -
Чтобы видеть все версии объектов в списке, справа от поля поиска объекта в бакете, включите опцию Показать версии.
-
Чтобы удалить один объект, нажмите
→ Удалить.Чтобы выполнить это же действие с несколькими объектами, отметьте их в списке и нажмите кнопку Удалить в нижней части экрана.
Примечание
Можно удалить папку с объектами. Это асинхронная операция, после запуска которой объекты не исчезают сразу из бакета, а удаляются постепенно. Вы в это время можете выполнять другие операции в консоли управления, в том числе загрузку новых объектов в удаляемую папку. Детали смотрите в разделе Папка.
-
В открывшемся окне нажмите кнопку Удалить.
В консоли управления информация о количестве объектов в бакете и занятом месте обновляется с задержкой в несколько минут.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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********
Если у вас еще нет 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. Вы можете указать другой каталог с помощью параметра --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
, чтобы подтвердить обход блокировки.