LambdaのProvisioned Concurrencyを設定してみた
目次
はじめに
こんにちは、スカイアーチHRソリューションズのsugawaraです。
今回はLambdaの小ネタとして、Provisioned Concurrency(プロビジョニングされた同時実行)の設定時にちょっとつまづいたことについて書いていきます。Lambdaのコンソール画面自体はよく見るため、どこで設定するのか自体はなんとなくわかっていましたが、いざやってみると「あれっ?」ってなってしまいました。
自分のようにまだ設定したことがない方には参考になるかと思われますので、最後まで読んでいってください!
Provisioned Concurrencyってなに?
そもそもProvisioned Concurrencyとは何か?それはLambdaがすぐに処理を実行できるようにするための機能です。通常、Lambdaはリクエストが来たときに初めて実行環境が起動されるため、初回リクエストのレスポンスに時間がかかることがあります。これを「コールドスタート」といいます。
下記はS3バケットからコードをダウンロードして実行するLambdaの実行時の流れの例です。実際にLambda handler内のコードを実行する前にいくつかのフェーズがあるため、初回実行はコールドスタートになりやすいです。そのため、リアルタイム性を重視する処理に利用する場合には注意が必要となります。なお、2回目以降の実行については、一定時間Lambdaの実行環境がウォームスタンバイされた状態になるため、迅速に処理が進みます。
このコールドスタートの対策として、Provisioned Concurrencyを設定することで、可能な限り低レイテンシーにすることが可能です。先ほどの図と同じ構成ですが、Provisioned Concurrencyを有効化することで、Lambdaの実行環境は初期化された状態で待機状態となります。このウォームアップ状態では、2桁のミリ秒レベルで応答することで、コールドスタートを大幅に改善することが可能です。
どうやって設定する?
Provisioned Concurrencyの設定がなぜ必要かわかったところで、今度は実際の設定方法について見ていきます。今回はLambdaのコンソール画面から設定していきます。
まずは検証用にLambdaを1つ作成します。下記は特にコードは初期設定のままで作成したものになります。
次に画面右側上の「アクション」から「新しいバージョンを発行」を選択します。
すると、新しいバージョンの説明を記載する画面が表示されます。オプションなので、書いても書かなくても問題はありません。今回はProvisioned Concurrencyのテストだとわかるように記載しました。
検証用Lambdaのバージョン1が作成されます。バージョンを作成することで、プロビジョニングされた同時実行の数を編集することができるようになります。なお、バージョン番号はv1からインクリメントされ、LambdaのARNの末尾に付加されます。バージョンは編集不可の読み取りのみで、編集ができるのは$LATESTのみとなります。
「編集」を押下し、設定画面に遷移します。プロビジョニングしたい同時実行数を指定して「保存」を押下すれば、設定は完了になります。
起動まで少し時間がかかります。ステータスが準備完了になったら完了です。
つまづいたところ
ちなみに実際に自分がはじめてProvisioned Concurrencyの設定をしようした際につまづいたのは、そもそもバージョン作成をしておらず、最新版のLambdaに設定しようとしていたところでした。
Lambdaのコンソール画面には、「設定」タブから「同時実行」を選択することで、予約された同時実行数をプロビジョニングされた同時実行(Provisioned Concurrency)の2つが設定することができます。
「追加」を押下すると、設定画面に遷移します。この画面から、エイリアスやバージョンが作成されていないと設定できないことがわかります。
自分のLambdaは最新版だからバージョン指定で$LATESTを指定すれば作成できると勘違いしていましたが、Provisioned Concurrencyは$LATESTには設定ができないと表示されてしまいます。
自分にとっての学びは、Provisioned Concurrencyは$LATESTには設定できず、バージョンもしくはエイリアスを作成する必要がある、ということでした。
注意点
これでProvisioned Concurrencyのありがたみと設定方法がわかりましたが、ここで注意点です。あくまでこの設定はコールドスタート対策のために予め一定数のLambdaをウォームスタンバイするものとなります。コンピュートリソースのため、当然コストがかかります。検証後は削除を忘れずに!
おわりに
今回はProvisioned Concurrencyがどういったものか、どう設定するのかを簡単にまとめてみました。実際の業務で利用するとなると、料金と性能を天秤にかけることもあるかと思います。利用する際には上記が参考になると幸いです。