Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Boto3 का उपयोग करके AWS Glue में मौजूद S3 बकेट के ऑब्जेक्ट वर्जन्स के माध्यम से पेजिनेट करना


समस्या कथन: आपके खाते में बनाए गए AWS Glue Data Catalog से S3 बकेट के ऑब्जेक्ट वर्जन्स के माध्यम से पेजिनेट करने के लिए पायथन में boto3 लाइब्रेरी का उपयोग करें।

समस्या हल करने का दृष्टिकोण/एल्गोरिदम

  • चरण 1: boto3 और botocore एक्सेप्शन आयात करें ताकि एक्सेप्शन संभाले जा सकें।

  • चरण 2: max_items, page_size और starting_token इस फ़ंक्शन के लिए वैकल्पिक पैरामीटर हैं, जबकि bucket_name आवश्यक पैरामीटर है।

    • max_items वापस लौटने वाले कुल रिकॉर्ड की संख्या दर्शाता है। यदि उपलब्ध रिकॉर्ड की संख्या > max_items तो पेजिनेशन फिर से शुरू करने के लिए रिस्पांस में NextToken प्रदान किया जाएगा।

    • page_size प्रत्येक पृष्ठ का आकार दर्शाता है।

    • starting_token पेजिनेट करने में मदद करता है, और यह पिछले रिस्पांस से NextKeyMarker का उपयोग करता है।

  • चरण 3: boto3 लाइब्रेरी का उपयोग करके AWS सत्र बनाएं। सुनिश्चित करें कि डिफ़ॉल्ट प्रोफ़ाइल में region_name उल्लिखित है। यदि नहीं, तो सत्र बनाते समय स्पष्ट रूप से region_name पास करें।

  • चरण 4: S3 के लिए AWS क्लाइंट बनाएं।

  • चरण 5: list_object_versions का उपयोग करके S3 बकेट के ऑब्जेक्ट संस्करणों का विवरण रखने वाला एक paginator ऑब्जेक्ट बनाएं।

  • चरण 6: paginate फ़ंक्शन कॉल करें और max_items, page_size और starting_token को PaginationConfig पैरामीटर के रूप में पास करें, जबकि bucket_name को Bucket पैरामीटर के रूप में पास करें।

  • चरण 7: यह max_size और page_size के आधार पर रिकॉर्ड की संख्या लौटाता है।

  • चरण 8: पेजिनेट करते समय यदि कुछ गलत होता है तो सामान्य एक्सेप्शन को संभालें।

उदाहरण कोड

उपयोगकर्ता खाते में बनाए गए S3 बकेट के ऑब्जेक्ट वर्जन्स के माध्यम से पेजिनेट करने के लिए निम्न कोड का उपयोग करें:

import boto3
from botocore.exceptions import ClientError

def paginate_through_object_version_s3_bucket(bucket_name, max_items=None, page_size=None, starting_token=None):
    session = boto3.session.Session()
    s3_client = session.client('s3')
    try:
        paginator = s3_client.get_paginator('list_object_versions')
        response = paginator.paginate(Bucket=bucket_name, PaginationConfig={
            'MaxItems': max_items,
            'PageSize': page_size,
            'StartingToken': starting_token
        })
        return response
    except ClientError as e:
        raise Exception("boto3 client error in paginate_through_object_version_s3_bucket: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in paginate_through_object_version_s3_bucket: " + e.__str__())

# पहला रन
a = paginate_through_object_version_s3_bucket('s3-test-bucket', 2, 5)
print(*a)

# दूसरा रन (पेजिनेशन जारी रखने के लिए)
for items in a:
    next_token = items['NextKeyMarker']
    b = paginate_through_object_version_s3_bucket('s3-test-bucket', 2, 5, next_token)
    print(*b)

आउटपुट

# पहला रन
{'ResponseMetadata': {'RequestId': 'XEVY**************CD0', 'HostId': '**************', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': '*******************', 'x-amz-request-id': 'XEVYV***************', 'date': 'Sat, 03 Apr 2021 07:14:49 GMT', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'IsTruncated': True, 'KeyMarker': '', 'VersionIdMarker': '', 'NextKeyMarker': 'analytics-s3/template.json', 'NextVersionIdMarker': 'null', 'Versions': [{'ETag': '"e66659e02"', 'Size': 1554, 'StorageClass': 'STANDARD', 'Key': 'analytics-s3i/param.json', 'VersionId': 'null', 'IsLatest': True, 'LastModified': datetime.datetime(2020, 10, 29, 19, 50, 55, tzinfo=tzutc()), 'Owner': {'DisplayName': 'AWS.Development', 'ID': '928b5bd**************3d70'}}, {'ETag': '"22a4bf7**************9c1ed2612"', 'Size': 1756, 'StorageClass': 'STANDARD', 'Key': 'analytics-s3i/params.json', 'VersionId': 'null', 'IsLatest': True, 'LastModified': datetime.datetime(2021, 3, 10, 20, 10, 47, tzinfo=tzutc()), 'Owner': {'DisplayName': 'AWS.Development', 'ID': '928b5bde*****************2d4423d70'}}], 'Name': 's3-test-bucket', 'Prefix': '', 'MaxKeys': 5, 'EncodingType': 'url', 'DeleteMarkers': None, 'CommonPrefixes': None}

# दूसरा रन
{'ResponseMetadata': {'RequestId': '3V9*********703V', 'HostId': '****************', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': '************************', 'x-amz-request-id': '3V9****************V', 'date': 'Sat, 03 Apr 2021 07:18:56 GMT', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'IsTruncated': True, 'KeyMarker': 'analytics-s3i2/template.json', 'VersionIdMarker': '', 'NextKeyMarker': 'analytics-s3l/params.json', 'NextVersionIdMarker': 'null', 'Versions': [{'ETag': '"dbd336ff00cb5af3d"', 'Size': 1557, 'StorageClass': 'STANDARD', 'Key': 'analytics-s3i3/param.json', 'VersionId': 'null', 'IsLatest': True, 'LastModified': datetime.datetime(2020, 10, 28, 18, 16, 38, tzinfo=tzutc()), 'Owner': {'DisplayName': 'AWS.Development', 'ID': '*****************'}}, {'ETag': '"66b49598df6"', 'Size': 21334, 'StorageClass': 'STANDARD', 'Key': 'analytics-s3i3/template.json', 'VersionId': 'null', 'IsLatest': True, 'LastModified': datetime.datetime(2020, 10, 28, 18, 16, 38, tzinfo=tzutc()), 'Owner': {'DisplayName': 'AWS.Development', 'ID': '****************'}}], 'Name': 's3-test-bucket', 'Prefix': '', 'MaxKeys': 5, 'EncodingType': 'url', 'DeleteMarkers': None, 'CommonPrefixes': None}

मुख्य अवधारणाएं

  • Versions: ऑब्जेक्ट के सभी संस्करण (प्रत्येक PUT एक नया संस्करण बनाता है यदि वर्जनिंग सक्षम है)

  • DeleteMarkers: हटाए गए ऑब्जेक्ट्स के मार्कर (हटाना भी एक संस्करण बनाता है)

  • IsLatest: क्या यह नवीनतम संस्करण है

  • VersionId: संस्करण पहचानकर्ता ('null' का अर्थ है वर्जनिंग सक्षम होने से पहले अपलोड किया गया)

  • KeyMarker/VersionIdMarker: पेजिनेशन मार्कर

आवश्यक शर्तें

  • बकेट पर वर्जनिंग सक्षम होनी चाहिए

  • IAM अनुमति: s3:ListBucketVersions

उपयोग के मामले

  • ऑब्जेक्ट के पिछले संस्करणों को पुनर्स्थापित करना

  • संस्करण इतिहास का ऑडिट करना

  • पुराने संस्करणों को साफ करना (लागत अनुकूलन)

  • अनुपालन और शासन


  1. - Boto3 का उपयोग करके AWS Glue Security में मौजूद सभी सिक्योरिटी कॉन्फ़िगरेशन का विवरण कैसे प्राप्त करें?

    समस्या विवरण - Python में boto3 लाइब्रेरी का उपयोग करके AWS Glue Security में मौजूद सभी सिक्योरिटी कॉन्फ़िगरेशन का विवरण प्राप्त करें।उदाहरण - AWS Glue Security में मौजूद सभी सिक्योरिटी कॉन्फ़िगरेशन का विवरण प्राप्त करें।इस समस्या को हल करने का दृष्टिकोण/एल्गोरिदमचरण 1 - अपवादों को संभालने के लिए bo

  1. - Boto3 का उपयोग करके AWS Glue Security में निर्दिष्ट सिक्योरिटी कॉन्फ़िगरेशन का विवरण कैसे प्राप्त करें?

    समस्या विवरण - Python में boto3 लाइब्रेरी का उपयोग करके AWS Glue Security में मौजूद निर्दिष्ट सिक्योरिटी कॉन्फ़िगरेशन का विवरण प्राप्त करें।उदाहरण - AWS Glue Security में मौजूद निर्दिष्ट सिक्योरिटी कॉन्फ़िगरेशन (job-security-settings) का विवरण प्राप्त करें।इस समस्या को हल करने का दृष्टिकोण/एल्गोरिदम

  1. - Boto3 का उपयोग करके AWS Glue से Glue जॉब कैसे डिलीट करें?

    समस्या विवरण - Python में boto3 लाइब्रेरी का उपयोग करके अपने अकाउंट में बने Glue जॉब को डिलीट करें।उदाहरण - अपने अकाउंट में बने Glue जॉब transfer_from_s3 को डिलीट करें।इस समस्या को हल करने का दृष्टिकोण/एल्गोरिदमचरण 1 - अपवादों को संभालने के लिए boto3 और botocore एक्सेप्शन्स आयात करें।चरण 2 - पैरामीट