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

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


はじめに

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:

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)