ちょっと話題の記事

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

2019.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CX事業本部@大阪の岩田です。 先ほど聴講していたセッションでさらっとLambdaの新機能が発表されました。

Provisioned Concurrency

その名もProvisioned Concurrencyです!!

※先ほどAWS News Blogからも公式にアナウンスがありました。 New – Provisioned Concurrency for Lambda Functions

Lambdaのマネコンを開けば分かりますが、すでに東京リージョンで利用可能な状態です。

どんな機能??

この機能を利用することで初期化処理の完了したLambda実行環境を指定した同時実行数の分だけ事前にプールしておけるようです。同時実行数はLambdaのエイリアスもしくはバージョンに対して同時実行数を設定可能です。※latestに対しては設定できません。設定した同時実行数以上にLambdaの実行要求があった場合は、通常のLambdaと同様に一連の初期化処理が実行され、遅延の影響を受けることになります。

これまでLambdaのコールドスタート対策としてCloudWatch EventsからLambdaを定期実行するようなテクニックが知られていましたが、これからはProvisioned Concurrencyを設定するのが良いでしょう。

この機能を利用することでコールドスタートの発生頻度を抑えることができます。CloudWatch EventsからLambdaを定期実行する場合は、Lambda実行環境をいくつ確保しておくのか?といった制御が煩雑でしたが、Provisioned Concurrencyを利用すると最大900まで、同時起動させるLambda実行環境の数を制御できるようです。楽チンですね。

料金について

Provisioned Concurrencyを利用すると、通常のLambdaの利用料に加えて追加の料金が発生するため注意が必要です。

AWS Lambda Pricing

オハイオリージョンにおける通常のLambdaとProvisioned Concurrencyが有効化されたLambdaのコスト比較は以下のようになります。

課金項目 通常のLambda Provisioned Concurrencyが設定されたLambda
リクエスト 1,000,000リクエストあたり$0.20 1,000,000リクエストあたり$0.20
実行時間 GB-秒あたり$0.000016667 GB-秒あたり$0.000009722
Provisioned Concurrency - GB-秒あたり$0.000004167

追加で課金対象となる項目のProvisioned Concurrencyは以下の計算式で計算します。

  • Provisioned Concurrencyが有効化された秒数を計算
  • Provisioned concurrencyで設定した同時実行数 * Lambdaに割り当てたメモリ/1024MB でGB-秒を計算
  • Provisioned Concurrencyが有効化された時間を計算 * GB-秒 * $0.000016667

例えばメモリを1G割り当てたLambdaに同時実行数1,000を設定して2時間利用した場合Provisioned Concurrencyに対する課金は

  • Provisioned Concurrencyが有効化された時間... 7,200秒
  • 1,000(同時実行数) * 1024MB / 1024MB... 1,000GB-秒
  • 7200秒 * 1,000GB-秒 * $0.000004167... 約$30

の課金となります。さらにリクエストと実行時間に対する課金も発生します。

またProvisioned Concurrencyが有効になっているLambda関数には無料利用枠が適用されないので、その点も注意が必要です。

最後に

これまでコールドスタート対策としてCloudWatch EventsからLambdaを定期実行していたユースケースではProvisioned Concurrencyの設定を利用することで保守コストを下げることができそうです。注意点としてはProvisioned Concurrencyを利用することで追加コストがかかります。また、Provisioned Concurrencyで確保した同時実行数以上にLambdaの実行環境が同時起動した場合はコールドスタートの影響を受けることになるので、同時実行数の見積もりや負荷に応じた設定変更が重要になってきます。しっかりと特性を理解した上で利用していきましょう!

まだ発表されたばかりなので、これから色々と深掘りして調べていきます!!