みなさん、こんばんは。サニービュー事業部の小寺です。
AWS Lambdaで新しい「ランタイム管理設定」機能がGAになっています。
https://aws.amazon.com/jp/about-aws/whats-new/2023/01/runtime-management-controls-aws-lambda/

AWS Lambda のランタイム管理制御機能とは

AWS Lambdaの関数が使用しているランタイムのパッチバージョンと、ランタイムの更新がいつ適用されるかを可視化することができます。
デフォルトの設定では Lambda のランタイムはマイナーアップデートがあった場合は自動的に更新されますが、この機能を使うことで更新をするタイミングを制御できます。
また、必要に応じてランタイムの更新を関数のデプロイと同期できるようになりました。Lambdaがランタイム更新を適用するタイミングを制御できるようになったことで、今まで遭遇されたこともある方もいるかもしれませんが、ランタイム更新における非互換性を早期に見つけることができるようになりました。

ランタイム更新の非互換性があったときは、関数を以前のランタイムバージョンにロールバックすることができます。関数の動作の維持ができ、かつ中断時間を最小限に抑えることができます。また最新のランタイムバージョンに戻る前に非互換性を修正することができるようになっています。

ランタイム更新モード

ランタイム更新モードは以下の3つがあります。
1)Auto(自動)※デフォルト
2)FunctionUpdate(関数の更新)
3)Manual(手動)

1) Auto(自動)
デフォルト設定でAWS推奨設定です。Lambdaがランタイム更新の処理を可能にすることで、運用上のオーバーヘッドを最小限にすることができます。
今回のリリースでは、2つのステップでランタイム更新がされるようになっています。
1ステップ目としては、新規作成または更新された関数にのみ新たなランタイムバージョンが適用されます。2ステップ目として、自動ランタイム更新モードを使用するよう設定された残りの関数に、ランタイム更新がかかります。

2)FunctionUpdate(関数の更新)
関数のコードまたは設定を変更するたびに、関数を利用可能な最新のランタイム バージョンに更新します。
Auto(自動)の1ステップ目と同じです。違いとしてはAuto(自動)では、変更されていない関数に Lambda がランタイム更新を適用する2ステップ目があります。
関数更新モードでは、関数を変更しない場合、現在のランタイム バージョンを無期限に使い続けることになります。関数を定期的に更新しない場合は、1)Auto(自動)を利用する必要があります。

ランタイムの更新を関数のデプロイと同期すると、Lambda がランタイムの更新をいつ適用するかを制御できます。例としては、ユーザのアクセスが集中するときやイベント時などに更新を避けることができ、更新によるリスクを下げることが可能です。

さらに、CI/CDパイプラインで関数の更新モードを使用すると、ランタイム更新の非互換性を検出できるので、デプロイ毎に新しい公開関数バージョンを作っている場合は有効ですね。

3) Manual(手動)
関数が使用するランタイムバージョンを完全に制御することができます。Manual(手動)を有効にする場合は、使用するランタイムバージョンのARNを指定する必要があり、INIT_STARTログ行からの確認に対応しています。

確認してみる

(1)マネージメントコンソールからLambda⇒関数で関数を選ぶと「ランタイム管理設定を編集」が確認できました。

(2)「関数の更新」を選ぶと、「[関数の更新] を選択すると、関数を更新しない限り、ランタイムバージョンは更新されなくなります」メッセージが表示されました。

(3)「手動」を選ぶと「[手動] を選択すると、関数のランタイムバージョンはセキュリティ更新を受け取らなくなります。」メッセージが表示されました。
またランタイムバージョンのARNの入力欄が表示されています。

まとめ

新しくランタイム管理設定がGAになりましたが、デフォルトが推奨されています。Lambdaランタイム更新の非互換性の問題発生時には一時的に使う用途として捉えておきます。