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

จะใช้ฟังก์ชัน Wait เพื่อตรวจสอบว่ามีคีย์ในบัคเก็ต S3 หรือไม่ โดยใช้ Boto3 และ AWS Client


เมื่อผู้ใช้ต้องการใช้ฟังก์ชัน wait เพื่อตรวจสอบว่ามีคีย์ในบัคเก็ตอยู่หรือไม่ในโค้ดโปรแกรม

คำชี้แจงปัญหา − ใช้ไลบรารี boto3 ใน Python เพื่อตรวจสอบว่ามีคีย์อยู่ในบัคเก็ตหรือไม่ โดยใช้ฟังก์ชันบริกร ตัวอย่างเช่น ใช้บริกรเพื่อตรวจสอบว่ามีคีย์ test.zip อยู่ใน Bucket_1 หรือไม่

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

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

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

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

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

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

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

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

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

ตัวอย่าง

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

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 ผลลัพธ์คือคำสั่งพิมพ์และไม่มี เนื่องจากไม่มีการตอบกลับใดๆ จึงพิมพ์ว่าไม่มี

สำหรับ Bucket_1/testfolder/test1.zip ผลลัพธ์จะเป็นข้อยกเว้น เนื่องจากไม่มีวัตถุนี้

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