S3 API在softlayer上创建存储桶错误

时间:2017-02-22 02:54:48

标签: amazon-s3 ibm-cloud-infrastructure bucket

我正在使用以下代码来检查存在的存储桶:

def check_bucket_existed(bucket_name, public_auth_endpoint):

    endpoint = 'https://' + public_auth_endpoint
    s3 = boto3.resource('s3', endpoint_url=endpoint)

    try:
        s3.meta.client.head_bucket(Bucket=bucket_name)
        exists = True
    except botocore.exceptions.ClientError as e:
        error_code = int(e.response['Error']['Code'])
        if error_code == 404:
            exists = False
        else:
            exists = True
    return exists

如果存储桶不存在,则开始使用以下代码创建存储桶:

def create_bucket(bucket_name, public_auth_endpoint):
    endpoint = 'https://' + public_auth_endpoint
    s3 = boto3.resource('s3', endpoint_url=endpoint)

    if check_bucket_existed(bucket_name, public_auth_endpoint):
        print("Bucket {} existed , skip bucket creation process".format(bucket_name))
        return True
    else:
        print("Bucket {} doesn't exist, start bucket creation process.".format(bucket_name))
        try:
            s3.create_bucket(Bucket=bucket_name)
            if check_bucket_existed(bucket_name, public_auth_endpoint):
                print("Bucket {} created successsfully.".format(bucket_name))
                return True
        except botocore.exceptions.ClientError as e:
            print("Error: Unable to create the bucket : %s" % e)
            return False

运行create_bucket代码时,我对以下日志感到困惑:

Bucket td.cos.s1 doesn't exist, start bucket creation process.
Error: Unable to create the bucket : An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.

在日志中,首先显示要使用的存储桶名称不存在,但是当开始使用此名称创建存储桶时,会提示错误信息,表明此存储桶名称无法使用。

我多次使用此存储桶名称,可以使用此存储桶名称。

我的代码出了什么问题?谢谢!

1 个答案:

答案 0 :(得分:0)

例外:

  

"请求的存储桶名称不可用。存储桶命名空间是   由系统的所有用户共享。请选择其他名称和   再试一次。"

存储桶是唯一的,因此它意味着另一个客户(可以来自其他帐户)已经创建了一个与您正在尝试的名称相同的存储桶。所以我建议创建一个名称不同的存储桶

<强>更新

你的脚本运行正常,我成功创建了bucket:td.cos.s1 (我已经删除了它,用于你的测试)。请你仔细检查一下吗?

这是我得到的结果:

False
Bucket td.cos.s1 doesn't exist, start bucket creation process.
Bucket td.cos.s1 created successsfully.
True