Yuta NakataのBlog

Python / AWS / ITについて役立つ情報を発信します

Python / SnapStartをAWS Lambdaやってみた

はじめに・背景

2024/11/18にAWS LambdaのPythonにおけるSnapStartの有効化がGA(一般提供開始)になりました。

Pythonの最大の欠点である速度の改善につながるUpdateになります。

本記事では、CloudFormation, Pythonを用いて実際に実装してみようと思います。

ソースコードは下記にあります。

github.com

やってみたこと

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のバージョンごとに課金がなされるため、不必要なコスト増につながる可能性もあるため、上手に使っていきたいところです。