1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonのboto3を使って、S3のフォルダオブジェクトが取れなくて困った

Last updated at Posted at 2019-01-17

はじめに

amazon S3における「フォルダ」という幻想をぶち壊し、その実体を明らかにする
https://dev.classmethod.jp/cloud/aws/amazon-s3-folders/

こちらに載っていた情報で下記の2つのケース以外にもあったので補足いたします

  1. 管理コンソールから、既存の空フォルダの中にファイルを配置する(ケース1)
  2. aws-cliを使って、存在しないフォルダに直接ファイルを配置する(ケース2)

結論

管理画面でフォルダごとアップロードができ、フォルダの中のファイルの有無で変わる

詳細

ケース1の追加

「管理コンソールから、空のフォルダをフォルダごとアップロードする」
例) 空のcase1testフォルダを管理画面からアップロードする

この場合は、オブジェクトとしてフォルダを取得できます

ケース2の追加

「管理コンソールから、ファイルの入ったフォルダをフォルダごとアップロードする」
例) test.pngの入ったcase2testフォルダを管理画面からcase2testフォルダごとアップロードする

この場合は、オブジェクトとしてフォルダを取得できません

ソース

import json
import boto3

def lambda_handler(event, context):

    S3Bucket    = 'myBucket'
    S3KeyPrefix = 'test/'
    s3 = boto3.resource('s3')
    bucket = s3.Bucket(S3Bucket)
    Obj = bucket.meta.client.list_objects_v2(Bucket=bucket.name, Prefix=S3KeyPrefix)
    print(Obj)
    
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

実行結果

{'ResponseMetadata': 
    略
  'Contents': [
               {'Key': 'test/', 'LastModified': datetime.datetime(2019,1,17,9,48,42, tzinfo=tzlocal()), 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'Size': 0, 'StorageClass': 'STANDARD'},
               {'Key': 'test/case1test/', 'LastModified': datetime.datetime(2019,1,17,9,48,50, tzinfo=tzlocal()), 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'Size': 0, 'StorageClass': 'STANDARD'},
               {'Key': 'test/case2test/test.png', 'LastModified': datetime.datetime(2019,1,17,9,48,53, tzinfo=tzlocal()), 'ETag': '"0753ec70b92a549bb53484c0e83ba7c1"', 'Size': 5293, 'StorageClass': 'STANDARD'}
              ], 'Name': 'myBucket', 'Prefix': 'test/', 'MaxKeys': 1000, 'KeyCount': 3
}

「'Key': 'test/case1test/'」のオブジェクトは有ります
「'Key': 'test/case2test/'」のオブジェクトは無いです

おわりに

フォルダオブジェクトは無い前提で考えます:cry:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?