Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để sử dụng chức năng Chờ để xác thực cho dù một khóa không tồn tại trong nhóm S3 trong Boto3?

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 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 test1.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_not_exists bằng hàm get_waiter

Bước 6 - Bây giờ, sử dụng đối tượng chờ để xác nhận xem khóa không tồn tại trong một nhóm nhất định hay không. 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 người phục vụ để kiểm tra xem khóa có tồn tại trong thùng 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_exists("Bucket_1","testfolder/test1.zip"))
print(use_waiters_check_object_exists("Bucket_1","testfolder/test.zip"))

Đầu ra

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, đầ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 / test.zip, đầu ra là một ngoại lệ vì đối tượng này 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á.