Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách dùng Wait functionality kiểm tra key không tồn tại trong S3 bucket bằng Boto3

Đề 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.