Удаление объектов
Вы можете удалить любой объект в любой момент. В Object Storage имеется возможность как единичного, так и массового удаления объектов.
Особенности и ограничения
Заголовок раздела «Особенности и ограничения»- Если в бакете не включено версионирование, объект удаляется из него навсегда.
- Если в бакете включено версионирование, будет создан маркер удаления, который станет текущей версией объекта. Предыдущие версии объекта при этом не будут удалены. При необходимости вы можете удалить конкретную версию объекта, указав ее
versionID. - При массовом удалении вы можете удалить до 1000 объектов за одну операцию.
Совет
С помощью правил жизненного цикла можно установить для объектов срок, по истечении которого объекты будут удаляться автоматически.
Удалить один объект
Заголовок раздела «Удалить один объект»- Веб-консоль
- AWS CLI
- Python
- Go
- В веб-консоли выберите нужный проект.
- В списке сервисов выберите Object Storage.
- Нажмите на имя нужного бакета.
- Нажмите на значок ... для удаляемого объекта и выберите Удалить.
1aws s3 rm s3://<имя бакета>/<ключ объекта>Приведенный код на Python:
- Импортирует библиотеку
boto3— официальный AWS SDK для Python. - Cоздает сессию и клиент для подключения к Object Storage.
- Определяет имя бакета и ключ объекта, который нужно удалить.
- Удаляет объект.
- Выводит сообщение об успешном удалении объекта.
1# Импортируем boto32import boto33
4# Создаем сессию и клиент5session = boto3.session.Session(profile_name='default')6s3 = session.client(7 service_name='s3',8 endpoint_url='https://storage.mwsapis.ru'9)10
11# Определяем имя бакета и ключ объекта, который нужно удалить12bucket_name = 'bucket'13object_key = 'file.txt'14
15# Удаляем объект16try:17 s3.delete_object(18 Bucket=bucket_name,19 Key=object_key20 )21 print(f'Successfully deleted {object_key} from {bucket_name}')22except Exception as e:23 print(f'Error deleting object: {e}')Приведенный код на Go:
- Импортирует необходимые пакеты, в том числе AWS SDK для Go.
- Получает из аргументов командной строки имя бакета и ключ объекта, который нужно удалить.
- Подгружает конфигурацию из
~/.aws/*. - Создает клиент для доступа к Object Storage.
- Удаляет объект.
- Выводит сообщение об успешном удалении объекта.
1package main2
3import (4 "context"5 "flag"6 "fmt"7 "log"8
9 "github.com/aws/aws-sdk-go-v2/aws"10 "github.com/aws/aws-sdk-go-v2/config"11 "github.com/aws/aws-sdk-go-v2/service/s3"12)13
14func main() {15 // Получаем имя бакета и ключ объекта из аргумента командной строки16 bucketName := flag.String("b", "", "The name of the bucket")17 objectKey := flag.String("k", "", "The key of the object to delete")18 flag.Parse()19
20 if *bucketName == "" {21 fmt.Println("You must supply the name of a bucket (-b BUCKET)")22 return23 }24
25 if *objectKey == "" {26 fmt.Println("You must supply the key of an object")27 return28 }29
30 // Подгружаем конфигурацию из ~/.aws/*31 cfg, err := config.LoadDefaultConfig(context.TODO())32 if err != nil {33 log.Fatal(err)34 }35
36 // Создаем клиент для доступа к Object Storage37 client := s3.NewFromConfig(cfg)38
39
40 deleteInput := &s3.DeleteObjectInput{41 Bucket: aws.String(*bucketName),42 Key: aws.String(*objectKey),43 }44
45 _, err = client.DeleteObject(context.TODO(), deleteInput)46 if err != nil {47 log.Fatalf("Unable to delete %q from %q, %v", *objectKey, *bucketName, err)48 }49
50 fmt.Printf("Successfully deleted %q to %q\n", *objectKey, *bucketName)51}Удалить все объекты из бакета
Заголовок раздела «Удалить все объекты из бакета»- Веб-консоль
- AWS CLI
- Python
- Go
- В веб-консоли выберите нужный проект.
- В списке сервисов выберите Object Storage.
- Нажмите на имя нужного бакета.
- Нажмите кнопку Очистить бакет и подтвердите удаление всех объектов.
1aws s3 rm s3://<имя бакета> --recursiveПриведенный код на Python:
- Импортирует библиотеку
boto3— официальный AWS SDK для Python. - Cоздает сессию и клиент для подключения к Object Storage.
- Определяет имя бакета, из которого нужно удалить все объекты.
- Проверяет, включено ли в бакете версионирование, и если включено, удаляет все объекты и их версии.
- Если версионирование не включено, удаляет все объекты.
1import boto32session = boto3.session.Session(profile_name='default')3s3 = session.client(4 service_name='s3',5 endpoint_url='https://storage.mwsapis.ru'6)7s3 = boto3.resource('s3')8bucket = s3.Bucket('bucket')9bucket_versioning = s3.BucketVersioning('bucket')10if bucket_versioning.status == 'Enabled':11 bucket.object_versions.delete()12else:13 bucket.objects.all().delete()Приведенный код на Go:
- Получает из аргумента командной строки имя бакета, из которого нужно удалить все объекты.
- Подгружает конфигурацию из
~/aws/*. - Создает клиент для подключения к Object Storage.
- Получает список объектов из бакета.
- Удаляет все объекты.
- Выводит сообщение об успешном удалении.
1package main2
3import (4 "context"5 "flag"6 "fmt"7 "log"8
9 "github.com/aws/aws-sdk-go-v2/aws"10 "github.com/aws/aws-sdk-go-v2/config"11 "github.com/aws/aws-sdk-go-v2/service/s3"12 "github.com/aws/aws-sdk-go-v2/service/s3/types"13)14
15func main() {16 // Получаем имя бакета из аргумента командной строки17 bucketName := flag.String("b", "", "The name of the bucket")18 flag.Parse()19
20 if *bucketName == "" {21 fmt.Println("You must supply the name of a bucket (-b BUCKET)")22 return23 }24
25 // Подгружаем конфигурацию из ~/.aws/*26 cfg, err := config.LoadDefaultConfig(context.TODO())27 if err != nil {28 log.Fatal(err)29 }30
31 // Создаем клиент для подключения к Object Storage32 client := s3.NewFromConfig(cfg)33
34 // Запрашиваем список всех объектов в бакете35 result, err := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{36 Bucket: aws.String(*bucketName),37 })38 if err != nil {39 log.Fatal(err)40 }41
42// Удаляем все объекты из бакета43deleteObjectsInput := &s3.DeleteObjectsInput{44 Bucket: aws.String(*bucketName),45 Delete: &types.Delete{46 Objects: make([]types.ObjectIdentifier, 0, len(result.Contents)),47 },48}49
50for _, object := range result.Contents {51 deleteObjectsInput.Delete.Objects = append(deleteObjectsInput.Delete.Objects, types.ObjectIdentifier{52 Key: object.Key,53 })54}55
56_, err = client.DeleteObjects(context.TODO(), deleteObjectsInput)57if err != nil {58 log.Fatal(err)59}60log.Printf("Successfully deleted all objects from bucket %s", *bucketName)61
62}Удалить объекты с указанным префиксом
Заголовок раздела «Удалить объекты с указанным префиксом»- Веб-консоль
- AWS CLI
- Python
- Go
- В веб-консоли выберите нужный проект.
- В списке сервисов выберите Object Storage.
- Нажмите на имя нужного бакета.
- Нажмите на значок ... для удаляемой папки и выберите Удалить.
1aws s3 rm s3://<имя бакета>/<префикс> --recursiveПриведенный код на Python:
- Импортирует необходимые библиотеки, в том числе
boto3— официальный AWS SDK для Python. - Принимает в качестве аргументов командной строки имя бакета и префикс объектов, которые нужно удалить.
- Создает сессию с использованием профиля по умолчанию, который хранится в файле
~/.aws/credentials. - Создает клиент с использованием созданной сессии.
- Получает список всех объектов с указанным префиксом.
- Удаляет все эти объекты.
1import boto32import argparse3
4def delete_objects_with_prefix(bucket_name, prefix):5 session = boto3.session.Session(profile_name='default')6 s3 = session.client(7 service_name='s3',8 endpoint_url='https://storage.mwsapis.ru/'9 )10
11 # Получаем список всех объектов в бакете с указанным префиксом12 objects = s3.list_objects_v2(Bucket=bucket_name, Prefix=prefix)13 objects_to_delete = [{'Key': obj['Key']} for obj in objects.get('Contents', [])]14
15 # Удаляем объекты по частям, т.к. есть ограничение на количество объектов в одном запросе16 max_keys = 100017 for i in range(0, len(objects_to_delete), max_keys):18 response = s3.delete_objects(19 Bucket=bucket_name,20 Delete={'Objects': objects_to_delete[i:i+max_keys]}21 )22 print(f"Deleted {len(response.get('Deleted', []))} objects")23
24 print(f"Object with {prefix} deleted")25
26if __name__ == "__main__":27 parser = argparse.ArgumentParser(description='Delete objects with a specific prefix from an S3 bucket')28 parser.add_argument('-b', '--bucket', required=True, help='Name of the bucket')29 parser.add_argument('-p', '--prefix', required=True, help='Prefix of the objects to delete')30 args = parser.parse_args()31
32 delete_objects_with_prefix(args.bucket, args.prefix)Приведенный код на Go:
- Импортирует необходимые пакеты, в том числе официальный AWS SDK для Go.
- Получает из аргументов командной строки имя бакета и префикс объектов, которые нужно удалить.
- Подгружает конфигурацию из файлов
~/.aws/*. - Cоздает клиент для доступа к Object Storage.
- Удаляет все объекты с указанным префиксом
- Выводит сообщение об успешном удалении.
1package main2
3import (4 "context"5 "flag"6 "fmt"7 "log"8
9 "github.com/aws/aws-sdk-go-v2/aws"10 "github.com/aws/aws-sdk-go-v2/config"11 "github.com/aws/aws-sdk-go-v2/service/s3"12 "github.com/aws/aws-sdk-go-v2/service/s3/types"13)14
15func main() {16 // Получаем имя бакета и префикс объектов из аргументов командной строки17 bucketName := flag.String("b", "", "The name of the bucket")18 prefix := flag.String("p", "", "The name of the folder to delete")19 flag.Parse()20
21 if *bucketName == "" {22 fmt.Println("You must supply the name of a bucket (-b BUCKET)")23 return24 }25
26 if *prefix == "" {27 fmt.Println("You must supply the prefix -p PREFIX)")28 return29 }30
31 // Подгружаем конфигурацию из ~/.aws/*32 cfg, err := config.LoadDefaultConfig(context.TODO())33 if err != nil {34 log.Fatal(err)35 }36
37 // Создаем клиент для доступа к Object Storage38 client := s3.NewFromConfig(cfg)39
40 // Получаем список всех объектов с указанным префиксом41 listObjectsInput := &s3.ListObjectsV2Input{42 Bucket: aws.String(*bucketName),43 Prefix: aws.String(*prefix),44 MaxKeys: aws.Int32(1000), // Максимальное количество объектов, которое можно получить за один вызов45 }46
47 listObjectsOutput, err := client.ListObjectsV2(context.TODO(), listObjectsInput)48 if err != nil {49 log.Fatal(err)50 }51
52 var objectIdentifiers []types.ObjectIdentifier53 for _, obj := range listObjectsOutput.Contents {54 objectIdentifiers = append(objectIdentifiers, types.ObjectIdentifier{Key: obj.Key})55 }56
57 // Удаляем все объекты с указанным префиксом58 deleteObjectsInput := &s3.DeleteObjectsInput{59 Bucket: aws.String(*bucketName),60 Delete: &types.Delete{61 Objects: objectIdentifiers,62 },63 }64
65 _, err = client.DeleteObjects(context.TODO(), deleteObjectsInput)66 if err != nil {67 log.Fatal(err)68 }69
70 log.Printf("Successfully deleted all objects with prefix %s", *prefix)71}