How to use Waitersto check whether an S3 bucket exists,using Boto3 and AWS Client?



In this article, we will see how to use Boto3 library and the Waiter functionality to validate whether an S3 bucket exists or not. For example, use waiters to check whether Bucket_1 exists in S3

Approach/Algorithm to solve this problem

Step 1 − Import boto3 and botocore exceptions to handle exceptions.

Step 2 − Use bucket_name as the parameter in the function.

Step 3 − Create an AWS session using boto3 library.

Step 4 − Create an AWS client for S3.

Step 5 − Now create the wait object for bucket_exists using get_waiter function.

Step 6 − Now, use the wait object to validate whether bucket exists or not. By default, it checks in every 5 seconds until a successful state is reached. An error is returned after 20 failed checks. However, user can define polling time and max attempts.

Step 7 − It returns None.

Step 8 − Handle the generic exception if something went wrong while checking the bucket.

Example

Use the following code to use waiter to check whether bucket_exists or not −

import boto3
from botocore.exceptions import ClientError

def use_waiters_check_bucket_exists(bucket_name):
   session = boto3.session.Session(profile_name='saml')
   s3_client = session.client('s3')
   try:
      waiter = s3_client.get_waiter('bucket_exists')
      waiter.wait(Bucket=bucket_name,
                  WaiterConfig={
                     'Delay': 2, 'MaxAttempts': 5})
      print('Bucket exists: ' + bucket_name)
   except ClientError as e:
      raise Exception( "boto3 client error in use_waiters_check_bucket_exists: " + e.__str__())
   except Exception as e:
      raise Exception( "Unexpected error in use_waiters_check_bucket_exists: " + e.__str__())

print(use_waiters_check_bucket_exists("Bucket_1"))
print(use_waiters_check_bucket_exists("Bucket_2"))

Output

Bucket exists: Bucket_1
None

botocore.exceptions.WaiterError: Waiter BucketExists failed: Max
attempts exceeded
"Unexpected error in use_waiters_check_bucket_exists: " + e.__str__())
Exception: Unexpected error in use_waiters_check_bucket_exists: Waiter
BucketExists failed: Max attempts exceed

For Bucket_1, the output is print statement and None. Since the response doesn’t return anything, it prints None.

For Bucket_2, the output is an exception, since this bucket doesn’t exist.

In exception, it can be read that Max attempts exceeded.


Advertisements