LoginSignup
18
14

More than 3 years have passed since last update.

Serverless Frameworkで行うLambdaのコールドスタート対策

Posted at

概要

AWS Lambdaで発生するコールドスタートを軽減させる為の対策を実施します。

以前私が書いた、Serverless FrameworkでLambdaのコールドスタート対策を行う の2020年版です。

Serverless FrameworkでLambdaのコールドスタート対策を行う は少し前までのベストプラクティスでしたが今後はこの記事の方法が推奨されるようになってくると思われます。

対象読者

Lambdaのコールドスタートについて

こちら に書いてある通りです。

コールドスタートとは実行可能なLambdaコンテナが1つもない時にLambdaの実行に時間がかかる現象を指します。

今までのコールドスタート対策

今まではすぐに実行可能なLambdaコンテナが消えないように定期的にLambdaを実行してあげるという方法が主流でした。

以前私が書いた、Serverless FrameworkでLambdaのコールドスタート対策を行う でもその方法を採用しています。

これからのコールドスタート対策

2019年の終わり頃、AWS LambdaにProvisioned Concurrencyという設定項目が追加されました。

マネジメントコンソール上だと「プロビジョニングされた同時実行の設定」という部分です。

これを設定しておくと実行可能なLambdaコンテナが常に存在している状態を作る事が出来ます。

(参考)[速報]コールドスタート対策のLambda定期実行とサヨナラ!! LambdaにProvisioned Concurrencyの設定が追加されました

Serverless Framework でのProvisioned Concurrency設定方法

Serverlessの公式ブログ に書かれている通りです。

serverless.ymlfunctionsprovisionedConcurrency を設定するだけです。
非常に簡単ですね!

serverless.yml
functions:
  render:
    handler: dist/server/lambda.render
    events:
      - http:
          path: '/'
          method: get
      - http:
          path: '{proxy+}'
          method: get
      - http:
          path: '/api/{proxy+}'
          method: any
    provisionedConcurrency: 2

この設定だと常に2つのコンテナが待機している状態になります。
あと Serverless Framework のバージョンは最新にしておく事をオススメします。(古いバージョンだと上記の設定に対応していない)

注意

serverless-plugin-warmup から乗り換える際の注意点

こちらの記事 で紹介されている serverless-plugin-warmup から乗り換えた際にデプロイが完了するまで、Lambdaが正常に起動しなくなりました。

運用中のサービスに適応する場合は注意が必要ですね。

料金が高くなる可能性

provisionedConcurrency の設定を多くすれば安定した状態になりますがその分料金が高くなります。
運用しながら最適値を見つける必要があります。

おわりに

provisionedConcurrencyがリリースされた事でよりコールドスタート対策がより簡単になりました。

ただし料金には注意ですね。

ここまで読んで頂きありがとうございます。

18
14
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
18
14