Slide 1

Slide 1 text

2025/05/10 George Yoshida Serverless Meetup Fukuoka #5 2025年8⽉から始まる AWS LambdaのINITフェーズ課⾦

Slide 2

Slide 2 text

⾃⼰紹介 2 ● 名前 ○ George Yoshida ● ブログ ○ https://dev.classmethod.jp/author/quiver/ ● 部署 ○ クラスメソッド福岡オフィス ソリューションアーキテクト ● AWS Community Builder 2025 : Serverless https://dev.classmethod.jp/articles/aws-lambda-zip-ondemand-init-billing-change/

Slide 3

Slide 3 text

AWS LambdaのINIT課⾦の標準化 3 ● 2025年8⽉1⽇から仕様が変わる ● オンデマンド呼び出しのZIPパッケージが特に影響を受ける https://aws.amazon.com/blogs/compute/aws-lambda-standardizes-billing-for-init-phase/

Slide 4

Slide 4 text

影響を受けるのは昔ながらのLambda 4 デプロイ形式\実行方式 オンデマンド実行 プロビジョニング済み同時実行 ZIP 2025年8月から新規に課金予定 既に課金対象 カスタムランタイム 既に課金対象 既に課金対象 コンテナ 既に課金対象 既に課金対象

Slide 5

Slide 5 text

2025年8⽉からのZipオンデマンド実⾏の課⾦仕様変更 5 ● 前提 ○ Lambdaの実⾏はメモリスペックx時間で課⾦される(GB-Second) ※ ● 変更内容 ○ Lambda関数の初期化(INITフェーズ)時間も課⾦対象となる ● 影響を調査 ○ プロダクション環境のINITは1%未満(AWS談)で影響は軽微なはず ○ CloudWatch Logs InsightsクエリでLambdaのログから念のため調査 ● 改善策 ○ コールドスタート対策と同様 ※ リクエスト数などでも課⾦されます

Slide 6

Slide 6 text

Lambdaライフサイクル観点の課⾦仕様変更 6

Slide 7

Slide 7 text

Lambdaのライフサイクル 7 ● INITフェーズは名前の通り初期化処理 ● INVOKEは実処理。Lambdaのタイムアウト設定はこの処理時間を制御 ● INVOKEが連続しているように、オーバーヘッドのかかる初期化した環境 を使い回すことがある。INITは毎回発⽣するわけではない https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html

Slide 8

Slide 8 text

INITフェーズ(コールドスタート)も課⾦されるようになる 8 https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html ※ 2025/05/10時点 ● INITフェーズを伴ってレイテンシーが増えるのが「コールドスタート」 ● 2025/05/10時点では、このフェーズは課⾦されないと明記

Slide 9

Slide 9 text

影響範囲を調べるには?

Slide 10

Slide 10 text

影響範囲を調べるには? 10 ● LambdaのCloudWatch Logsに課⾦算出根拠のデータは出⼒済み ● CloudWatch Logs Insightsクエリで試算可能

Slide 11

Slide 11 text

CloudWatch Logsのログ出⼒から新旧課⾦仕様を計算 11 Billed Duration =切り上げ(Duration) REPORT RequestId: xxxxx Duration: 250.06 ms Billed Duration: 251 ms Memory Size: 1024 MB Max Memory Used: 350 MB Init Duration: 100.77 ms Billed Duration = 切り上げ(Init Duration + Duration) REPORT RequestId: xxxxx Duration: 250.06 ms Billed Duration: 351 ms Memory Size: 1024 MB Max Memory Used: 350 MB Init Duration: 100.77 ms 現在の仕様 新しい仕様

Slide 12

Slide 12 text

CloudWatch Logs Insightsクエリで探索的調査 12 ● CloudWatch Logs Insightsを使うと、期間やLambda関数の粒度をフィル タして横断的に分析可能 ● 推測せずに実際のワークロードを元に計測するのが良い

Slide 13

Slide 13 text

CloudWatch Logs Insightsクエリ:INITフェーズ発⽣率 13 INITフェーズの発生率(Ratio)を次のクエリで確認 filter @type = "REPORT" | stats count(*) as totalInvocation, count(@initDuration) as coldInvocation, coldInvocation/totalInvocation as Ratio ● totalInvocation : 呼び出された回数 ● coldInvocation : INITフェーズが発⽣した回数 ● Ratio : INITフェーズの発⽣率(0.0〜1.0)

Slide 14

Slide 14 text

CloudWatch Logs Insightsクエリ:利⽤費の増加率 14 可変な呼び出し時のメモリサイズを考慮してGB-secondを計算 filter @type = "REPORT" | stats sum((@memorySize/1000000/1024) * (@billedDuration/1000)) as oldBilledGBs, sum((@memorySize/1000000/1024) * (@initDuration/1000)) as newBilledGBs, (oldBilledGBs + newBilledGBs)/oldBilledGBs as billedRatio ● oldBilledGBs : 旧仕様で課⾦されるINVOKEフェーズだけの GB-second ● newBilledGBs : 新仕様で課⾦されるINITフェーズだけのGB-second ● billedRatio : 新仕様での課⾦額増加率

Slide 15

Slide 15 text

CloudWatch Logs Insightsクエリ:1クエリにまとめる 15 INITの発生率と新旧の金額の違いを1クエリにまとめる filter @type = "REPORT" | stats sum((@memorySize/1000000/1024) * (@billedDuration/1000)) as oldBilledGBs, sum((@memorySize/1000000/1024) * (@initDuration/1000)) as newBilledGBs, (oldBilledGBs + newBilledGBs)/oldBilledGBs as billedRatio, count(*) as totalInvocation, count(@initDuration) as coldInvocation, coldInvocation/totalInvocation as Ratio

Slide 16

Slide 16 text

INITフェーズ課⾦の影響は多くの環境で軽微 16 ● 仕様変更されるGB-Secondのミクロな視点でなく、Lambdaサービス、 AWSアカウント全体のマクロな視点で利⽤費への影響を判断 ○ Lambdaはサーバーレスサービス ○ AWS利⽤費全体に占めるLambdaの利⽤費が⽀配的な環境はレア ○ Lambdaの利⽤費は、実⾏時間以外にもログ出⼒や通信などでも発⽣ ● マクロな視点でINITフェーズが改善に値するか検討しよう

Slide 17

Slide 17 text

INITフェーズを短くするアプローチ = コールドスタート問題 17 ● 初期化済みの状態をスナップショットとして保存する SnapStart機能 ● Lambda の初期化処理のコード改善 ● プロビジョニング済み同時実⾏数の制御

Slide 18

Slide 18 text

まとめ

Slide 19

Slide 19 text

2025年8⽉からのZipオンデマンド実⾏の課⾦仕様変更 19 ● 前提 ○ Lambdaの実⾏はメモリスペックx時間で課⾦ ● 変更内容 ○ Lambda関数の初期化時間も課⾦対象 ● 影響を調査 ○ 多くの環境で初期化の発⽣率は低く、AWS利 ⽤費全体へのインパクトは軽微なはず ○ CloudWatch Logs Insightsで念のため調査 ● 改善策 ○ コールドスタート対策を参考にする 解説ブログ https://dev.classmethod.jp/articles/aws-lambda-zip-ondemand-init-billing-change/

Slide 20

Slide 20 text

No content