[アップデート] AWS Lambdaが Node.js 16をサポートしました
そろそろNode.js 16使いたいな
こんにちは、のんピ(@non____97)です。
皆さんはそろそろNode.js 16使いたいなと思ったことはありますか? 私はあります。
AWS Lambdaがサポートしている昨日までのNode.jsの最新バージョンはv14です。
Node.js 14のサポート終了は2023/4/30です。あと1年切っていますね。
そんな折、AWS Lambdaが Node.js 16をサポートしました。
AWS公式ブログも投稿されていますね。
Node.js 16はNode.jsの最新のLTSリリースであり、2024年4月までセキュリティ&バグフィックスがサポートされます。
Node.js 16ではV8エンジンがv9.0にアップデートされています。
以下コードでNode.js 14で使うV8エンジンのバージョンを確認するとv8.4でした。
exports.handler = async (event) => { console.log(process.version); console.log(process.versions.v8); const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
START RequestId: 6f8617f4-3bbb-42df-8781-02e434e13f55 Version: $LATEST 2022-05-13T05:36:35.007Z 6f8617f4-3bbb-42df-8781-02e434e13f55 INFO v14.19.1 2022-05-13T05:36:35.007Z 6f8617f4-3bbb-42df-8781-02e434e13f55 INFO 8.4.371.23-node.85 END RequestId: 6f8617f4-3bbb-42df-8781-02e434e13f55 REPORT RequestId: 6f8617f4-3bbb-42df-8781-02e434e13f55 Duration: 5.00 ms Billed Duration: 5 ms Memory Size: 128 MB Max Memory Used: 56 MB Init Duration: 142.69 ms
そのため、V8エンジンのv8.5〜9.0の様々な新機能が利用できそうですね。
- V8 release v8.5 · V8
- V8 release v8.6 · V8
- V8 release v8.7 · V8
- V8 release v8.9 · V8
- V8 release v9.0 · V8
マネージメントコンソールから確認してみた
早速マネージメントコンソールから確認します。
Node.js 16.x
というランタイムが光輝いています。ランタイムをNode.js 16.x
、アーキテクチャをarm64
(なんとなく)を選択して、Lambda関数を作成します。
以下コードでNode.jsとV8エンジンのバージョンを確認してみます。
exports.handler = async (event) => { console.log(process.version); console.log(process.versions.v8); const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
実行すると、Node.jsのバージョンは16.14.0
で、V8エンジンのバージョンは9.4.146.24
であることが分かりました。
START RequestId: 81bd7614-e6c4-493e-894a-d841a92ef236 Version: $LATEST 2022-05-13T05:43:46.978Z 81bd7614-e6c4-493e-894a-d841a92ef236 INFO v16.14.0 2022-05-13T05:43:46.980Z 81bd7614-e6c4-493e-894a-d841a92ef236 INFO 9.4.146.24-node.20 END RequestId: 81bd7614-e6c4-493e-894a-d841a92ef236 REPORT RequestId: 81bd7614-e6c4-493e-894a-d841a92ef236 Duration: 5.70 ms Billed Duration: 6 ms Memory Size: 128 MB Max Memory Used: 54 MB Init Duration: 133.79 ms
AWS CDKでデプロイしてみた
Node.js 16のLambda関数のデプロイはマネージメントコンソールからだけではなく、早速AWS SAM、CloudFormation、AWS CDKからもできるようになっていました。
今回はAWS CDKでデプロイします。
準備したコードは以下リポジトリに格納してあります。
実行するLambda関数はtimers promises APIのsetTimeout
を使って、数秒間待機するといったシンプルなものです。なんとなくtop-level awaitも使いたくなったのでハンドラーの外、内どちらもtimers promises APIのsetTimeout
を使用します。
実際のコードは以下の通りです。
import { setTimeout } from "timers/promises"; console.log(`Start setTimeout outside of handler : ${new Date()}`); await setTimeout(2000); console.log(`End setTimeout outside of handler : ${new Date()}`); export const handler = async (): Promise<void | Error> => { console.log(`Start setTimeout inside of handler : ${new Date()}`); await setTimeout(3000); console.log(`End setTimeout inside of handler : ${new Date()}`); return; };
npx cdk deploy
でこちらのLambda関数をデプロイします。
デプロイ後、Lambda関数を確認すると、確かにランタイムがNode.js 16.xになっていることが分かりました。
こちらのLambda関数を実行すると、順番通りに指定した秒数待機したことが分かります。
START RequestId: 6ea8f038-6942-4899-b0f8-6a169978b391 Version: $LATEST 2022-05-13T09:18:24.775Z undefined INFO Start setTimeout outside of handler : Fri May 13 2022 09:18:24 GMT+0000 (Coordinated Universal Time) 2022-05-13T09:18:26.778Z undefined INFO End setTimeout outside of handler : Fri May 13 2022 09:18:26 GMT+0000 (Coordinated Universal Time) 2022-05-13T09:18:26.783Z 6ea8f038-6942-4899-b0f8-6a169978b391 INFO Start setTimeout inside of handler : Fri May 13 2022 09:18:26 GMT+0000 (Coordinated Universal Time) 2022-05-13T09:18:29.792Z 6ea8f038-6942-4899-b0f8-6a169978b391 INFO End setTimeout inside of handler : Fri May 13 2022 09:18:29 GMT+0000 (Coordinated Universal Time) END RequestId: 6ea8f038-6942-4899-b0f8-6a169978b391 REPORT RequestId: 6ea8f038-6942-4899-b0f8-6a169978b391 Duration: 3012.82 ms Billed Duration: 3013 ms Memory Size: 128 MB Max Memory Used: 56 MB Init Duration: 2138.21 ms XRAY TraceId: 1-627e2260-1e0600086a26883d7263773a SegmentId: 7feaf48d24403cd6 Sampled: true
Node.js 16に乗り換えていく
AWS Lambdaが Node.js 16をサポートしたアップデートを紹介しました。
新しいバージョンがサポートされるということは古いバージョンはサポートされなくなる時期が近づいてきているということです。もし、ランタイムに古いバージョンのNode.jsを使用されている方はそろそろ更新を検討されてはいかがでしょうか。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!