はじめに
こんにちは。アプリケーションサービス部の柳田です。
Serverless Framework を使って、Lambda の Provisioned Concurrency を設定する機会があったため、設定手順と確認したことを記載します。
また、細かい説明は省略しますが「Serverless Framework」 と 「Lambda の Provisioned Concurrency」については以下の通りです。
-
- サーバーレスアプリケーションの構成管理やデプロイができるツール
Lambda の Provisioned Concurrency
- Lambda の実行環境を事前に必要数分ウォームアップしておく機能
- この機能を使うことで、実行環境立ち上げ等の初期処理(コールドスタート)を抑え、初期処理の時間を短縮することができます
- 参考:新機能 – Lambda 関数のプロビジョニングされた同時実行性
- Lambda の実行環境を事前に必要数分ウォームアップしておく機能
ざっくりまとめると、Serverless Framework というツールを使って、Lambda のコールドスタートを抑えるための設定方法を書いた記事です。
設定手順
1. serverless.yml に Provisioned Concurrency の設定
Serverless Framework の設定を記載する serverless.yml に provisionedConcurrency: (ウォームアップ台数)
を追記するだけです。
設定例
Provisioned Concurrency を 2 にしてみました
service: aws-python-project frameworkVersion: '2' provider: name: aws runtime: python3.8 lambdaHashingVersion: 20201221 functions: hello: handler: handler.hello provisionedConcurrency: 2
2. Serverless Framework でデプロイ
設定例の内容でデプロイ後に AWS マネジメントコンソールで設定を確認すると、期待通りに Provisioned Concurrency が 2 になっています。
Provisioned Concurrency を設定する際には、Lambda 関数の特定バージョン または エイリアスに対して設定する必要があります。
Serverless Framework でデプロイすると自動的に provisioned というエイリアスに対して、Provisioned Concurrency が設定されていることが分かります。少し調べてみましたが、serverless.yml の設定ではエイリアス名の指定はできなさそうでした。
また、Serverless Framework でデプロイを繰り返すと Lambda 関数のバージョンがどんどん上がっていくのですが、最新のバージョンに対してエイリアスが設定されるようになっていました。
まとめ
serverless.yml に1行追加するだけだったので楽ちんでした。Serverless Framework 便利。
なお、Lambda 自体は従量課金制ですが、Provisioned Concurrency は有効化してからの時間単位で料金が発生します。その点ご留意ください。
以下ページの料金例が分かりやすいです。