AWS Lambdaにおけるランタイムバージョンの制御

今日は小ネタ。

AWS Lambdaは実行環境のセキュリティ更新やバグ修正などに気を使わなくて良いコンピュートサービスです。実際には動作するマシンがあるので、セキュリティ更新やバグ修正はAWSがやってくれるのですが、これの更新を制御するための「ランタイム管理設定」というのがあります。これらの更新にはバージョン管理されており、ランタイムバージョンと呼ばれています。コンソールには以下のような画面で確認できます。

例えば、Lambda環境には予めAWS SDKがインストールされています。これが更新されるとAWSのタイミングでランタイムバージョンが更新されるかと思われます。

このラインタイムバージョンですが、制御する方法としては、自動、関数の更新、手動の3種類あります。デフォルトは自動。

それぞれの意味はAWSのドキュメントを参照したほうがよいかと思います。

docs.aws.amazon.com

多くの場合、「自動」が良いかと思いますが、一部のシステムにおいては「動いているものには何も手を加えないでほしい」というニーズもあるので、そのニーズに答えるには「関数の更新」を選択すると良いかなと思います。

実際に動いているランタイムバージョンはLambda関数起動時のCloudWatch Logsのログに出力されます。Ruby 3.3環境において試したところ検証した時点ではruby:3.3.v4というものが使われていました。

Ruby 3.3が使えるようになったのが2024年4月4日、この検証を行ったのは5月18日ですので、結構な頻度でランタイムバージョンは更新されているのかなと推測できます。

aws.amazon.com

このランタイムバージョンの出力はLambda関数の実行ごとに出力されるわけではないようです。

AWSのドキュメントには「新しい実行環境を作成するたびに」という記述があります。ちょっとピンときませんがおそらくコールドスタートのタイミングで出力されるのかなと思われます。

「どのような場合にも更新をしてほしくない」という場合には「手動」を選ぶことになるかと思いますが、ここで指定するランタイムバージョンはARNで指定する必要があります。

ちょっと調べたのですが、過去のARN一覧を取得する方法はなさそうです。なんらかの理由で過去のランタイムバージョンを利用したい場合は、うまく動いているランタイムバージョンをARN形式で保存しておいて、「ランタイム管理設定」にてランタイムバージョンを指定しておくのが良いかなと考えます。