파이썬의 boto3을 사용하여 S3의 폴더 객체를 얻을 수 없어서 곤란했습니다.

소개



아마존 S3의 '폴더'라는 환상을 파괴하고 그 실체를 밝힌다.
htps : //에서 v.ぁsss d. jp / c ぉ d / 아 ws / 아마 존 - s3 - fu l에서 rs /

여기에 실려 있던 정보로 아래의 2개의 케이스 이외에도 있었으므로 보충하겠습니다
  • 관리 콘솔에서 기존 빈 폴더에 파일 배치 (케이스 1)
  • 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/'' 개체가 없습니다.

    결론



    폴더 개체는 없다고 가정합니다

    좋은 웹페이지 즐겨찾기