先頃、AWSはNode.js バージョン14の Function as a Service (FaaS) であるLambdaのサポートを発表した。開発者は、Node.jsの新機能を使用してAWS Lambda関数を作成できるようになった。トップレベルの await、強化された診断、ストリーム APIの変更、パフォーマンスを向上させるための改訂されたJavaScriptエンジンなどの新機能がある。
AWS Lambdaは現在のNode.jsの長期サポート (LTS) バージョンをサポートする。つまり、新しいバージョンを使用する開発者は、関数を作成または更新するとき、nodejs14.x をランタイムパラメータ値に指定する必要がある、あるいは、適切なベースイメージのマネージドランタイムを使用する。Node.js 14は、V8 バージョン8.1 を搭載している。これは、以前のNode.js 12.x に搭載された V8 7.4 エンジンからの大幅なアップグレードであり、演算子 Nullish Coalescing や Optional Chaining などの新機能が使えるようになる。
AWSヒーローのJeremy Daly氏は、ツイートの中で述べた:
はい、Node.js 14.x がLambdaに追加されました! これは、Nullish Coalescing を使用できることを意味します。これは、必要だとは思わなかったかもしれませんが、それがなければ生きていけなくなると思います!
const newVersion = null ?? 'this works great' ;
console.log(newVersion);
// expected output: "this works great"
const nullishTest = 0 ?? 36;
console.log(nullishTest);
// expected output: 0 because 0 is not the same as null or undefined
さらに、診断レポートはNode.js 14で安定した機能になり、開発者はオンデマンドで、または特定のイベントが発生したときにJSON形式のレポートを生成できる。AWSのサーバレスシニア開発者であるBenjamin Smith氏によるAWS Computeのブログ投稿によると、パフォーマンスの低下、メモリリーク、予期しないエラーなどの問題を診断するのに役立つとのことである。さらに、書いている:
次の例では、Lambda関数内からレポートを生成し、その結果をAmazon CloudWatchに出力してさらに検査します。
const report = process.report.getReport(); console.log(typeof report === 'object'); // true // Similar to process.report.writeReport() output console.log(JSON.stringify(report, null, 2));
Smith氏はまた、Node.js 14で、ストリームAPIが更新され、Node.jsコアのさまざまな部分であいまいさを取り除き動作を簡素化できるようになったと書いている。また、Lambda関数をセキュアに保つために、AWSは、zipアーカイブ形式を使用する場合のNode.jsコミュニティによってリリースされたすべてのマイナーアップデートでNode.js 14をアップデートする。コンテナイメージとしてパッケージ化されたLambda関数の場合、開発者はDockerHubまたはAmazon ECR Publicから最新のベースイメージをプル、再構築、デプロイできる。
開発者は、Lambdaコンソールからコードをアップロードして Node.js 14.x ランタイムを選択するか、AWS CLIや、AWSサーバレスアプリケーションモデル (AWS SAM)、AWS CloudFormationを使用して、Node.js 14を使用するLambda関数をデプロイできる。さらに、AWSが提供するベースイメージを使用して、Node.js 14関数をコンテナイメージとしてデプロイしてNode.js 14を使用することもできる。最後に、以前のNode.jsバージョンを実行している既存のLambda関数を移行する場合、開発者はまずNode.js 14と互換性があるようにコードを更新してから、関数ランタイムを Node.js 14.x に更新する必要がある。
GoogleやMicrosoftなどの他のパブリッククラウドプロバイダも、FaaS製品であるCloud FunctionsとAzure Functionsで言語サポートを更新し続けている。Googleは先頃、Rubyのサポートを追加したが、Azure Functionsは先月のパブリックプレビューでPython 3.9のサポートを追加した。Node.js 14のサポートに関しては、Azure Functionsは昨年11月からパブリックプレビューで提供されていた。また、Google Cloud FunctionsではNode.js 14がパブリックプレビューで提供されている。
AWS Lambdaは、Java、Go、PowerShell、Node.js、C#、Python、Rubyコードをネイティブにサポートし、開発者が追加のプログラミング言語を使用して関数を作成できるランタイムAPIを提供している。比較すると、Azure FunctionsはC#、F#、Java、PowerShell、Python、およびTypeScriptをネイティブにサポートしているが、RubyやGoはサポートしていない。そして最後に、Google Functionsは、Google Cloud PlatformでJavaScript、Node.js、Python 3、Go、Javaランタイム、さらにはMicrosoft.NET言語をサポートしている。
Hacker Noonのブログ投稿は、AWS Lambdaが最も人気のあるサーバレスプロバイダであることを示している。さらに、昨年のNew Relicの開発者、DevOps、意思決定者のための 2020 AWS Lambdaベンチマークレポート eBookは、Node.js言語が最も人気があり、Pythonが2位であることを示している。
Node.js 14ランタイムは現在、Lambdaサービスを提供するすべてのAWSリージョンで利用できる。さらに、AWSはコミュニティのサポート終了スケジュール (2021年4月30日)に従ってNode.js 10が非推奨になることに注意してください。詳細については、ランタイムサポートポリシーをご覧ください。Node.js 14ランタイムは、2023年4月までセキュリティとバグ修正のためにサポートされる。