![]() |
どうもSCSK齋藤です。
今回はTechHarmonyの企画であるクラウド自由研究の一環として投稿させていただきます。
Lambdaのランタイム終了についておさらい
Lambdaのランタイムは、下記のブログにある通り、各プログラム言語のバージョンのサポート期間が定められています。
サポート終了の際には以下の3段階で流れが進み、徐々にサポートされなくなります。
最初の廃止は、プログラム言語側の廃止なので、AWS上で何かが動かなくなるというものではありません。
AWS Lambdaに直接影響あるのは「関数の作成ブロック」からとなります。
関数の作成ブロックというのは、終了対象のランタイムの関数を新たに作成できなくするというものです。その時点ではすでに作成されたLambdaの更新は可能という状態です。
ですが、「関数の更新ブロック」のフェーズになると、更新も一切できなくなってしまいますので、それまでにランタイムアップデートなり、不要なら廃止する形の対応が必要になります。
投稿経緯
私は普段の業務でAWS上のアプリケーションの保守開発を行っています。
保守業務の一環として、Lambdaのランタイムサポート終了に伴う対応に今取り組んでいます。
その中で、本番環境に展開中の既存Lambdaのランタイムアップデートした後、もし問題があったら以前のランタイムに切り戻しをしたいという要望がありました。
終了対象のランタイムに戻せるのか?という疑問は生まれましたが、実際に検証してみたら終了対象のランタイムに戻すことが可能でした。(マネジメントコンソールからは選択できないので、AWSCLIやSDK経由で戻すことになります。)
そうであれば、新規作成した最新ランタイムのLambdaを、AWSCLIやSDK経由で終了対象のランタイムに戻せば、実質的に終了対象のランタイムのLambdaを新規作成したことになるのではないか?という疑問(好奇心)が生まれました。
前述の「Lambdaのランタイム終了についておさらい」で述べたように、関数の作成ブロックに入ってしまうと、終了対象のランタイムのLambdaは作成不可能なはずなので、思わぬ抜け道を見つけたことになるのではないかとワクワクしてしまいましたww
検証
早速検証してみます。
今回は執筆時点のPythonの最新ランタイムPython3.13の関数を作成し、廃止予定のPython3.7に変更してみたいと思います。
1.関数の作成
以下の設定で作成してみます。ちなみに、他の部分の設定は特に変更していません。
2.ランタイム変更
前述したように、終了対象のランタイムへの変更は、AWSCLIかSDK経由でのみの更新となります。
そのため、Cloudshellを起動して、以下のコマンドを入力します。
aws lambda update-function-configuration --function-name RunTimeUpdateTest --runtime python3.7
実行したら以下のようなレスポンスが返ってきます。
赤枠で囲ったところに書いてあるようにPython3.7に変更できましたね!
マネジメントコンソールを確認しても、Python3.7になっていますね。
これで当初の仮説通り、終了対象ランタイムのLambdaを新規作成することができてしまいました!
新規作成不可だったパターン
検証していく中で、どうしても作成がうまくいかなかったパターンがありました。
それは、Lambdaのアーキテクチャをarm64にした場合です。
この場合は、前述の検証のように終了対象のランタイムに変更することができませんでした。
AWSCLIで同様のコマンドを入力したら下記のようなエラーとなりました。
しかし、コマンドをPython3.8に変えたところ、、、
Python3.8に変更できました。
Python3.8は、「関数の作成ブロック」が執筆時点よりも1ヶ月ほど先となっています。(2025年8月21日時点)
Python3.7は、「関数の作成ブロック」の時期をすでに迎えているため、arm64は対応していないのかもしれません。
まとめ
今回気になっていた、終了対象のランタイムのLambdaが抜け道を使って実質新規作成することが可能かについては、可能といえるのではないかと思いました。
しかし、arm64でPython3.7に対応していなかったりと、必ずしも新規作成がうまくいくとは限らなそうです。
今回の検証が役に立つと思われるユースケースとしては、Lambdaランタイム終了に伴って不要なLambdaを本番環境から削除するような方に役に立つのではないでしょうか。
誤って必要なLambdaを消してしまったが、切り戻しをしたい時などに、もしかしたら役に立ちそうです。
しかし、非公式な方法だと思われるので、検証環境などで動作確認などはしっかり行った上で本番に臨んだ方が良いかと思います。