Python 为什么AWS告诉我BucketalReady存在,而它不存在';T

Python 为什么AWS告诉我BucketalReady存在,而它不存在';T,python,amazon-web-services,amazon-s3,boto3,Python,Amazon Web Services,Amazon S3,Boto3,我正在使用AWS SDK for Python(boto3)自动设置一些AWS服务,并遇到了一个非常简单的问题,即创建一个S3 bucket 我仔细检查了以下内容: 在~/.aws/credentials中,我设置了访问密钥ID和秘密访问密钥 此访问密钥ID/机密访问密钥适用于作为附加了以下策略的组的一部分的帐户: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action

我正在使用AWS SDK for Python(boto3)自动设置一些AWS服务,并遇到了一个非常简单的问题,即创建一个S3 bucket

我仔细检查了以下内容:

  • ~/.aws/credentials
    中,我设置了访问密钥ID和秘密访问密钥
  • 此访问密钥ID/机密访问密钥适用于作为附加了以下策略的组的一部分的帐户:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "*",
          "Resource": "*"
        }
      ]
    }
    
  • 没有一个现有的bucket具有我试图创建bucket时使用的名称
然而,当我尝试运行这个非常简单的操作时,它失败了:

>>> import boto3
>>> client = boto3.client('s3')
>>> response = client.create_bucket('staging')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/yiqing/Repos/ansible-home/roles/osx/files/virtualenvs/obaku/lib/python2.7/site-packages/botocore/client.py", line 157, in _api_call
    "%s() only accepts keyword arguments." % py_operation_name)
TypeError: create_bucket() only accepts keyword arguments.
>>> response = client.create_bucket(Bucket='staging')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/yiqing/Repos/ansible-home/roles/osx/files/virtualenvs/obaku/lib/python2.7/site-packages/botocore/client.py", line 159, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/Users/yiqing/Repos/ansible-home/roles/osx/files/virtualenvs/obaku/lib/python2.7/site-packages/botocore/client.py", line 494, in _make_api_call
    raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: 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.
导入boto3 >>>client=boto3.client('s3') >>>response=client.create_bucket('staging')) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/Users/yiqing/Repos/ansible home/roles/osx/files/virtualenvs/obaku/lib/python2.7/site packages/botocore/client.py”,第157行,在api调用中 %s()只接受关键字参数。“%py\u操作\u名称) TypeError:create_bucket()只接受关键字参数。 >>>response=client.create_bucket(bucket='staging') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/Users/yiqing/Repos/ansible home/roles/osx/files/virtualenvs/obaku/lib/python2.7/site packages/botocore/client.py”,第159行,在api调用中 返回self.\u make\u api\u调用(操作名称,kwargs) 文件“/Users/yiqing/Repos/ansible home/roles/osx/files/virtualenvs/obaku/lib/python2.7/site packages/botocore/client.py”,第494行,在“make\u api\u call”中 raise ClientError(已解析的\u响应、操作\u名称) botocore.exceptions.ClientError:调用CreateBucket操作时发生错误(BucketAlreadyExists):请求的bucket名称不可用。bucket命名空间由系统的所有用户共享。请选择其他名称,然后重试。
我觉得我错过了一些非常愚蠢的事情,但我一辈子都想不出这可能是什么或者我做错了什么

bucket名称对于区域而言是全局的,而不是特定于您的帐户。
所以你需要选择一个根本不存在的名字。我建议使用前缀

哦,我把“系统所有用户共享”理解为我们帐户中的用户。谢谢,这是完全出乎意料的>>不是“全球到地区”。只是全球。bucket名称空间跨越所有S3区域。与此答案互补:始终创建命名约定以标识创建的单个AWS资源,例如
团队名称项目名称-name
。如果没有命名约定,当多个团队和项目共享同一个帐户时,这将是一个管理混乱。