これが修正方法です。component_a/s-function.json で置き換えます
"handler": "handler.handler",
と
"handler": "component_a/handler.handler",
function_1.js で、次のように util.js を呼び出します
u = require('../lib/util')
サーバーレスのドキュメントから
handler プロパティを使用すると、関数間でコードを共有できます。デフォルトでは、ハンドラー プロパティは handler.handler です。これは、関数フォルダーに対してのみ相対的であることを意味するため、関数フォルダーのみが Lambda にデプロイされます。
ただし、関数の親サブフォルダーを含めたい場合は、ハンドラーを次のように変更する必要があります。
functionName/handler.handler
ご覧のとおり、ハンドラーへのパスに関数フォルダーが含まれるようになりました。現在は親サブフォルダーに相対的であるため、その場合、親サブフォルダーは関数と共にデプロイされます。そのため、関数で必要な親サブフォルダーに lib フォルダーがある場合は、関数と共にデプロイされます。
これにより、npm の依存関係を好きなように処理することもできます。その親サブフォルダーに package.json と node_modules がある場合、デプロイされたラムダに含まれます。したがって、ハンドラ パスに含める親フォルダが多いほど、ファイル ツリーの上位に移動します。