S3에서 버킷 사양으로 파일 다운로드, 삭제하는 파이썬 클라이언트 앱

9169 단어 S3AWS

개요



특정 버킷에서 파일을 모두 검색하고 싶을 때 콘솔에서 귀찮았기 때문에,
버킷을 지정하여 파일을 일괄로 얻을 수 있는 툴을 만들어 보았습니다.
(아마 이미 있을 것 같지만・・・)
취득뿐만 아니라 삭제 처리도 붙여 보았습니다.
(이쪽을 사용해 무언가 일어나도 자기 책임으로 부탁합니다.)

사용 라이브러리


  • boto3을 사용하고 있습니다.
  • exe를 굳히기 위해 PyInstaller를 사용하고 있습니다.

  • 도구 설명



    소스 자체는 여기 으로 공개하고 있습니다.
    도구를 시작하면 다음과 같이 보입니다.


  • 여기는 tkinter를 사용하여 만들고 있습니다.
  • 버킷 이름은 속성으로 설정되어 있으므로 적절하게 설정할 수 있습니다.
  • 처리 내용은 파일 검색 또는 삭제를 선택할 수 있습니다.
  • 폴더 스펙은 파일을 검색할 때 어디에 저장할지를 선택합니다.
  • 속성 파일에 액세스 키와 보안 액세스 키를 설정하는 형식이지만, aws configure로 계정을 설정하면이 설정이 필요하지 않습니다.
  • 소스의 S3에 관한 부분은 다음과 같습니다.
  •         if aws_access_key_id =='':
                s3 = boto3.resource('s3')
                s3client=boto3.client('s3')
            else:
                s3 = boto3.resource('s3',
                                                    aws_access_key_id=aws_access_key_id,
                                                    aws_secret_access_key=aws_secret_access_key_id)
                s3client=boto3.client('s3', 
                                                    aws_access_key_id=aws_access_key_id,
                                                    aws_secret_access_key=aws_secret_access_key_id)
    
            bucketName=self.inputFileName.get()
            resultFolder=self.outputFolder.get()
            dataBaseDir=os.path.join(resultFolder,bucketName)
    
            executeType=EXECUTE_LIST.index(self.combo.get())
    
    
            s3bucket=s3.Bucket(bucketName)
            objs = s3bucket.meta.client.list_objects_v2(Bucket=s3bucket.name)
    
            for o in objs.get('Contents'):
                key = o.get('Key')
                s3Paths=os.path.splitext(key)
                if len(s3Paths[1]) !=0:
                    keys=key.split('/')
                    filename=keys[len(keys)-1]
                    if executeType==0:
                        outputDataDir=key.split(filename)[0]
                        outputDataDir=os.path.join(dataBaseDir,outputDataDir)
                        os.makedirs(outputDataDir,exist_ok=True)
                        outputDataFile=os.path.join(outputDataDir,filename)
                        s3bucket.download_file(key,outputDataFile)
                    else:
                        s3client.delete_object(Bucket=s3bucket.name, Key=key)
    
  • 툴로부터 입력된 버킷명, 처리 내용에 근거해 도의 처리를 이동할까를 판정하고 있습니다.
  • 대상 버킷 중
  • objs = s3bucket.meta.client.list_objects_v2(Bucket=s3bucket.name)
    

    의 부분으로 취득할 수 있으므로 나머지는 for문으로 처리를 하고 있습니다.
    인수에 Prefix를 추가하여 특정 폴더, 파일 만 지정할 수 있습니다.
  • 소스를 실행해도 확인할 수 있습니다만, 클라이언트 앱으로서 사용하는 경우는 이하의 커멘드로 exe를 작성합니다. 소스의 파일명을 pythonGui.py 로 했을 경우 다음과 같이 됩니다.
  • pyinstaller pythonGui.py --onefile

  • 좋은 웹페이지 즐겨찾기