概要
AWS Lambdaで発生するコールドスタートを軽減させる為の対策を実施します。
以前私が書いた、Serverless FrameworkでLambdaのコールドスタート対策を行う の2020年版です。
Serverless FrameworkでLambdaのコールドスタート対策を行う は少し前までのベストプラクティスでしたが今後はこの記事の方法が推奨されるようになってくると思われます。
対象読者
- Serverless Framework でAWS 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.yml
の functions
→ provisionedConcurrency
を設定するだけです。
非常に簡単ですね!
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がリリースされた事でよりコールドスタート対策がより簡単になりました。
ただし料金には注意ですね。
ここまで読んで頂きありがとうございます。