AWS Lambda(node.js v14)でES ModulesとTop Level awaitがサポート
node.js v14でTop Level awaitがサポートされるようになりました。(EcmaScriptのみ)
現時点でnode.js v16が最新のようです。
npm initでtypeが選べない
defaultでtypeは省略されています。
npm init
コマンドでインタラクティブにpackage.jsonを作成するけどtypeに関しての設定がありません。
その為、npm initコマンド実行した後に”type” : “module”を追加する必要があります。
※「npm initコマンドでpackage.jsonにデフォルトでtype:moduleを設定する方法」
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "type": "module", // 追加する "license": "ISC" }
これでLambda(node.js)でTop Level Awaitが使えるようになります。
今後はLambda(node.js)ではEcmaScriptが主流になるかもしれない、そんな気がします。
handler外で初期処理を記述する
プロビジョニングを使用し、Top Level Awaitを使用すれば、handler外で重たい初期処理を記述することができ、これにより処理速度が向上するようです。(試していないです)
lambdaはこんなソースにしました。
import {setTimeout} from 'timers/promises' console.log('test1') await setTimeout(5000) // 重たい処理と仮定 console.log('test2') export async function handler() { console.log('test3') // TODO implements const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
バージョン発行し、プロビジョニングされた同時実行を「2」にします。1~2分かかって準備完了になります。
準備完了になった時点で、cloudwatch logsを見ると、handler外が実行されているのがわかります。
これで初期処理が完了しているという感じでしょうか。だからLambda実行自体は早くなる、という事になります。(多分)
では、肝心のlambdaを実行します。「Test」ボタンを押してcloudwatch logsを見てみます。
lambda実行時はhandler外は実行されず、handler内しか実行されていません。予想通りの動きですね。プロビジョニングすると金はかかりますが早くすることができるようです。
参考サイト
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント