如何使用Boto3和AWS客户端的Wait功能来检查S3存储桶中是否存在密钥?

如何使用Boto3和AWS客户端的Wait功能来检查S3存储桶中是否存在密钥?

当用户想要在编程代码中使用等待功能来验证密钥是否存在于存储桶中时。

问题陈述 - 在Python中使用boto3库检查密钥是否存在于存储桶中,并使用等待功能。例如,使用等待器检查Bucket_1中是否存在test.zip密钥。

更多Python相关文章,请阅读:Python 教程

解决此问题的方法/算法

第1步 - 导入boto3和botocore异常以处理异常。

第2步 - bucket_name和key是函数中的两个参数。

第3步 - 使用boto3库创建AWS会话。

第4步 - 为S3创建AWS客户端。

第5步 - 使用get_waiter函数创建object_exists的wait对象

第6步 - 使用wait对象验证给定存储桶中是否存在密钥。默认情况下,它每5秒检查一次,直到达到成功状态。如果20次检查失败,则返回错误。但是,用户可以定义轮询时间和最大尝试次数。

第7步 - 返回无。

第8步 - 如果在检查存储桶时出现问题,请处理通用异常。

例子

使用以下代码使用等待器检查存储桶中是否存在密钥-

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")
)

输出

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

对于Bucket_1/testfolder/test.zip,输出是打印语句和无。由于响应未返回任何内容,因此它打印了无。

对于Bucket_1/testfolder/test1.zip,输出是异常,因为此对象不存在。

在异常中,可以阅读Max尝试次数已超过。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程