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

Cách sử dụng chức năng Chờ để kiểm tra xem khóa trong nhóm S3 có tồn tại hay không bằng cách sử dụng Boto3 và AWS Client?

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á.