sls invoke で No module named '〜'


環境

すべて(3台とも) macOS 11.4(Big Sur) ※当時最新

経緯

ローカルでserverlessのテストをしたくて sls invoke しているのに、挙動がおかしい。
No module named '〜' と言われているモジュールはインストール済なのに、エラーになる。
複数のマシンで検証した。 serverless.yml は同一。

  • 動かない方
% SLS_DEBUG=* sls invoke local -f some-function -p test.json

(略)
Serverless: Load command test
Serverless: Load command dashboard
Serverless: Invoke invoke:local
Serverless: Invoke package
Serverless: Invoke aws:common:validate
Serverless: Invoke aws:common:cleanupTempDir
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Excluding development dependencies...
Serverless: Excluding development dependencies...
Serverless: Invoke aws:package:finalize
Serverless: Invoke aws:common:moveArtifactsToPackage
Serverless: Building Docker image...
START RequestId: c05aed50-9250-1e9a-cce0-73e5d255e79b Version: $LATEST

[ERROR] Runtime.ImportModuleError: Unable to import module '***': No module named '***'


{"errorType":"Runtime.ImportModuleError","errorMessage":"Unable to import module '***': No module named '***'"}

Serverless: Invoke invoke:local までで終わるはずが、なぜかパッケージしだしてる……?

  • 動く方
Serverless: Load command studio
Serverless: Load command dev
Serverless: Invoke invoke:local

(動いているところは略)

バージョンがかなり違った。3台中2台動かない。

  • 動かない方(1)
Framework Core: 1.56.1
Plugin: 3.2.1
SDK: 2.2.0
Components Core: 1.1.2
Components CLI: 1.4.0
  • 動かない方(2)
Framework Core: 1.56.1
Plugin: 3.8.4
SDK: 2.3.2
Components Core: 1.1.2
Components CLI: 1.4.0

Framework Coreは同じだが、PlugnとSDKはかなり違う。

  • 動く方
Framework Core: 1.83.2 (local)
Plugin: 3.8.4
SDK: 2.3.2
Components: 2.34.9

動かない方はずいぶん古いので、バージョンアップした。

% npm update serverless

(略)

   ┌───────────────────────────────────────────────────┐
   │                                                   │
   │   Serverless Framework successfully installed!    │
   │                                                   │
   │   To start your first project run 'serverless'.   │
   │                                                   │
   └───────────────────────────────────────────────────┘

+ [email protected]

動く方より新しくなった。

% sls -v
Serverless: Running "serverless" installed locally (in service node_modules)
Framework Core: 1.83.3 (standalone)
Plugin: 3.8.4
SDK: 2.3.2
Components: 2.34.9

Components Core と Components CLI が Components 1行になった。

再度、実行してみる。

Serverless: Load command studio
Serverless: Load command dev
Serverless: Invoke invoke:local

(動いているところは略)

うーん、動いたので嬉しいけど、何か釈然としないなぁ……

結論?

バージョンが古いようなら、新しくすると良いかも🍙