2017-10-03 11 views
0

.zipアップロードされた.zipのPythonスクリプトファイル(常に"Unable to import module '...': No module named ..."を生成しています)(私のラムダハンドラが私のPythonファイル名と一致していることを確認しました)を実行中に問題が発生しました。ファイルが圧縮される方法がこの場合非常に厳しいことを発見しました。AWS Lambda zip fileコマンド

間違ったコマンドのコマンド例以下の提供ソリューション:

$ ls 
    lambda_sample 
$ zip -r lambda_sample lambda_sample 

正しいコマンド:

$ cd lambda_sample 
$ zip -r ../lambda_sample . 

そして実際、2番目のコマンドは、私のために働きました。

だから私はなぜ最初のコマンドが動作しないのだろうか?また、私はmacOSを使用していて、右クリックするとCompress [folder_name]のファイルは[folder_name].zipというファイルをLambdaで読むことができず、最初に述べたのと同じエラーが出ます。誰でも洞察力を提供できますか?

答えて

3

AWS Lambdaは、Zipファイルのベース/ルートにハンドラがあり、表示されるzipコマンドが異なるファイルレイアウトを生成することを想定しています。

私は自分のシステムからいくつかの例を使ってデモンストレーションします。

これはあなたの最初のコマンドの例である:今

package/lambda.py 
package/process/ 
package/process/__init__.py 
# and so on 

、2番目の例:I unzip package.zip、結果解凍したファイルのフォルダ構造は次のようになります場合は

> ls 
package 
> zip -r package package 
adding: package/ (stored 0%) 
adding: package/lambda.py (deflated 38%) 
adding: package/process/ (stored 0%) 
adding: package/process/__init__.py (stored 0%) 
adding: package/process/aws.py (deflated 56%) 
# ... etc. 

コマンド、ここで私はcd package最初:

> zip -r ../package . 
adding: lambda.py (deflated 38%) 
adding: process/ (stored 0%) 
# ... etc. 

だから、その結果、解凍したファイルであれば、私unzip package.zipは次のようになります。

lambda.py 
process/ 
process/__init__.py 
# etc. 

だから後者の場合には、あなたはZIPを展開した後、親ディレクトリを持っていない、とAWSラムダが正常に動作します。