上市后,S3 Key不能立即显示

时间:2016-05-24 02:56:26

标签: python amazon-web-services amazon-s3 boto3

我使用Python和boto3来处理S3。

我列出了一个S3存储桶并按前缀过滤:

bucket = s3.Bucket(config.S3_BUCKET)
for s3_object in bucket.objects.filter(Prefix="0000-00-00/", Delimiter="/"):

这给了我一个可迭代的S3对象。

如果我打印物体,我看到:

  

s3.ObjectSummary(bucket_name =' validation',key = u' 0000-00-00 / 1463665359.Vfc01I205aeM627249')

当我去取身体时,我得到一个例外:

content = s3_object.get()["Body"].read()
  

botocore.exceptions.ClientError:发生错误(NoSuchKey)时   调用GetObject操作:指定的键不存在。

所以boto刚给了我钥匙,但后来它说它不存在?

所有密钥都不会发生这种情况。一些。如果我在AWS控制台中搜索无效密钥,则无法找到它。

1 个答案:

答案 0 :(得分:3)

可以安全地假设您使用的是'标准'端点。所有这些主要适用于它,而不是区域端点。 S3是原子和eventually consistentThe documentation gives several examples,包括:

  

进程将新对象写入Amazon S3,立即列出其存储桶中的密钥。在完全传播更改之前,对象可能不会出现在列表中

偶尔会出现many hours的延迟,我的轶事同意this statement,超过99%的数据都会在2秒内出现。

您可以启用写后读写一致性,其中包含"修复"这样,将您的终结点从s3.amazonaws.com更改为s3-external-1.amazonaws.com

s3client = boto3.client('s3', endpoint_url='s3-external-1.amazonaws.com')