話題の記事

【注意】AWS LambdaでNode.js v4.3の終了がアナウンスされました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大栗です。

先程AWS LambdaのNode.js v4.3の廃止についてアナウンスがありましたのでご紹介します。

Announcement: Node.js v4.x is now EOL, please migrate your functions to a newer runtime version

Node.js v4.3のEOL

Node.js自体のEOL

言語/ランタイムとしてのNode.js v4系はActive LTS が2015年10年1日に開始され、Maintenance LTSが2018年4月30日に終了しました。そのためNode.jsから公式のアップデートが出ることはありません。もしEOLになっているv4系を含むNode.jsを使用している場合はすぐに新しいバージョンへアップデートすることが推奨されます。なお、v4系以降のバージョンでもLTSでないv5系やv7系はすでにEOLとなっています。

バージョン 言語自体のLTS開始 言語自体のEOL 備考
Node.js v0.10系 2013/03/11* 2016/10/31 現在はEOL *明確なActive LTSの開始は無い
Node.js v4系 2015/10/01 2018/04/30 現在はEOL
Node.js v6系 2016/10/18 2019年4月予定 現在はMaintenance LTS
Node.js v8系 2017/10/31 2019年12月予定 現在はActive LTS
Node.js v10系 2018年10月予定 2021年4月予定 現在はCurrent Release

https://github.com/nodejs/Release/blob/master/README.md より

v8系はOpenSSL-1.0.2のEOLに合わせてEOLになるためMaintenance LTSの期間が短くなっています。

AWS LambdaにおけるNode.js v4.3のEOL

AWS Lambdaではアナウンスメントに以下の記載が有ります。

New function creation and code updates for existing functions using the Node.js v4.3 runtime will be disabled by July 31 and October 31, 2018, respectively.

つまり、Node.js v4.3ランタイムを使用した新規の関数作成は2018年7月31日まで、既存の関数の更新は2018年10月31日までとなります。関数の動作終了については現時点でアナウンスがありませんが近々起動しなくなると考えられます。LambdaにおけるNode.jsのライフサイクルは以下になります。

バージョン Lambdaサポート開始 Lambda作成終了 Lambda更新終了 Lambda動作終了 備考
Node.js v0.10 2014/11/15 2017/01/11 2017/5/30 2017/5/30 ホワイトリストに登録することで動作終了以降も一時的に動作させることが可能でした。
Node.js v4.3 2016/04/07 2018/07/31 2018/10/31 - 動作終了は未定。
Node.js v6.10 2017/03/22 - - - 現時点でLambdaの終了に関するアナウンスはない
Node.js v8.10 2018/04/02 - - - 現時点でLambdaの終了に関するアナウンスはない

言語自体のEOLから3ヶ月程度でLambdaの新規作成ができなくなっています。アナウンスはありませんが、今後も同様である場合はv6.10は2019年7月ごろに、v8.10は2020年3月ごろに新規作成できなくなると予想できます。

以下のエントリにもありますが、Node.jsはv8.10のラインタイムがサポートされています。出来る限り最新のv8.10へ移行しましょう。

[新機能]AWS LambdaがNode.js v8.10をサポートしました

EOLにあたっての注意

意図せぬLambda関数

自分で意図してLambdaを作成していなくともManagement Consoleから各種データ連携を有効にした場合に、自動でLambdaが作成される場合があります。例えばCloudWatch LogsのAmazon Elasticsearch Serviceへのストリーミングを行う場合などです。Lambdaを作成した覚えがなくても念のために対象のものがないか確認する必要があります。

新バージョンへ移行するに当たっての注意点

LambdaのNode.jsはv4.3のリリース時にプログラミングモデルが変更されています。現在はv4.3以降のランタイムしか動作しないため古いプログラミングモデルの関数は無いと思いますが、もしv0.10と同様の動作が必要な場合は以下のエントリの様にcontext.callbackWaitsForEmptyEventLoopプロパティをfalseに設定しましょう。callbackWaitsForEmptyEventLoopプロパティの詳細についてはこちらを参照してください。

AWS Lambdaでcontext.succeed()とcallback()の挙動の違いを理解する

さいごに

Node.jsはライフサイクルが速いため2年に1回程度はバージョンアップタイプが必要となります。しかし、ライフサイクル自体は明確になっているのでバージョンアップ計画は立てやすいと思います。動作している環境は継続的なメンテナンスが必要ですので直前に慌てないようにあらかじめ計画をたてるようにしましょう。