इस लेख में, हम देखेंगे कि AWS रिसोर्स में मौजूद S3 से ऑब्जेक्ट के सभी संस्करणों की सूची कैसे प्राप्त करें।
उदाहरण
S3 के Bucket_1/testfolder से test.zip के सभी संस्करणों को सूचीबद्ध करें।
समस्या कथन: S3 से ऑब्जेक्ट के सभी संस्करणों की सूची प्राप्त करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें।
समस्या हल करने का दृष्टिकोण/एल्गोरिदम
चरण 1: boto3 और botocore एक्सेप्शन आयात करें ताकि एक्सेप्शन संभाले जा सकें।
चरण 2: bucket_name आवश्यक पैरामीटर है।
चरण 3: boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं।
चरण 4: S3 के लिए AWS क्लाइंट बनाएं।
चरण 5: अब, list_object_versions फ़ंक्शन का उपयोग करके दिए गए बकेट के ऑब्जेक्ट के सभी संस्करणों को सूचीबद्ध करें और एक्सेप्शन को संभालें, यदि कोई हो।
चरण 6: उपरोक्त फ़ंक्शन का परिणाम एक डिक्शनरी है और दिए गए बकेट में ऑब्जेक्ट के सभी संस्करणों को समाहित करता है।
चरण 7: ऑब्जेक्ट के सभी संस्करणों की सूची लौटाएं।
उदाहरण कोड
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("boto3 client error in list_all_objects_version function: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in list_all_objects_version function of s3 helper: " + e.__str__())
return result
print(list_all_objects_version("Bucket_1", "testfolder"))
आउटपुट
{'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'}
महत्वपूर्ण नोट्स
Prefixपैरामीटर का उपयोग विशिष्ट "फोल्डर" या ऑब्जेक्ट तक परिणामों को फ़िल्टर करने के लिए किया जाता है।Versionsसूची में ऑब्जेक्ट के सभी संस्करण होते हैं।DeleteMarkers(यदि मौजूद) हटाने के ऑपरेशन को दर्शाते हैं।VersionId: 'null'का अर्थ है कि ऑब्जेक्ट वर्जनिंग सक्षम होने से पहले अपलोड किया गया था।IsLatest: Trueवर्तमान नवीनतम संस्करण को इंगित करता है।
विशिष्ट ऑब्जेक्ट के लिए फ़िल्टर करना
यदि आप किसी विशिष्ट ऑब्जेक्ट (जैसे test.zip) के केवल संस्करण चाहते हैं, तो परिणाम को फ़िल्टर करें:
def get_object_versions(bucket_name, object_key):
response = s3_client.list_object_versions(Bucket=bucket_name, Prefix=object_key)
versions = [v for v in response.get('Versions', []) if v['Key'] == object_key]
delete_markers = [dm for dm in response.get('DeleteMarkers', []) if dm['Key'] == object_key]
return versions, delete_markers
IAM अनुमति
s3:ListBucketVersions अनुमति आवश्यक है।