0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambdaのランタイムバージョン更新動作について

Last updated at Posted at 2025-01-07

はじめに

ランタイムバージョンの更新動作について、公式の開発ガイド見てたら面白そうだったので、調べてみました。

前提

ランタイムとは?

Lambdaがサポートするプログラミング言語ごとの実行環境です。

スクリーンショット 2025-01-08 5.10.42.png

Lambda は、ランタイムの使用により複数の言語をサポートします。ランタイムは、Lambda と関数の間の呼び出しイベント、コンテキスト情報、レスポンスを中継する言語固有の環境を提供します。Lambda が提供するランタイムを使用することも、独自に構築することもできます。
プログラミング言語のメジャーリリースにはそれぞれ別個のランタイムがあり、固有のランタイム識別子 (nodejs22.x または python3.13 など) を持っています。

メジャーリリースは自動更新されない。

メジャーリリースの自動更新はされません。

プログラミング言語のメジャーリリースにはそれぞれ別個のランタイムがあり、固有のランタイム識別子 (nodejs22.x または python3.13 など) を持っています。新しいメジャー言語バージョンを使用するように関数を設定するには、ランタイム識別子を変更する必要があります。AWS Lambda はメジャーバージョン間の下位互換性を保証できないため、これは顧客が主導権を持つ操作です。

つまり、ランタイム設定で選べる項目を跨ぐ更新(Python3.11→3.12)のような更新は私たちユーザの責任で行う必要があります。

マイナーバージョンリリースが自動更新対象。

Lambdaが自動更新するは、マイナーバージョンリリースです。

Lambda は、セキュリティ更新、バグ修正、新機能、パフォーマンス強化、およびマイナーバージョンリリースのサポートを使用して、各マネージドランタイムを最新の状態に保ちます。

更新方法

更新方法は3種類あります。

スクリーンショット 2025-01-08 4.04.31.png

基本は自動を推奨とのことですが、稀に関数の動作に影響が出るらしく、残りの2つのオプションが用意されているとのこと。

現在のランタイムバージョンはどれだっけ?

INIT_STARTのログを見ればわかります。

Python 3.11

2024/1時点で、3.11.v44でした。

INIT_START Runtime Version: python:3.11.v44 Runtime Version ARN: arn:aws:lambda:ap-northeast-1::runtime:b1c790bce6ec3c3a14a715f557a25d2daffc580e2fa1439a9ee32ac12f1dd582

print(sys.version)で、現在のバージョンを表示させたところ、3.11.10 (main, Sep 24 2024, 11:02:55) [GCC 7.3.1 20180712 (Red Hat 7.3.1-17)]となっています。

Pythonのサイト覗いてみると、最新は3.11.11みたいですね。

v44というのは、Python公式のものではなく、AWSが管理するランタイムのマイナーバージョンです。

3.11.v44のラインタイムのPythonは3.11.10みたいな対応表を探してみましたが、見つけることができませんでした。

Node.js 18.x

2024/1時点で、nodejs:18.v57でした。

INIT_START Runtime Version: nodejs:18.v57 Runtime Version ARN: arn:aws:lambda:ap-northeast-1::runtime:8865cfc6a1d3f2dfabf5c509eaa9fbd70aa12fa4bbe614047030158c21978bcc

console.log(process.version);で現在のバージョンを表示させたところ、v18.20.4となっています。

Nodejsのサイト覗いてみると、最新はv18.20.5みたいですね。

CloudWatch Contributor Insightでランタイム監視

どのランタイムが使われているかはログを見ればわかるのですが、長期間にわたってどのように更新されていくかを確認する方法として、CloudWatch Contributor Insightを使った方法が提案されていました。

以下のルール定義を利用すると、"/aws/lambda/*"に該当するロググループのINIT_STARTログから、runtimeVersionおよび、runtimeVersionArnの遷移を時系列に見ることができます。

{
  "Schema": {
    "Name": "CloudWatchLogRule",
    "Version": 1
  },
  "AggregateOn": "Count",
  "Contribution": {
    "Filters": [
      {
        "Match": "eventType",
        "In": [
          "INIT_START"
        ]
      }
    ],
    "Keys": [
      "runtimeVersion",
      "runtimeVersionArn"
    ]
  },
  "LogFormat": "CLF",
  "LogGroupNames": [
    "/aws/lambda/*"
  ],
  "Fields": {
    "1": "eventType",
    "4": "runtimeVersion",
    "8": "runtimeVersionArn"
  }
}

スクリーンショット 2025-01-08 5.00.12.png

グラフを見て気づきましたが、INIT_STARTは実行環境を作るときに出るログなので、実行環境を使い回ししている場合(短期間の複数回リクエスト、SnapStart)は検出しません。

まとめ

基本、自動更新は後方互換があるものを対象としているはずです。

あまりランタイムバージョンの更新について、詳しく理解しておく必要はないかもですが、いざ不可解な問題が起きたときに役に立ちそうだなと思い、紹介してみました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?