Closed5
Serverless Framework v9/v10/v11でホットリロードが効かなくなった時のための対処法
最初にaws-nodejs-typescript
テンプレートを導入したときのserverless.ts
が以下。
serverless.ts
import type { AWS } from "@serverless/typescript";
import hello from "@functions/hello";
const serverlessConfiguration: AWS = {
service: "sls-handson",
frameworkVersion: "3",
plugins: ["serverless-esbuild", "serverless-offline"],
provider: {
name: "aws",
runtime: "nodejs14.x",
apiGateway: {
minimumCompressionSize: 1024,
shouldStartNameWithService: true,
},
environment: {
AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1",
NODE_OPTIONS: "--enable-source-maps --stack-trace-limit=1000",
},
},
// import the function via paths
functions: { hello },
package: { individually: true },
custom: {
esbuild: {
bundle: true,
minify: false,
sourcemap: true,
exclude: ["aws-sdk"],
target: "node14",
define: { "require.resolve": undefined },
platform: "node",
concurrency: 10,
},
},
};
module.exports = serverlessConfiguration;
この状態だと、handler.ts
等のソースコードを編集しても、ホットリロードが効かず、編集前と同じレスポンスが返ってきてしまう。
これは、Lambdaの「一度起動したLambdaインスタンスを再利用する」挙動を再現しているものと思われ、この挙動自体はある意味正しい。
「アイドル状態になってから何秒でシャットダウンするか」については、serverless-offline
のterminateIdleLambdaTime
という設定でいじることが可能なようである。(デフォルト:60秒)
実際、この設定を0
に変更したところ、ホットリロードができているように思われる。
--reloadHandler
フラグ付けた?」と書いてあったので調べたところ、リクエストごとにHandlerを再読み込みするフラグのようで、これをtrueにして本質的な解決に至る。
reloadHandler
が、v9からオプトイン(デフォルト無効)になったらしい。ちゃんちゃん。
このスクラップは2022/09/28にクローズされました