Python
 Computer >> コンピューター >  >> プログラミング >> Python

待機機能を使用して、Boto3とAWSクライアントを使用してS3バケットにキーが存在するかどうかを確認するにはどうすればよいですか?


ユーザーが待機機能を使用して、プログラミングコードにバケット内のキーが存在するかどうかを検証する場合。

問題の説明 − Pythonのboto3ライブラリを使用して、ウェイター機能を使用して、キーがバケットに存在するかどうかを確認します。たとえば、ウェイターを使用して、キーtest.zipがBucket_1に存在するかどうかを確認します。

この問題を解決するためのアプローチ/アルゴリズム

ステップ1 −例外を処理するためにboto3およびbotocore例外をインポートします。

ステップ2 −bucket_nameとkeyは関数内の2つのパラメーターです。

ステップ3 −boto3ライブラリを使用してAWSセッションを作成します。

ステップ4 −S3用のAWSクライアントを作成します。

ステップ5 −get_waiter関数を使用してobject_existsの待機オブジェクトを作成します

ステップ6 −ここで、待機を使用します 特定のバケットにキーが存在するかどうかを検証するオブジェクト。デフォルトでは、正常な状態に達するまで5秒ごとにチェックインします。 20回のチェックに失敗すると、エラーが返されます。ただし、ユーザーはポーリング時間と最大試行回数を定義できます。

ステップ7 −Noneを返します。

ステップ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の場合、出力はprintステートメントとNoneです。応答は何も返さないため、Noneと出力されます。

Bucket_1 / testfolder / test1.zipの場合、このオブジェクトは存在しないため、出力は例外です。

例外として、最大試行回数を超えたことが読み取れます。


  1. Pythonを使用してファイルが存在するかどうかを確認するにはどうすればよいですか?

    コンピューター内の特定のファイルの存在は、Pythonコードを使用する2つの方法で確認できます。 1つの方法は、os.pathモ​​ジュールのisfile()関数を使用することです。この関数は、指定されたパスにファイルが存在する場合はtrueを返し、存在しない場合はfalseを返します。 >>> import os >>> os.path.isfile(d:\\Package1\\package1\\fibo.py) True >>> os.path.isfile(d:/Package1/package1/fibo.py) True &g

  2. キーがPythonディクショナリに存在するかどうかを確認するにはどうすればよいですか?

    in演算子を使用して、Pythonディクショナリにキーが存在するかどうかを確認できます。 in演算子は、キーを辞書と照合し、キーの存在を確認します。 例 my_dict = {'name': 'TutorialsPoint', 'time': '15 years', 'location': 'India'} print('name' in my_dict) print('foo' in my_dict) 出力 これにより出力が得られます- True False