chrome-aws-lambdaをNode.js16に対応させる

はじめに

AWSからNode.js 12のランタイムサポート終了予定のメールが届いた。

Node.js 12自体のサポート終了を受けてのことらしい。「Node.js 16 にアップグレードすることをお勧めします。」との事なので、ランタイムをNode.js 16にしたところ、Lambda実行時に以下のエラーが出た。

Error: Failed to launch the browser process!
/tmp/chromium: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory

原因

原因はレイヤーとして使っていた「chrome-aws-lambda」がNode.js16に対応していないためだった。

対応

chrome-aws-lambda」のGithubを確認してみると、Node.js16対応バッチがプルリクされていたので、それを元に修正するとエラーは出なくなった。

chrome-aws-lambda – Add support for nodejs16.x #274
https://github.com/alixaxel/chrome-aws-lambda/pull/274

修正箇所

修正は、10行目と168行目の2箇所。どちらも以下のように「16」を追加する。

index.ts

- if (/^AWS_Lambda_nodejs(?:10|12|14)[.]x$/.test(process.env.AWS_EXECUTION_ENV) === true) {
+ if (/^AWS_Lambda_nodejs(?:10|12|14|16)[.]x$/.test(process.env.AWS_EXECUTION_ENV) === true) {

修正済みのリポジトリ

まとめ

今回は、Node.js16にアップグレードしましたが、「chrome-aws-lambda」は、Node.js14には対応しているらしいので、しばらくはランタイムをNode.js14にしておくのもいいかもしれませんね。