in src/smexperiments/_utils.py [0:0]
def get_or_create_default_bucket(boto_session, default_bucket_prefix="sagemaker"):
"""Creates a default bucket if not already exists. The bucket name is a combination of a prefix, the region, and
account.
Args:
boto_session (boto3.Session): boto session
default_bucket_prefix (str): prefix to the bucket name
Returns:
str: The default bucket name.
"""
account = boto_session.client("sts").get_caller_identity()["Account"]
region = boto_session.region_name
default_bucket = "{}-{}-{}".format(default_bucket_prefix, region, account)
s3 = boto_session.resource("s3")
try:
# 'us-east-1' cannot be specified because it is the default region:
if region == "us-east-1":
s3.create_bucket(Bucket=default_bucket)
else:
s3.create_bucket(Bucket=default_bucket, CreateBucketConfiguration={"LocationConstraint": region})
except botocore.exceptions.ClientError as e:
error_code = e.response["Error"]["Code"]
message = e.response["Error"]["Message"]
logging.debug("Create Bucket failed. error code: {}, message: {}".format(error_code, message))
if error_code == "BucketAlreadyOwnedByYou":
pass
elif error_code == "OperationAborted" and "conflicting conditional operation" in message:
# If this bucket is already being concurrently created, we don't need to create it again.
pass
elif error_code == "TooManyBuckets":
# Succeed if the default bucket exists
s3.meta.client.head_bucket(Bucket=default_bucket)
else:
raise
return default_bucket