[アップデート] AWS Lambda でPython 3.12ランタイムがサポートされました

2023.12.15

こんにちは、つくぼしです!

LambdaランタイムでPython 3.12がサポートされました。

コンソールからLambdaのランタイムを確認すると、以下の通りPython 3.12が選べるようになってますね。

今回はAWS LambdaランタイムにおけるPython 3.12を紹介します!

アップデート内容

LambdaのランタイムでPython 3.12を選択する事で、Python 3.12における新機能が使用できるようになっております。

Python 3.12の新機能については、以下のPython公式ドキュメントに記載があります。

なおPython 3.12自体は、2023/10/2にリリースされています。

さらにLambdaランタイム自体にも、Python 3.12よりいくつかの変更点が加えられています。

  • Amazon Linux 2023の使用
  • 応答形式の変更
  • 正常なシャットダウンのための拡張機能の処理

詳しくは以下のAWS公式ブログをご覧ください。

動作確認

以下の「f文字列の形式定義」を参考に、LambdaでPython 3.12の新機能が想定通り動作するか確認してみます。

以下のLambdaコードを、以前のバージョンであるPython 3.11と、今回のPython 3.12それぞれで実施し、出力結果を比較します。

def lambda_handler(event, context):
	print(f"aはasciiコードで{hex(ord("a"))}")
	print(f'aはasciiコードで{hex(ord('a'))}')
	print(f"{f"{f"{"f文字列ネストし放題!"}"}"}")

ランタイムにPython 3.11を選択した場合、上記のコードを実行すると、function logに以下のようなエラーが出力されます。

START RequestId: 8f6256f7-f06d-4f07-b7c3-79f10640a06d Version: $LATEST
[ERROR] Runtime.UserCodeSyntaxError: Syntax error in module 'lambda_function': invalid character '!' (U+FF01) (lambda_function.py, line 4)
Traceback (most recent call last):
  File "/var/task/lambda_function.py" Line 4
    	  print(f"{f"{f"{"f文字列ネストし放題!"}"}"}")END RequestId: 8f6256f7-f06d-4f07-b7c3-79f10640a06d
REPORT RequestId: 8f6256f7-f06d-4f07-b7c3-79f10640a06d	Duration: 9.98 ms	Billed Duration: 10 ms	Memory Size: 128 MB	Max Memory Used: 40 MB	Init Duration: 143.84 ms

ランタイムにPython 3.12を選択した場合、上記のコードを実行すると、function logで以下の通り正常に実行される事が分かりました!

START RequestId: af5e39de-77f6-4cf3-8989-d760776067d8 Version: $LATEST
aはasciiコードで0x61
aはasciiコードで0x61
f文字列ネストし放題!
END RequestId: af5e39de-77f6-4cf3-8989-d760776067d8
REPORT RequestId: af5e39de-77f6-4cf3-8989-d760776067d8	Duration: 2.36 ms	Billed Duration: 3 ms	Memory Size: 128 MB	Max Memory Used: 33 MB	Init Duration: 127.33 ms

最後に

今回はAWS LambdaランタイムにおけるPython 3.12を紹介しました!

まだLambdaで以前のバージョンのランタイムを使用されている方は、EOLを踏まえて計画的に最新バージョンに切り替えていくと良いかと思います。

抜粋:Status of Python versions

以上、つくぼしでした!