Khi người dùng muốn sử dụng chức năng chờ để xác thực xem khóa trong nhóm có tồn tại hay không trong mã lập trình.
Tuyên bố sự cố - Sử dụng thư viện boto3 trong Python để kiểm tra xem khóa có tồn tại trong một thùng hay không, bằng cách sử dụng chức năng người phục vụ. Ví dụ:sử dụng bồi bàn để kiểm tra xem khóa test.zip có tồn tại trong Bucket_1 hay không.
Phương pháp tiếp cận / Thuật toán để giải quyết vấn đề này
Bước 1 - Nhập các ngoại lệ boto3 và botocore để xử lý các 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 thư viện boto3.
Bước 4 - Tạo ứng dụng AWS cho S3.
Bước 5 - Bây giờ tạo đối tượng chờ cho object_exists bằng hàm get_waiter
Bước 6 - Bây giờ, hãy sử dụng nút chờ đối tượng để xác thực xem khóa có tồn tại hay không trong một nhóm nhất định. Theo mặc định, nó sẽ kiểm tra sau mỗi 5 giây cho đến khi đạt được trạng thái thành công. Một lỗi được trả lại sau 20 lần kiểm tra không thành công. Tuy nhiên, người dùng có thể xác định thời gian bỏ phiếu và số lần thử tối đa.
Bước 7 - Nó trả về Không có.
Bước 8 - Xử lý ngoại lệ chung nếu có sự cố xảy ra trong khi kiểm tra nhóm.
Ví dụ
Sử dụng mã sau để sử dụng bồi bàn để kiểm tra xem khóa có tồn tại trong một thùng hay không -
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") )
Đầu ra
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
Đối với Bucket_1 / testfolder / test.zip, đầu ra là câu lệnh in và Không có. Vì phản hồi không trả lại bất kỳ điều gì nên nó sẽ in Không có gì.
Đối với Bucket_1 / testfolder / test1.zip, đầu ra là một ngoại lệ, vì đối tượng này không tồn tại.
Trong trường hợp ngoại lệ, có thể đọc rằng Số lần thử tối đa đã vượt quá.