Xóa các multipart chưa hoàn thành

Xóa các multipart chưa hoàn thành

Multipart trong trong Bizfly Cloud S3 hỗ trợ các trường hợp cần tải lên các file lớn, thường là những file lớn hơn 100 MB. Vì khi tải lên một file lớn trong một request có thể gặp sự cố do sự cố hoặc lỗi mạng tiềm ẩn. Tải lên nhiều phần thành nhỏ vaf song song còn giúp khôi phục sau lỗi dễ dàng hơn và có thể cải thiện đáng kể tốc độ tải lên.

Tuy nhiên, khi các multipart không được sử dụng lại sẽ làm tăng dung lượng lưu trữ không cần thiết của người sử dụng. Theo đó, multipart có thể xóa theo các sau:

  • Xóa thủ công, bằng SDK hoặc các tool như s3 browser
  • Lên lịch tự động xóa các multipart không hoàn thành bằng tính năng lifecycle

1. Xóa thủ công multipart không hoàn thiện

Việc xóa thủ công các mulipart chưa hoàn thành có thể thực hiện bằng SDK boto3 như sau:

import boto3

# Khởi tạo client của S3
s3 = boto3.client('s3')

# Lấy thông tin các upload không thành công và xóa
uploads = s3client.list_multipart_uploads(Bucket=bucket_name, Prefix=object_key)
for upload in uploads.get('Uploads', []):
    upload_id = upload['UploadId']
    print(f"Aborting incomplete upload with Upload ID: {upload_id}")
    s3client.abort_multipart_upload(Bucket=bucket_name, Key=object_key, UploadId=upload_id)

2. Lên lịch xóa multipart bằng lifecycle

Lên lịch xóa các multipart chưa hoàn thành bằng câu hình lifecyle, ví dụ ở đây là sau 10 ngày:

lifecycle_config = {
    'Rules': [
        {
            'Status': 'Enabled',
            'Prefix': '',
            'ID': 'RemoveIncompleteMultipartUploads',
            'AbortIncompleteMultipartUpload': {
                'DaysAfterInitiation': 10
            }
        }
    ]
}

# Áp cấu hình lifecycle cho s3 bucket
s3.put_bucket_lifecycle_configuration(Bucket=bucket_name, LifecycleConfiguration=lifecycle_config)