はじめに・背景
2024/11/18にAWS LambdaのPythonにおけるSnapStartの有効化がGA(一般提供開始)になりました。
Pythonの最大の欠点である速度の改善につながるUpdateになります。
本記事では、CloudFormation, Pythonを用いて実際に実装してみようと思います。
ソースコードは下記にあります。
やってみたこと
CloudFormationを用いてSnapStartが有効化されたLambdaを作成します。
注意点としては、Javaとは異なりLambdaの各バージョンで課金がされます。有効化する場合はバージョンを削除する実装も合わせて必要です。この記事ではその実装も合わせて行います。
結果
下記のCloudFormationでデプロイができるようになります。
AWSTemplateFormatVersion: 2010-09-09 Transform: - AWS::Serverless-2016-10-31 - AWS::LanguageExtensions Globals: Function: Architectures: - arm64 Runtime: python3.12 Handler: app.lambda_function.lambda_handler Timeout: 30 Resources: Function: Type: AWS::Serverless::Function DeletionPolicy: Delete # 古いバージョンを削除 Properties: MemorySize: 128 CodeUri: src/data # SnapStart用に以下の内容を追加 AutoPublishAlias: SnapStart SnapStart: ApplyOn: PublishedVersions
SnapStartを有効化する部分としては、
AutoPublishAlias: SnapStart SnapStart: ApplyOn: PublishedVersions
が該当します。
古いバージョンを削除する方法としては
DeletionPolicy: Delete # 古いバージョンを削除
の追加が必要です。
まとめ
今回は、AWS LambdaのSnapStartをPython・CloudFormationを用いて実装してみました。
Javaとは異なり、Pythonの場合は若干のコスト増がありますが、速度改善が図れるのでAPI等レスポンス速度が求められる場面では積極的に有効化していきたいところです。
一方で、Pythonの場合Lambdaのバージョンごとに課金がなされるため、不必要なコスト増につながる可能性もあるため、上手に使っていきたいところです。