やりたいこと
関数と外部ライブラリをまとめてzipしてlambdaにアップロードしたい。
遭遇したエラー
zipにして上げるだけだが、この後エラーに弾き倒されたので戦い方を記録しておく。
Could not open file:/index.js
The file could not be found on the file system.
チェックしたこと
関数名
ハンドラの記述に合わせた関数名で作成する。
Pythonならlambda_function.py
Node.jsならindex.js
コンソール上で見れる。
zipの中身
単にzipコマンドを実行するとディレクトリ構造も含めて圧縮してしまうために、zipコマンドを実行する場所によってこのエラーが起こる。
解決策はそもそも末端まで降りてzipするか、-j
オプションでディレクトリ構造を無視するか.
ディレクトリ構造
user
└── Hoge
├── hoge.py
├── slackweb
└── slackweb-1.0.5-py3.6.egg-info
失敗
user$ zip -r Hoge.zip ./Hoge
成功
Hoge$ zip -r Hoge.zip .
成功
user$ zip -rj Hoge.zip ./Hoge
無関係と思われるもの
Permission
上記の問題を解決したところ、関数ファイルとzipフォルダは644、ライブラリは755の条件でアップしたケースで問題なく動作した。
逆に、全て777にしたzipをあげてもダメなことに変わりはなかった。
zipフォルダ名
lambdaに表示すらされないのでなんでもいいと思う。