Trong bài viết này, chúng ta sẽ xem cách lấy danh sách tất cả các phiên bản của đối tượng (object) từ S3 có mặt trong AWS Resource.
Ví dụ
Liệt kê tất cả các phiên bản của test.zip từ Bucket_1/testfolder của S3.
Đề bài: Sử dụng thư viện boto3 trong Python để lấy danh sách tất cả các phiên bản của đối tượng từ S3.
Cách tiếp cận / Thuật toán
Bước 1: Import boto3 và botocore.exceptions để xử lý ngoại lệ.
Bước 2: bucket_name là tham số bắt buộc.
Bước 3: Tạo phiên làm việc AWS bằng boto3.
Bước 4: Tạo client AWS cho s3.
Bước 5: Liệt kê tất cả phiên bản của đối tượng trong bucket đã cho bằng hàm list_object_versions và xử lý ngoại lệ nếu có.
Bước 6: Kết quả của hàm trên là một dictionary chứa tất cả các phiên bản của đối tượng trong bucket đó.
Bước 7: Trả về danh sách tất cả các phiên bản của đối tượng.
Mã ví dụ
Sử dụng mã sau để lấy danh sách tất cả phiên bản đối tượng từ AWS S3:
import boto3
from botocore.exceptions import ClientError
def list_all_objects_version(bucket_name, prefix_name):
session = boto3.session.Session()
s3_client = session.client('s3')
try:
result = s3_client.list_object_versions(Bucket=bucket_name, Prefix=prefix_name)
except ClientError as e:
raise Exception("Lỗi client boto3 trong list_all_objects_version: " + e.__str__())
except Exception as e:
raise Exception("Lỗi không mong muốn trong list_all_objects_version: " + e.__str__())
return result
print(list_all_objects_version("Bucket_1", "testfolder"))
Kết quả
{'ResponseMetadata': {'RequestId': 'H4VAGM3YP6', 'HostId': ***********, 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': ***************, 'x-amz-request-id': 'H4VAGM3YP6', 'date': 'Sat, 03 Apr 2021 08:04:08 GMT', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'IsTruncated': False, 'KeyMarker': '', 'VersionIdMarker': '', 'Versions': [{'ETag': '"705e2e674b04ca71"', 'Size': 1773, 'StorageClass': 'STANDARD', 'Key': 'testfolder/test.zip', 'VersionId': 'null', 'IsLatest': True, 'LastModified': datetime.datetime(2020, 12, 18, 14, 13, 18, tzinfo=tzutc()), 'Owner': {'DisplayName': 'AWS.Development', 'ID': '928*******************************'}}], 'Name': 'Bucket_1', 'Prefix': 'testfolder', 'MaxKeys': 1000, 'EncodingType': 'url'}