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

วิธีใช้ Waiter Functionality ตรวจสอบว่า Key ไม่อยู่ใน S3 Bucket ด้วย Boto3


ข้อกำหนดปัญหา

ใช้ไลบรารี Boto3 ใน Python เพื่อตรวจสอบว่า Key ไม่อยู่ใน Bucket โดยใช้ Waiter Functionality เช่น ใช้ Waiter ตรวจสอบว่า Key test1.zip ไม่อยู่ใน Bucket_1

ขั้นตอนการแก้ปัญหา

  1. ขั้นตอนที่ 1 – นำเข้า boto3 และ botocore.exceptions เพื่อจัดการข้อยกเว้น
  2. ขั้นตอนที่ 2 – bucket_name และ key เป็นพารามิเตอร์ 2 ตัวในฟังก์ชัน
  3. ขั้นตอนที่ 3 – สร้าง AWS Session ด้วย Boto3
  4. ขั้นตอนที่ 4 – สร้าง AWS Client สำหรับ S3
  5. ขั้นตอนที่ 5 – สร้าง Wait Object สำหรับ object_not_exists โดยใช้ get_waiter
  6. ขั้นตอนที่ 6 – ใช้ Wait Object ตรวจสอบว่า Key ไม่อยู่ใน Bucket ที่กำหนด โดย Default จะตรวจสอบทุก 5 วินาทีจนถึงสถานะสำเร็จ Error จะถูกคืนหลังจาก 20 ครั้งที่ล้มเหลว อย่างไรก็ตาม ผู้ใช้สามารถกำหนด Polling Time และ Max Attempts เองได้
  7. ขั้นตอนที่ 7 – คืนค่า None
  8. ขั้นตอนที่ 8 – จัดการข้อยกเว้นทั่วไปหากเกิดข้อผิดพลาดขณะตรวจสอบ Bucket

ตัวอย่างโค้ด

ใช้โค้ดต่อไปนี้เพื่อใช้ Waiter ตรวจสอบว่า Key มีอยู่ใน Bucket หรือไม่:

import boto3
from botocore.exceptions import ClientError

def use_waiters_check_object_not_exists(bucket_name, key_name):
    session = boto3.session.Session()
    s3_client = session.client('s3')
    try:
        waiter = s3_client.get_waiter('object_not_exists')
        waiter.wait(Bucket=bucket_name, Key=key_name,
                    WaiterConfig={'Delay': 2, 'MaxAttempts': 5})
        print('Object does not exist: ' + bucket_name + '/' + key_name)
    except ClientError as e:
        raise Exception("boto3 client error in use_waiters_check_object_not_exists: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in use_waiters_check_object_not_exists: " + e.__str__())

print(use_waiters_check_object_not_exists("Bucket_1", "testfolder/test1.zip"))
print(use_waiters_check_object_not_exists("Bucket_1", "testfolder/test.zip"))

ผลลัพธ์

Object does not exist: Bucket_1/testfolder/test1.zip
None
botocore.exceptions.WaiterError: Waiter ObjectNotExists failed: Max attempts exceeded
"Unexpected error in use_waiters_check_object_not_exists: " + e.__str__())
Exception: Unexpected error in use_waiters_check_object_not_exists: Waiter ObjectNotExists failed: Max attempts exceed

สำหรับ Bucket_1/testfolder/test1.zip ผลลัพธ์คือ Print Statement และ None เนื่องจาก Response ไม่คืนค่าอะไร จึงพิมพ์ None

สำหรับ Bucket_1/testfolder/test.zip ผลลัพธ์คือ Exception เนื่องจาก Object นี้มีอยู่

ใน Exception สามารถอ่านได้ว่า Max attempts exceeded