【问题标题】:S3 API create bucket error on softlayerS3 API在softlayer上创建存储桶错误
【发布时间】:2017-02-22 02:54:47
【问题描述】:

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

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

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

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.

在日志中,首先显示要使用的bucket name 不存在,但是当开始使用该名称创建bucket 时,提示ERROR info 表明该bucket name 不能使用。

我多次使用这个bucket名字,这个bucket名字可以用。

我的代码有什么问题?谢谢!

【问题讨论】:

  • 这个bucket名字以前用过。但在运行此 create_bucket 代码之前已将其删除。

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


【解决方案1】:

例外:

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

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


更新

您的脚本运行良好,我已成功创建存储桶:td.cos.s1(我已将其删除,供您测试)。请你再核对一下好吗?

这是我得到的结果:

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

【讨论】:

  • 但是使用 check_bucket_existed 方法显示该名称的存储桶不存在。这要怎么解释?
  • 抱歉,我已经验证了您的脚本,请查看我回答中的更新部分
  • 在循环运行以下代码10次时出现此问题:1。创建云对象存储。 2.创建桶。 3.删除桶。 4.删除云对象存储。然后这个问题会发生好几次。
  • 做一些测试(使用循环创建和删除存储桶)我验证有时它会失败,我相信创建需要一些时间,以便存储桶准备好被删除或反之反之亦然。如果您想深入了解此问题,我建议您提交工单,如果您附上您尝试重现该问题的完整代码,这将非常有帮助
猜你喜欢
  • 1970-01-01
  • 2020-07-16
  • 2023-04-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2017-04-24
相关资源
最近更新 更多