はじめに
ある日、AWS Health から「利用中の Lambda ランタイムについてサポート終了(EOL)予定」を知らせる通知が、自分の環境に届きました。
最初は「関数が急に止まるの!?」と焦りましたが、調べるとすぐ止まるわけではないこと、そして自分の構成は Terraform 管理なので、.tf のランタイムを1行直して反映するだけで移行できることが分かりました。
先に結論:ランタイムの EOL は、コンソールでポチポチ直すより、IaC で1行変えて差分を残して apply したほうが、変更が追えて安全でした。
環境
- AWS Lambda(Node.js ランタイム)
- Terraform で構築・管理
- AWS Health(サービス側の通知)
- リージョン: ap-northeast-1(東京)
起きたこと
届いた通知の主旨はこうでした(要約)。
AWS Health から、利用中の
nodejs20.xについてサポート終了予定を知らせる通知が届きました。新しいランタイムへの移行を検討してください。
「関数を消せ」ではなく「移行を検討して」という案内です。とはいえ放置はしたくないので、移行することにしました。
ランタイムの対応状況や廃止予定日は時期で変わります。この記事は自分に届いた通知をもとにしたもので、最新の対応・廃止スケジュールは公開時点で AWS 公式のランタイム表をご確認ください。
背景:ランタイムの EOL で何が起きるのか
Lambda のランタイムにはサポート期限があります。EOL を過ぎても関数がいきなり停止するわけではありませんが、おおむね次のような制限が段階的に入っていきます(詳細・時期は公式のランタイムポリシーを参照)。
- セキュリティパッチや更新が提供されなくなる
- やがて、そのランタイムでの新規関数の作成が制限される
- さらに、既存関数のコード更新も制限される
つまり「今は動くけど、塞がれていく」状態なので、早めにサポート中で、互換性の確認を済ませたランタイムへ移すのが安全、というわけです。私はこの構成では、検証済みの nodejs22.x を採用しました。
対処:.tf を1行変えて差分を残して apply
私の構成では、Lambda のランタイムは Terraform のモジュールに書いてあります。やったのは本当に1行の変更でした。
resource "aws_lambda_function" "this" {
function_name = "${var.project}-${var.function_name}"
role = aws_iam_role.this.arn
- runtime = "nodejs20.x"
+ runtime = "nodejs22.x"
Git 管理しているなら、PR やコミットで差分を残し、terraform plan で差分を確認してから apply します。
~ aws_lambda_function.this
runtime = "nodejs20.x" -> "nodejs22.x"
コンソールでポチッと変える方法もありますが、それだと「いつ・誰が・なぜ変えたか」が残りません。IaC なら、
- 変更が 1行の diff として記録に残る
- レビューできる
- 戻したくなったら 元に戻して apply すればいい
と、追跡できるのが良いところでした。「通知が来た → IaC の履歴に対応が残る」という流れにできたのが、地味にうれしいポイントです。
注意:ランタイムのメジャー更新(20→22 など)は、コードがその新ランタイムで動くかの確認が別途必要です。1行で“宣言”は変わりますが、互換性まで保証されるわけではありません。移行後は、Lambda のテストイベントや API Gateway 経由の実リクエストで、正常応答・CloudWatch Logs・エラー率を確認しました。
学び
- ランタイム EOL の通知=すぐ停止ではない。が、更新・作成が段階的に制限されるので早めに移す。
- 移す先は「最新」より「サポート中かつ互換性確認済み」を選ぶ。
- Terraform 管理なら、ランタイム移行は 1行の変更 + 差分確認 + apply で済む。
- コンソール手作業と違い、変更が diff として残り、レビューも切り戻しもできる。
- 移行後は テストイベント・ログ・API 疎通で動作を確認する。
おわりに
「EOL 通知」と聞くとドキッとしますが、IaC で管理していると対応がとても淡々と終わりました😌 “通知が来たら1行直して差分を残す”、という流れを作っておくと、こういう定期メンテが怖くなくなると思います🙌
参考
- AWS公式: Lambda ランタイム(対応ランタイムと非推奨スケジュール。公開時点で要確認)
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html - AWS公式: ランタイムのサポートポリシー(EOL 後に何が制限されるか)
https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html - Terraform 公式:
aws_lambda_function(runtime引数)
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function