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

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

Khi người dùng muốn dùng chức năng wait để xác thực key trong bucket có tồn tại hay không trong code.

Đề bài − Sử dụng thư viện boto3 trong Python để kiểm tra key có tồn tại trong bucket, dùng waiters. Ví dụ: dùng waiters kiểm tra key test.zip 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_exists bằng get_waiter.

Bước 6 − Dùng đối tượng wait để xác thực key có tồn tại hay không trong bucket. Mặc định kiểm tra mỗi 5 giây cho đến trạng thái thành công. 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_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"))

Kết quả

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, 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/test1.zip, kết quả là ngoại lệ, vì object này không tồn tại.

Trong ngoại lệ, đọc được Max attempts exceeded.