2017-11-08 5 views
0

현재 로컬로 생성했지만 현재 S3에 저장된 sklearn 파일을 활용해야하는 Amazon Web Services Lambda 함수에서 작업하고 있습니다. 나는 실제로이 작업을 수행하는 방법에 난처한 상황에 빠진 봤는데, 나는 boto3의 문서에서 몇 가지 방법을 시도했지만이 시간 초과 오류가 발생합니다AWS의 S3에 저장된 pickled 파일 사용 Lambda

import boto3 
import pickle 
s3 = boto3.client("s3", region_name="us-west-1") 
response = s3.get_object(Bucket="mybucket", Key="bin_files/scaler.pkl") 
loaded_file = pickle.load(response["Body"]) 

파일에 다른 한편으로 결과에서이 작업을하지하는 동안 발견 된 오류 :

with open(key, 'wb') as data: 
    s3.Bucket(event['bucket']).download_fileobj(key, data) 


"errorMessage": "[Errno 2] No such file or directory: 
'bin_files/scaler.pkl'" 

아무에게도이 작업을 수행하는 방법에 대한 의견이나 조언이 있습니까?

답변

1

올바른 코드 : 당신이 현재 디렉토리에 S3 파일을 다운로드하려면

with open('scaler.pkl', 'wb') as data: 
    s3.Bucket('bucket').download_fileobj(key, data) 

, 당신은 단지 open() 메서드 파일에 파일 이름을 통과 안됩니다 전체 키. 귀하의 경우에 bin_files/scaler.pkl으로 전달할 것입니다..

는 귀하의 경우에는, 파이썬 코드는 현재 작업 디렉토리에 bin_files 디렉터리 (BOTO 스크립트가를 실행지고 디렉토리)를 찾아와 bin_files 디렉토리 내에 scaler.pkl를 작성하려고합니다. 디렉토리가 존재하지 않으므로 [Errno 2] No such file or directory 오류가 발생합니다.

당신이 파일 이름PATH를 추가하는 경우, 당신은이 해당 디렉토리 권한으로 존재하는 전체 경로를 확인해야합니다.

+0

감사합니다. OSError : [Errno 30] 읽기 전용 파일 시스템 : 'scaler.pkl'사용하고있는 람다 함수에 모든 권한이 있습니다. S3에서해야 할 일이 있습니까? – cgclip

+0

람다를 사용하고 있으므로'/ tmp'를 경로에 추가 할 수 있습니다. 나는 그것이 허가를 받아야한다고 생각한다. ** code ** :'open ('/ tmp/scaler.pkl', 'wb')을 데이터로 사용 : –

+0

당신이 제안한 조정을했습니다 :'with open ("/ tmp/scaler.pkl", 'wb ') 데이터 : s3.Bucket ("mybucket) .download_file ("bin_files/scaler.pkl ", data)'이제 errorMessage가 발생합니다." "파일 이름은 문자열이어야합니다" – cgclip