Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีใช้ Waiters เพื่อตรวจสอบว่ามีที่ฝากข้อมูล S3 อยู่หรือไม่โดยใช้ Boto3 และ AWS Client


ในบทความนี้ เราจะมาดูวิธีการใช้ไลบรารี Boto3 และฟังก์ชันของ Waiter เพื่อตรวจสอบว่ามีบัคเก็ต S3 อยู่หรือไม่ ตัวอย่างเช่น ใช้บริกรเพื่อตรวจสอบว่า Bucket_1 มีอยู่ใน S3 หรือไม่

แนวทาง/อัลกอริทึมในการแก้ปัญหานี้

ขั้นตอนที่ 1 - นำเข้าข้อยกเว้น boto3 และ botocore เพื่อจัดการกับข้อยกเว้น

ขั้นตอนที่ 2 − ใช้ bucket_name เป็นพารามิเตอร์ในฟังก์ชัน

ขั้นตอนที่ 3 − สร้างเซสชัน AWS โดยใช้ไลบรารี boto3

ขั้นตอนที่ 4 − สร้างไคลเอนต์ AWS สำหรับ S3

ขั้นตอนที่ 5 − ตอนนี้สร้างวัตถุรอสำหรับ bucket_exists โดยใช้ get_waiter ฟังก์ชัน

ขั้นตอนที่ 6 − ตอนนี้ ใช้อ็อบเจกต์ wait เพื่อตรวจสอบว่ามีที่ฝากข้อมูลหรือไม่ โดยค่าเริ่มต้น ระบบจะตรวจสอบทุกๆ 5 วินาทีจนกว่าจะถึงสถานะสำเร็จ ข้อผิดพลาดถูกส่งกลับหลังจาก 20 ตรวจสอบล้มเหลว อย่างไรก็ตาม ผู้ใช้สามารถกำหนดเวลาการสำรวจและความพยายามสูงสุดได้

ขั้นตอนที่ 7 − ส่งคืน None

ขั้นตอนที่ 8 − จัดการข้อยกเว้นทั่วไปหากมีข้อผิดพลาดขณะตรวจสอบที่ฝากข้อมูล

ตัวอย่าง

ใช้รหัสต่อไปนี้เพื่อใช้บริกรเพื่อตรวจสอบว่า bucket_exists หรือไม่ -

นำเข้า boto3 จาก botocore.exceptions นำเข้า ClientErrordef use_waiters_check_bucket_exists(bucket_name):session =boto3.session.Session(profile_name='saml') s3_client =session.client('s3') ลอง:waiter =s3_client.get_waiter('bucket ) waiter.wait(Bucket=bucket_name, WaiterConfig={ 'Delay':2, 'MaxAttempts':5}) print('มีที่เก็บข้อมูล:' + bucket_name) ยกเว้น ClientError เป็น e:ยกข้อยกเว้น ( "ข้อผิดพลาดของไคลเอ็นต์ boto3 ในการใช้งาน use_waiters_check_bucket_exists:" + e.__str__()) ยกเว้นข้อยกเว้น e:ยกข้อยกเว้น ( "ข้อผิดพลาดที่ไม่คาดคิดใน use_waiters_check_bucket_exists:" + e.__str__())print(use_waiters_check_bucket_exists("Bucket_1"))print(use_waiters_check_bucket_exists() 

ผลลัพธ์

มีที่เก็บข้อมูล:Bucket_1Nonebotocore.exceptions.WaiterError:Waiter BucketExists ล้มเหลว:Maxattempts เกิน "ข้อผิดพลาดที่ไม่คาดคิดใน use_waiters_check_bucket_exists:" + e.__str__()) ข้อยกเว้น:ข้อผิดพลาดที่ไม่คาดคิดในการใช้งาน 

สำหรับ Bucket_1 ผลลัพธ์คือคำสั่งพิมพ์และไม่มี เนื่องจากไม่มีการตอบกลับใดๆ จึงพิมพ์ว่าไม่มี

สำหรับ Bucket_2 เอาต์พุตจะเป็นข้อยกเว้น เนื่องจากไม่มีที่เก็บข้อมูลนี้

ยกเว้น สามารถอ่านได้ว่าความพยายามสูงสุดเกิน