zu-min.com

Docker Hub に上がっている AWS Lambda node.js ベースイメージが古かった

awslambdanode.js

AWS Lambda 用の node.js ベースイメージを使っていたところ、 node のバージョンが古いことに気が付きました。 背景は覚えていないのですが、 Docker Hub に上がっている AWS Lambda ベースイメージ amazon/aws-lambda-nodejs:22 を Dockerfile で使用しており、 これが古くなっているようです。

node.js が古い

amazon/aws-lambda-nodejs:22 イメージの node.js のバージョンを確認してみます。 v22.12 1 以上がほしかったのですが、ぎりぎり足りていません。

$ docker run --rm --entrypoint '' amazon/aws-lambda-nodejs:22 node --version
v22.11.0

alt text
https://hub.docker.com/layers/amazon/aws-lambda-nodejs/22

最新の node.js バージョン

現時点での node.js v22 系の最新は 22.22.1 でした。 22.11.0 は1年以上前なのでだいぶ古いですね・・・。

バージョンリリース日
v22.22.12026-03-05
v22.11.02024-10-29

ECR の方は最新

Lambda のベースイメージは ECR の方にも配置されているので確認してみます。 こちらは 22.22.1 と、 22 系の最新バージョンとなっていました。

$ docker run --rm --entrypoint '' public.ecr.aws/lambda/nodejs:22 node --version
v22.22.1

alt text
https://gallery.ecr.aws/lambda/nodejs

今回はこちらを使うように Dockerfile を書き換えることで問題解決できました。

Docker Hub 側に amazon/aws-lambda-nodejs:24 がない

問題は解決しましたがちょっと気になったので、 Docker Hub 側の amazon/aws-lambda-nodejs リポジトリの色々なタグを pull し、 中に入っている node.js のバージョンを見てみました。

なぜか 22 はあるのに 24 というタグは存在しないようです。

$ docker run --rm --entrypoint '' amazon/aws-lambda-nodejs:24 node --version
Unable to find image 'amazon/aws-lambda-nodejs:24' locally
docker: Error response from daemon: manifest for amazon/aws-lambda-nodejs:24 not found: manifest unknown: manifest unknown

ただ、 22-x86_6424-x86_64 というようなタグは更新されているようです。 メジャーバージョンのみのタグはもう更新されていないのでしょうか。

$ docker run --rm --entrypoint '' amazon/aws-lambda-nodejs:22-x86_64 node --version
v22.22.1
 
$ docker run --rm --entrypoint '' amazon/aws-lambda-nodejs:24-x86_64 node --version
v24.14.0

特別な理由がなければ ECR のイメージを使おう

AWS のドキュメントや、なんなら Docker Hub の Overview ページpublic.ecr.aws/lambda/nodejs を使う例が書かれているので、 こだわりがなければ ECR Public Registry に上がっているベースイメージを使うのが良いと考えられます。

Footnotes

  1. Vite がサポートしているバージョンがそれだったため

    Vite 8 requires Node.js 20.19+, 22.12+
    https://vite.dev/blog/announcing-vite8

関連記事