এই আর্টিকেলে, আমরা দেখব কিভাবে Boto3 লাইব্রেরি এবং Waiter ফাংশনালিটি ব্যবহার করে একটি S3 বাকেট আছে কিনা যাচাই করা যায়। উদাহরণস্বরূপ, ওয়েটার ব্যবহার করে চেক করা যে Bucket_1 S3-এ আছে।
সমাধানের পদ্ধতি/অ্যালগরিদম
ধাপ ১ − boto3 এবং botocore এক্সসেপশন ইম্পোর্ট করে এক্সসেপশন হ্যান্ডল করা।
ধাপ ২ − ফাংশনে bucket_name প্যারামিটার ব্যবহার করা।
ধাপ ৩ − boto3 লাইব্রেরি ব্যবহার করে AWS সেশন তৈরি করা।
ধাপ ৪ − S3-এর জন্য AWS ক্লায়েন্ট তৈরি করা।
ধাপ ৫ − এখন get_waiter ফাংশন ব্যবহার করে bucket_exists-এর জন্য ওয়েট অবজেক্ট তৈরি করা।
ধাপ ৬ − এখন, wait অবজেক্ট ব্যবহার করে যাচাই করা যে বাকেটটি আছে কিনা। ডিফল্টভাবে, এটি প্রতি ৫ সেকেন্ড পরপর চেক করে যতক্ষণ না সফল স্টেট পাওয়া যায়। ২০ বার ব্যর্থ হলে এরর রিটার্ন করা হয়। যাইহোক, ইউজার পোলিং টাইম এবং ম্যাক্স অটেম্প্টস সংজ্ঞায়িত করতে পারে।
ধাপ ৭ − এটি None রিটার্ন করে।
ধাপ ৮ − বাকেট চেক করার সময় যদি কিছু ভুল হয় তবে জেনেরিক এক্সসেপশন হ্যান্ডল করা।
উদাহরণ
বাকেট আছে কিনা চেক করতে ওয়েটার ব্যবহার করার জন্য নিচের কোড ব্যবহার করুন −
import boto3 from botocore.exceptions import ClientError def use_waiters_check_bucket_exists(bucket_name): session = boto3.session.Session(profile_name='saml') s3_client = session.client('s3') try: waiter = s3_client.get_waiter('bucket_exists') waiter.wait(Bucket=bucket_name, WaiterConfig={ 'Delay': 2, 'MaxAttempts': 5}) print('Bucket exists: ' + bucket_name) except ClientError as e: raise Exception("boto3 client error in use_waiters_check_bucket_exists: " + e.__str__()) except Exception as e: raise Exception("Unexpected error in use_waiters_check_bucket_exists: " + e.__str__()) print(use_waiters_check_bucket_exists("Bucket_1")) print(use_waiters_check_bucket_exists("Bucket_2"))আউটপুট
Bucket exists: Bucket_1 None botocore.exceptions.WaiterError: Waiter BucketExists failed: Max attempts exceeded "Unexpected error in use_waiters_check_bucket_exists: " + e.__str__()) Exception: Unexpected error in use_waiters_check_bucket_exists: Waiter BucketExists failed: Max attempts exceed
Bucket_1-এর জন্য, আউটপুট হলো প্রিন্ট স্টেটমেন্ট এবং None। যেহেতু রেসপন্স কিছু রিটার্ন করে না, তাই None প্রিন্ট হয়।
Bucket_2-এর জন্য, আউটপুট হলো এক্সসেপশন, কারণ এই বাকেটটি অস্তিত্ব নেই।
এক্সসেপশনে পড়া যায় যে Max attempts exceeded।