AWS Lambda ZIPアーカイブのINITフェーズが2025年8月から課金されます

AWS Lambda ZIPアーカイブのINITフェーズが2025年8月から課金されます

.zipファイルアーカイブのLambda関数をオンデマンド実行する場合、2025年8月からINITフェーズの時間も課金されるようになります。
Clock Icon2025.05.08

AWS Lambdaの利用費が環境によっては2025年8月1日から増えるかもしれません。

.zipファイルアーカイブでオンデマンドのLambda関数を利用している場合、2025年8月からLambda関数の初期化(INIT)フェーズの時間も課金されるようになります。

この実行形態はLambdaの最初期から存在するため、多くの人が影響を受けるかもしれませんが、過度な心配は不要です。
このINIT処理は多くの本番環境ではLambda関数呼び出しの1%未満でしか発生しません。

https://aws.amazon.com/blogs/compute/aws-lambda-standardizes-billing-for-init-phase/

Lambda実行のINITフェーズと新課金ルールの関係

話を単純化するために、ZIP形式でSnapStartを利用しないLambda関数をオンデマンド実行する場合を考えます。

Lambda関数が呼び出されると、初期化(INIT/コールドスタート)→呼び出し(INVOKE)→シャットダウン(SHUTDOWN)というライフサイクルをたどります。

Overview-Successful-Invokes

引用元

以下は初めて呼ばれたLamba関数のログです

REPORT RequestId: 0c57cbc0-c360-42d6-bc90-9c8973347bb9
Duration: 13.51 ms
Billed Duration: 14 ms
Memory Size: 128 MB
Max Memory Used: 33 MB
Init Duration: 91.76 ms

※改行を付与

Duration(13.51 ms) はLambda関数のINVOKEフェーズの時間であり、現在の仕様ではこの数字を切り上げた Billed Duration(14 ms) を基準にLambdaの実行費用(Lambda-GB-Second)が算出されます。

2025年8月からは、Lambda関数の初期化に要した Init Duration(INITフェーズ) もBilled Duration に含まれるようになります。

Lambdaの利用費が大きく膨らみそうに思えるかもしれませんが、過度の心配は不要です。

Lambda関数を呼び出すときに、毎回初期化するとオーバーヘッドが大きいため、INIT済みの関数を使い回すことがあります。このおかげで、INIT処理はLambda関数呼び出し全体の1%未満に収まっています。[1]

以下は連続して呼ばれた2回目のLambda関数の実行ログです

REPORT RequestId: 0a9e5fc7-daee-4a6f-b3a2-d0aea608dd2a
Duration: 4.85 ms
Billed Duration: 5 ms
Memory Size: 128 MB
Max Memory Used: 34 MB	

※ 改行を付与

初期化済みのLambda関数を使いまわしているため、Init フェーズが含まれておらず、このような99%のLambda関数呼び出しは今回の仕様変更の影響を受けません。

利用費へのインパクトを試算

Lambdaのオンデマンドの利用費は主に以下で求まります

  • CPUアーキテクチャごとの単価 X 1GB-秒時間
  • 100万リクエストあたりの単価

今回は前者にフォーカスします。

利用明細では AWS Lambda APN1-Lambda-GB-Second のように出力される明細です。

新しい利用費の算出に必要なデータはCloudWatch Logsに出力されています。

CloudWatch Logs Insights(ログのインサイト)を用いて、実際に試算してみましょう。

ロググループのプリフィックスでLambda関数に絞ったり(/aws/lambda)、Lambda関数の気になるロググループに絞り込みます。

log-insights

Init フェーズの発生割合を確認

AWSの公式ブログではInitの発生割合は1%未満とありました。

当然ながら、実際のInit の発生頻度はワークロードによります。

次のクエリのRatioからInitの割合を確認しましょう

filter @type = "REPORT"
| fields @message like /Init Duration/ as coldStart
| stats 
  sum((@memorySize / 1000000 / 1024) * (@billedDuration / 1000)) as BilledGBs,
  count(*) as totalInvocation,
  sum(coldStart) as coldInvocation,
  coldInvocation/totalInvocation as Ratio

Ratio が0.1の場合、10%、0.01の場合、1%の頻度でInitが発生していることを意味します。

当然ながら、この値が小さいほど影響度が小さいとみなせます。

Init 時のみログに Init Duration が含まれることを利用しています。

利用費の増加率

REPORT RequestId: 0c57cbc0-c360-42d6-bc90-9c8973347bb9	Duration: 13.51 ms	Billed Duration: 14 ms	Memory Size: 128 MB	Max Memory Used: 33 MB	Init Duration: 91.76 ms	

繰り返しとなりますが、Billed Durationが現行仕様では Duration をベースにしていたのが Duration + Init Duration をベースとするように仕様変更されます。
さらに、Lambda関数によって個別にメモリを割り当てることができるため、複数のLambda関数をまたいでLambdaの利用費を試算する必要があります。

利用費の根拠となるメモリ割り当て量は Memory Size: 128 MB のようにログ出力されています。

以上から、ログを元に LambdaのGB-Second を次のようにして計算できます

  • 旧仕様 : GB-s = (Memory Size MB/ 1024 MB) * (Billded Duration ms/ 1000 ms)
  • 新仕様 : GB-s = (Memory Size MB/ 1024 MB) * ceil(Duration ms + Init Duration)/ 1000 ms)

以上を元に、Lambda利用費の増加率(billedRatio = 新仕様 / 旧仕様)を求めるクエリが次のものです。

filter @type = "REPORT" 
| fields @message like /Init Duration/ as coldStart
| stats 
  sum((@memorySize/1000000/1024) * (@billedDuration/1000)) as BilledGBs, 
  sum((@memorySize/1000000/1024) * ((ceil(@duration + @initDuration) - @billedDuration)/1000)) as UnbilledInitGBs, 
  (UnbilledInitGBs + BilledGBs)/BilledGBs as billedRatio,
  count(*) as totalInvocation,
  sum(coldStart) as coldInvocation,
  coldInvocation/totalInvocation as coldRatio

billedRatio は1以上を取るはずで1に近いほど影響度が少なく、例えば1.1 の場合は現在の課金額から10%の増加を意味します。coldRatioはコールドスタートの発生率を示し、これが低いほど全体への影響は小さくなります。

改善方法

コールドスタート時間を短縮することで、Initフェーズ課金時間の削減や、ひいては高速なレスポンスによってユーザー体験を向上させることが期待できます。

  • 初期化済みの状態をスナップショットとして保存する SnapStart機能
  • Lambda の初期化処理のコード改善
  • あらかじめプロビジニングする同時実行数の制御

などが考えられます。

Lambdaのほかの実行形式のINIT課金について

コンテナイメージでデプロイしていたり、プロビジョニングされた同時実行数の設定を利用している場合は関係あありません。

デプロイ形式 \ 実行方式 オンデマンド プロビジョンド
ZIP 2025年8月から新規に課金予定 既に課金対象
コンテナ 既に課金対象 既に課金対象

コンテナLambdaやプロビジョンド・コンカレンシーを利用している場合、従来からINITフェーズも課金されていました。
今回の仕様変更により、仕様の足並みを揃えるようになります。

最後に

ZipファイルアーカイブのLambda関数をオンデマンド実行する場合、2025年8月からINITフェーズの時間も課金されるようになります。

公式ブログでは、Init が発生する場合に限定して利用費の増加率をクエリで試算する方法が提示されていたため、そもそものInit が発生する割合と Init に限定しないGB-Second 増加率を求めるクエリを用意してみました。

多くのワークロードでは影響は小さいと考えられますが、今回紹介した分析方法で影響を評価し、特にコールドスタートが頻繁に発生するシステムや、初期化に時間がかかる関数を持つシステムでは、必要に応じて最適化を検討することをお勧めします。

参考

脚注
  1. According to an analysis of production Lambda workloads, INITs (cold starts) typically occur in under 1% of invocations—meaning code in the INIT phase may execute just once per hundred invocations. https://aws.amazon.com/blogs/compute/aws-lambda-standardizes-billing-for-init-phase/ ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.