Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách xóa đối tượng khỏi S3 bằng Boto3 và AWS Resource


Trong bài viết này, chúng ta sẽ xem cách xóa một đối tượng khỏi S3 bằng thư viện Boto3 của Python.

Ví dụ – Xóa test.zip từ Bucket_1/testfolder của S3.

Phương pháp/Thuật toán giải quyết

Bước 1 – Import boto3 và các ngoại lệ từ botocore để xử lý lỗi.

Bước 2 – s3_files_path là tham số trong hàm.

Bước 3 – Kiểm tra s3_files_path có đúng định dạng AWS s3://bucket_name/key không.

Bước 4 – Tạo phiên AWS (session) bằng thư viện boto3.

Bước 5 – Tạo resource AWS cho S3.

Bước 6 – Tách đường dẫn S3 để tách tên bucket gốc và đường dẫn đối tượng cần xóa.

Bước 7 – Sử dụng hàm delete_object và truyền tên bucket và key để xóa.

Bước 8 – Đối tượng cũng là một dictionary chứa tất cả chi tiết của file. Lấy chi tiết LastModified của từng file và so sánh với timestamp ngày cho trước.

Bước 9 – Xử lý ngoại lệ chung nếu có lỗi xảy ra khi xóa file.

Ví dụ

Sử dụng mã sau để xóa đối tượng từ S3:

import boto3
from botocore.exceptions import ClientError

def delete_objects_from_s3(s3_files_path):
    if 's3://' not in s3_files_path:
        raise Exception('Đường dẫn không phải là đường dẫn S3 hợp lệ.')
    session = boto3.session.Session(profile_name='saml')
    s3_resource = session.resource('s3')
    s3_tokens = s3_files_path.split('/')
    bucket_name = s3_tokens[2]
    object_path = ""
    filename = s3_tokens[len(s3_tokens) - 1]
    print('bucket_name: ' + bucket_name)
    if len(s3_tokens) > 4:
        for tokn in range(3, len(s3_tokens) - 1):
            object_path += s3_tokens[tokn] + "/"
        object_path += filename
    else:
        object_path += filename
    print('object: ' + object_path)
    try:
        result = s3_resource.meta.client.delete_object(Bucket=bucket_name, Key=object_path)
    except ClientError as e:
        raise Exception("Lỗi client boto3 trong delete_objects_from_s3: " + e.__str__())
    except Exception as e:
        raise Exception("Lỗi không mong đợi trong delete_objects_from_s3 của s3 helper: " + e.__str__())
# xóa test.zip
print(delete_objects_from_s3("s3://Bucket_1/testfolder/test.zip"))

Kết quả

bucket_name: Bucket_1
object: testfolder/test.zip