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