AWSは先頃、同社のFaaS(Function as a Service)であるLambdaのマネージドランタイムとコンテナベースイメージの両方でPython 3.9をサポートすることを発表した。これによってPython 3.9によるAWS Lambdaの記述が可能になり、TLS 1.3のサポート、新しい文字列とディクショナリの操作、強化されたタイムゾーンのサポートといった新機能が利用できるようになる。
AWS Lambdaはランタイムの使用を通じて、JavaやRuby、Pythonといった複数の言語をサポートする。また、コンテナイメージとして定義された関数では、コンテナイメージの生成時にランタイム(Python 3.9ベースイメージ)とLinuxディストリビューションを選択することができる。これまでLambdaでは、Python 3.8がサポートされていた。今回、Python 3.9のサポートが導入されることによって、開発者は、そのランタイムによるメリットを享受することが可能になる。
AWS Management Console、AWS CLI、AWS SDK、AWS Serverless Application Mode (AWS SAM)、AWS Cloud Development Kit (AWS CDK)などで、Python 3.9ランタイムを使用したAWS Lambda関数の開発が可能になる。Python 3.9を使用したLambda関数をデプロイする場合は、Lambdaコンソールを使用して、Python 3.9ランタイムを選択した上でコードをアップロードすればよい。あるいは、AWS CLI、AWS Serverless Application Model (AWS SAM)、AWS Cloud Formationを使うこともできる。
出典: https://aws.amazon.com/blogs/compute/python-3-9-runtime-now-available-in-aws-lambda/
Python 3.9には、コードを一切変更することなくメリットを得ることのできる、2つの大きなパフォーマンス改善がある。AWS ServerlessのプリンシパルデベロッパアドボケートであるJames Beswick氏が、AWS LambdaのPython 3.9サポートに関する先日のAWS Computeのブログ記事の中で、次のように説明している。
一つ目が影響するのは、Pythonの組み込みデータ構造であるtuple、list、clist、set、frozensetを使用するコードです。Python 3.9では、これらは内部的にvectorcallプロトコルを使用します。これによって、一時使用されるオブジェクトの数が少なくなり、関数コールを高速化することが可能になります。二つ目に、Python 3.9では、以前のバージョンよりパフォーマンスの向上した新パーザを使用しています。
さらに、Lambdaサービスで、ハンドラの前に_init.pyが実行されるようになった。これにより、エラーを記録するための機会が拡張される。
FaaSの世界でAWSと競合するMicrosoftとGoogleは、それぞれのサービスですでにPython 3.9をサポートしている — Python 3.9サポートはAzure Functionのプレビュー版に含まれており、Google Functionsでは一般提供(GA)済である。
最後に、Python 3.9ランタイムは、Chinaリージョン以外の、Lambdaが使用可能なすべてのリージョンで使用することができる。