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

วิธีใช้ Wait Functionality ตรวจสอบว่า Key ใน S3 Bucket มีอยู่ด้วย Boto3 และ AWS Client


เมื่อผู้ใช้ต้องการใช้ Wait Functionality เพื่อตรวจสอบว่า Key ใน Bucket มีอยู่หรือไม่ในโค้ดโปรแกรม

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

ใช้ไลบรารี Boto3 ใน Python เพื่อตรวจสอบว่า Key มีอยู่ใน Bucket โดยใช้ Waiter Functionality เช่น ใช้ Waiter ตรวจสอบว่า Key test.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_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_exists(bucket_name, key_name):
    session = boto3.session.Session()
    s3_client = session.client('s3')
    try:
        waiter = s3_client.get_waiter('object_exists')
        waiter.wait(Bucket=bucket_name, Key=key_name,
                    WaiterConfig={'Delay': 2, 'MaxAttempts': 5})
        print('Object exists: ' + bucket_name + '/' + key_name)
    except ClientError as e:
        raise Exception("boto3 client error in use_waiters_check_object_exists: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in use_waiters_check_object_exists: " + e.__str__())

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

ผลลัพธ์

Object exists: Bucket_1/testfolder/test.zip
None
botocore.exceptions.WaiterError: Waiter ObjectExists failed: Max attempts exceeded
"Unexpected error in use_waiters_check_object_exists: " + e.__str__())
Exception: Unexpected error in use_waiters_check_object_exists: Waiter ObjectExists failed: Max attempts exceed

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

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

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