ในบทความนี้ เราจะดูวิธีใช้ Boto3 Library และ Waiter Functionality เพื่อตรวจสอบว่า S3 Bucket มีอยู่หรือไม่ เช่น ใช้ Waiter ตรวจสอบว่า Bucket_1 มีอยู่ใน S3
ขั้นตอนการแก้ปัญหา
- ขั้นตอนที่ 1 – นำเข้า
boto3และbotocore.exceptionsเพื่อจัดการข้อยกเว้น - ขั้นตอนที่ 2 – ใช้
bucket_nameเป็นพารามิเตอร์ในฟังก์ชัน - ขั้นตอนที่ 3 – สร้าง AWS Session ด้วย Boto3
- ขั้นตอนที่ 4 – สร้าง AWS Client สำหรับ S3
- ขั้นตอนที่ 5 – สร้าง Wait Object สำหรับ bucket_exists โดยใช้
get_waiter - ขั้นตอนที่ 6 – ใช้ Wait Object ตรวจสอบว่า Bucket มีอยู่หรือไม่ โดย Default จะตรวจสอบทุก 5 วินาทีจนถึงสถานะสำเร็จ Error จะถูกคืนหลังจาก 20 ครั้งที่ล้มเหลว อย่างไรก็ตาม ผู้ใช้สามารถกำหนด Polling Time และ Max Attempts เองได้
- ขั้นตอนที่ 7 – คืนค่า None
- ขั้นตอนที่ 8 – จัดการข้อยกเว้นทั่วไปหากเกิดข้อผิดพลาดขณะตรวจสอบ Bucket
ตัวอย่างโค้ด
ใช้โค้ดต่อไปนี้เพื่อใช้ Waiter ตรวจสอบว่า bucket_exists หรือไม่:
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 ผลลัพธ์คือ Print Statement และ None เนื่องจาก Response ไม่คืนค่าอะไร จึงพิมพ์ None
สำหรับ Bucket_2 ผลลัพธ์คือ Exception เนื่องจาก Bucket นี้ไม่มีอยู่
ใน Exception สามารถอ่านได้ว่า Max attempts exceeded