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?

Python: 3.9 EOLに伴うアップグレード先のバージョン検討(主にAWS Lambdaで使っている場合)

Posted at

概要

2025年4月に検討と移行作業を実施したのですが、 Python 3.9 から Python 3.12.x (3.12.0のリリースが2023-10-02 で、2025-04-02 より Security Supportに移行)に移行しました。

本記事ではどのような前提・情報・判断をしてアップグレード先のバージョンを決めたのかを記載します。

前提

Python のリリースサイクルサイクル: PEP 602

Python 3.9 から Python のリリースサイクルが変わりました。

今回関係する箇所を書くと

  • 毎年10月に新マイナーバージョンをリリース
  • Python 3.9 - 3.12 の間は 1.5年のフルサポート、3.5年のセキュリティ修正期間で合計5年のサポート
    • 3.13 から2年のフルサポートと3年のセキュリティ修正期間に

のところになります。これにより、 Python 3.9 - 3.14 のバージョンごとのリリースとサポート期間は以下になりました。

Python のバージョン 初回リリース日 フルサポート期限 セキュリティーサポート期限
3.9 2020-10-05 2022-05-17 2025-10-31
3.10 2021-10-04 2023-04-05 2026-10-31
3.11 2022-10-24 2024-04-01 2027-10-31
3.12 2023-10-02 2025-04-02 2028-10-31
3.13 2024-10-07 2026-10-01 2029-10-31
3.14 2025-10-07 2027-10-01 2030-10-31

検討は2025年4月なので、最新のマイナーバージョンは Python 3.13 で、 Python 3.12 がフルサポート期間を終了し、セキュリティーサポート期間に入ったタイミングでした。

用途

私のアップデート対象だとほぼ AWS Lambda でした。

情報

公式のダウンロードページ

サポート期限などについては日常的には他のものもまとまっているので endoflife.dateを参照しがちですが、こういったときには公式のサイトを確認します。

利用PyPiモジュール/ツールの対応状態の調査

を見ることもあるのですが、意外にPyPiの Programming Language :: Python :: * はちゃんと書かれてないこともありました。新しい Pythonに対応するのは 3-6か月かかるものもあるので、最終的にはローカルのコンテナ環境などでインストールして対応状況を確認することになりました。

Python 3.10 から非推奨になり、Python 3.12 で distutils が廃止になっていたので、メンテされていないモジュールは使えないといったケースもあるかもしれません。

利用サービスのライフサイクルページ

クラウドサービスなどのRuntimeを使っている場合はそちらのバージョンの制限もあるため、参照します。

今回のメイン用途の AWS Lambda のような FaaS だとバージョン追従は早く

AWS Lambda が Python 3.13 のサポートを追加

にあるように2024年11月14日 には対応されていました。

また、一覧を見ると

Python 3.11 まではサポートを何度か延長していて、本来EOLを迎えているはずの Amazon Linux2 を使っていましした。

判断

判断時リリースされていなかった 3.14 と来年にはサポートが終わる 3.10 は対象から除外するとして、以下が候補でした。

  • 3.11
    • 一番手堅い(セキュリティサポート期間中盤)
    • 2年経過しないうちに次の対応が必要になる
    • AWS Lambda で Runtime が動いているベース OS が Amazon Linux 2 ※特別サポート延長期間
  • 3.12
    • 一旦修正は落ち着いた状態(セキュリティーサポート期間開始して割とすぐ)
  • 3.13
    • うまく動かない pip モジュールがあった(正確には使っている pip モジュールの依存先)

といった状態で、ほぼ 3.12 かなという状態でした。

今回は Lambda がメインだったので比較的単純に結論を出しましたが、他でも使っているサービスのバージョンと揃えたいという話があると話が少し複雑になります。

例えば Python 製の OSS のマネージドサービスの場合は、 OSS のアップデートの後のサービス取り込みが必要なので、更にタイムラグがあります。一例として Apache Airflow を利用した AWS のサービスの MWAA を挙げると直近の対応バージョンは以下になります。

Apache Airflow のバージョン Apache Airflow リリース日 Amazon MWAA 利用開始日 Python バージョン
v3.0.6 2025 年 8 月 29 日 2025 年 10 月 1 日 Python 3.12
v2.10.3 2024 年 11 月 4 日 2024 年 12 月 18 日 Python 3.11
v2.10.1 2024 年 9 月 5 日 2024 年 9 月 26 日 Python 3.11

(以下Python 3.11 なので略)

MWAAバージョン - AWS

こちらの用途がメインでバージョン揃えたいとなると 3.11 にしたかもしれません。

おわりに

2025-10-31 に EOL になった(当時はなる) Python 3.9 の移行先の検討にあたり、実施したことを記載しました。

サービスに直結していない管理機能の AWS Lambda などはなかなか機会がないとアップグレードされなかったり、(これはNode.JSでしたが) 一時期・一部分だけ AWS CDK で作られて、AWS CDK のバージョンに紐づいて Lambda が作られていたりとなかなか対応が漏れがちでした。

次回はより対象や対応方法を洗練させていきたいと思います。

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?