2016-05-24 8 views
2

私はPythonとboto3を使ってS3を操作しています。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')

私は例外を取得のに、私は体を得るために行く:

botocore.exceptions.ClientError: An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.

content = s3_object.get()["Body"].read() 
だからのbotoがちょうど私のキーを与えました、それが存在しないと言いますか?

これはすべてのキーで発生するわけではありません。ちょうどいくつか。 AWSコンソールで無効なキーを検索すると、そのキーが見つかりません。

答えて

2

「標準」エンドポイントを使用していると想定するのは安全です。これは主にそれに適用され、地域のエンドポイントには適用されません。 S3はアトミックで、eventually consistentです。この含めThe documentation gives several examples、:時々

A process writes a new object to Amazon S3 and immediately lists keys within its bucket. Until the change is fully propagated, the object might not appear in the list.

manyhoursの遅延が見られている、と私anecdataは、データの優に99%が2秒以内に存在するthis statementと一致します。あなたが読んで、書き込み後s3-external-1.amazonaws.coms3.amazonaws.comからエンドポイントを変更することにより、一貫性、「修正」これを、有効にすることができ

:書き込み後読み取り一貫性の先端のための

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

おかげで、正確に解くこと私の問題。 – Kong

+2

Cool。それは難解です。 – tedder42

+0

最近のバージョンのboto3/botocoreも地域名として 's3-external-1'をサポートしているので、' boto3.client( 's3'、region_name = 's3-external-1') ' 、または通常の 'AWS_DEFAULT_REGION'、設定ファイルの領域など – jamesls

関連する問題