2017-11-08 58 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

正しいコード:

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

あなたは、現在のディレクトリにS3のファイルをダウンロードしたい場合は、あなただけのオープンファイルにファイル名を渡す必要があります()メソッドと、NOTキー全体はです。あなたのケースでは、bin_files/scaler.pklファイル名として渡しています。

は、あなたのケースでは、Pythonのコードは、現在の作業ディレクトリに bin_filesディレクトリ(のbotoスクリプトがを実行なっている ディレクトリ)を探して、bin_filesディレクトリ内scaler.pklを書くしようとします。ディレクトリが存在しないため、[Errno 2] No such file or directoryというエラーがスローされます。

あなたはファイル名PATHを追加する場合は、あなたがは、適切なディレクトリのパーミッションに存在する全体PATHを確保すべきです。

+0

OSError:[Errno 30]読み取り専用ファイルシステム: 'scaler.pkl'私が使用しているラムダ関数にはフルアクセス権があります。私はS3でやっているべきことがありますか? – cgclip

+0

ラムダを使用しているので、パスに '/ tmp'を追加できます。私はそれが許可を持っているべきだと思う。 **コード**: 'open( '/ tmp/scaler.pkl'、 'wb')をデータとして使用: –

+0

あなたが提案した調整を行いました:' open( "/ tmp/scaler.pkl"、 'wb ')データとして: s3.Bucket( "mybucket).download_file(" bin_files/scaler.pkl "、data)'これでエラーメッセージが表示されます: "ファイル名は文字列でなければなりません" – cgclip

関連する問題