@@ -342,40 +342,58 @@ def default_bucket(self):
342342 ).get_caller_identity ()["Account" ]
343343 default_bucket = "sagemaker-{}-{}" .format (region , account )
344344
345- s3 = self .boto_session .resource ("s3" )
346- try :
347- # 'us-east-1' cannot be specified because it is the default region:
348- # https://github.com/boto/boto3/issues/125
349- if region == "us-east-1" :
350- s3 .create_bucket (Bucket = default_bucket )
351- else :
352- s3 .create_bucket (
353- Bucket = default_bucket , CreateBucketConfiguration = {"LocationConstraint" : region }
354- )
355-
356- LOGGER .info ("Created S3 bucket: %s" , default_bucket )
357- except ClientError as e :
358- error_code = e .response ["Error" ]["Code" ]
359- message = e .response ["Error" ]["Message" ]
360-
361- if error_code == "BucketAlreadyOwnedByYou" :
362- pass
363- elif (
364- error_code == "OperationAborted" and "conflicting conditional operation" in message
365- ):
366- # If this bucket is already being concurrently created, we don't need to create it
367- # again.
368- pass
369- elif error_code == "TooManyBuckets" :
370- # Succeed if the default bucket exists
371- s3 .meta .client .head_bucket (Bucket = default_bucket )
372- else :
373- raise
345+ self ._create_s3_bucket_if_it_does_not_exist (bucket_name = default_bucket , region = region )
374346
375347 self ._default_bucket = default_bucket
376348
377349 return self ._default_bucket
378350
351+ def _create_s3_bucket_if_it_does_not_exist (self , bucket_name , region ):
352+ """Creates an S3 Bucket if it does not exist.
353+ Also swallows a few common exceptions that indicate that the bucket already exists or
354+ that it is being created.
355+
356+ Args:
357+ bucket_name (str): Name of the S3 bucket to be created.
358+ region (str): The region in which to create the bucket.
359+
360+ Raises:
361+ botocore.exceptions.ClientError: If S3 throws an unexpected exception during bucket
362+ creation.
363+ If the exception is due to the bucket already existing or
364+ already being created, no exception is raised.
365+
366+ """
367+ bucket = self .boto_session .resource ("s3" , region_name = region ).Bucket (name = bucket_name )
368+ if bucket .creation_date is None :
369+ try :
370+ s3 = self .boto_session .resource ("s3" , region_name = region )
371+ if region == "us-east-1" :
372+ # 'us-east-1' cannot be specified because it is the default region:
373+ # https://github.com/boto/boto3/issues/125
374+ s3 .create_bucket (Bucket = bucket_name )
375+ else :
376+ s3 .create_bucket (
377+ Bucket = bucket_name , CreateBucketConfiguration = {"LocationConstraint" : region }
378+ )
379+
380+ LOGGER .info ("Created S3 bucket: %s" , bucket_name )
381+ except ClientError as e :
382+ error_code = e .response ["Error" ]["Code" ]
383+ message = e .response ["Error" ]["Message" ]
384+
385+ if error_code == "BucketAlreadyOwnedByYou" :
386+ pass
387+ elif (
388+ error_code == "OperationAborted"
389+ and "conflicting conditional operation" in message
390+ ):
391+ # If this bucket is already being concurrently created, we don't need to create
392+ # it again.
393+ pass
394+ else :
395+ raise
396+
379397 def train ( # noqa: C901
380398 self ,
381399 input_mode ,
0 commit comments