Đề bài − Sử dụng thư viện boto3 trong Python để kiểm tra key không tồn tại trong bucket, sử dụng chức năng waiters. Ví dụ: dùng waiters kiểm tra key test1.zip không tồn tại trong Bucket_1.
Cách tiếp cận/Thuật toán giải quyết
Bước 1 − Nhập boto3 và botocore exceptions để xử lý ngoại lệ.
Bước 2 − bucket_name và key là hai tham số trong hàm.
Bước 3 − Tạo phiên AWS bằng boto3.
Bước 4 − Tạo client AWS cho S3.
Bước 5 − Tạo đối tượng wait cho object_not_exists bằng hàm get_waiter.
Bước 6 − Dùng đối tượng wait để xác thực key không tồn tại trong bucket. Mặc định kiểm tra mỗi 5 giây cho đến khi đạt trạng thái thành công. Trả về lỗi sau 20 lần thất bại. Người dùng có thể định nghĩa polling time và max attempts.
Bước 7 − Trả về None.
Bước 8 − Xử lý ngoại lệ chung nếu có lỗi khi kiểm tra bucket.
Ví dụ
Sử dụng code sau để dùng waiter kiểm tra key có tồn tại trong bucket hay không:
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"))
Kết quả
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
Đối với Bucket_1/testfolder/test1.zip, kết quả là câu print và None. Vì response không trả về gì, nên in None.
Đối với Bucket_1/testfolder/test.zip, kết quả là ngoại lệ vì object này tồn tại.
Trong ngoại lệ, đọc được Max attempts exceeded.