কম্পিউটার

AWS Glue-এ উপস্থিত S3 বাকেটের অবজেক্ট সংস্করণের মাধ্যমে পেজিনেট করতে Boto3 কীভাবে ব্যবহার করবেন


সমস্যা বিবৃতি: boto3 ব্যবহার করুন আপনার অ্যাকাউন্টে তৈরি করা AWS Glue Data Catalog থেকে S3 বাকেটের অবজেক্ট সংস্করণের মাধ্যমে পৃষ্ঠায় পৃষ্ঠায় স্থানান্তর করতে পাইথনে লাইব্রেরি

এই সমস্যা সমাধানের জন্য অ্যাপ্রোচ/অ্যালগরিদম

  • ধাপ 1: boto3 আমদানি করুন৷ এবং বোটোকোর ব্যতিক্রমগুলি পরিচালনা করার জন্য ব্যতিক্রম৷

  • ধাপ 2: সর্বোচ্চ_আইটেম , পৃষ্ঠা_আকার এবং স্টার্টিং_টোকেন এই ফাংশনের জন্য ঐচ্ছিক প্যারামিটার, যখন bucket_name প্রয়োজনীয় প্যারামিটার।

    • সর্বোচ্চ_আইটেম ফেরত দেওয়ার জন্য মোট রেকর্ড সংখ্যা নির্দেশ করুন। যদি উপলব্ধ রেকর্ডের সংখ্যা> সর্বোচ্চ_আইটেম তারপর একটি NextToken পৃষ্ঠা সংখ্যা পুনঃসূচনা করার প্রতিক্রিয়াতে প্রদান করা হবে।

    • পৃষ্ঠা_আকার প্রতিটি পৃষ্ঠার আকার বোঝায়।

    • শুরু_টোকেন পেজিনেট করতে সাহায্য করে, এবং এটি পূর্ববর্তী প্রতিক্রিয়া থেকে NextKeyMarker ব্যবহার করে।

  • ধাপ 3: boto3 lib ব্যবহার করে একটি AWS সেশন তৈরি করুন . অঞ্চলের_নাম নিশ্চিত করুন ডিফল্ট প্রোফাইলে উল্লেখ করা আছে। যদি এটি উল্লেখ না থাকে, তাহলে স্পষ্টভাবে অঞ্চল_নাম পাস করুন সেশন তৈরি করার সময়।

  • পদক্ষেপ 4: S3 এর জন্য একটি AWS ক্লায়েন্ট তৈরি করুন।

  • ধাপ 5: একটি পেজিনেটর তৈরি করুন৷ অবজেক্ট যেটিতে list_object_versions ব্যবহার করে S3 বাকেটের অবজেক্ট সংস্করণের বিশদ বিবরণ রয়েছে .

  • ধাপ 5: পেজিনেটকে কল করুন ফাংশন এবং max_items পাস করুন , পৃষ্ঠা_আকার এবং স্টার্টিং_টোকেন প্যাজিনেশন কনফিগারেশন হিসেবে প্যারামিটার, যখন bucket_name বাকেট প্যারামিটার হিসাবে।

  • ধাপ 6: এটি max_size এর উপর ভিত্তি করে রেকর্ডের সংখ্যা প্রদান করে এবং পৃষ্ঠা_আকার .

  • পদক্ষেপ 7: পেজিন করার সময় কিছু ভুল হলে জেনেরিক ব্যতিক্রমটি পরিচালনা করুন।

উদাহরণ কোড

ব্যবহারকারীর অ্যাকাউন্টে তৈরি একটি S3 বাকেটের অবজেক্ট সংস্করণের মাধ্যমে পেজিনেট করতে নিম্নলিখিত কোডটি ব্যবহার করুন -

import boto3
from botocore.exceptions import ClientError

def paginate_through_object_version_s3_bucket(bucket_name, max_items=None:int,page_size=None:int, starting_token=None:string):
   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__())

#1st Run
a = paginate_through_object_version_s3_bucket('s3-test-bucket',2,5)
print(*a)
#2nd Run
for items in a:
next_token = (items['NextKeyMarker'])
b = paginate_through_object_version_s3_bucket('s3-test-bucket',2,5,next_token)
print(*b)

আউটপুট

#1st Run
{'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}

#2nd Run
{'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}

  1. AWS গ্লু ডেটা ক্যাটালগে একটি ক্রলার শুরু করতে Boto3 কীভাবে ব্যবহার করবেন

  2. AWS Glue Security-এ উপস্থিত সমস্ত নিরাপত্তা কনফিগারেশনের বিবরণ পেতে Boto3 কীভাবে ব্যবহার করবেন?

  3. AWS Glue Security-এ উপস্থিত একটি নির্দিষ্ট নিরাপত্তা কনফিগারেশনের বিশদ বিবরণ পেতে Boto3 কীভাবে ব্যবহার করবেন?

  4. AWS আঠালো থেকে একটি আঠালো কাজ মুছে ফেলার জন্য Boto3 কিভাবে ব্যবহার করবেন?