Upgrade to Pro — share decks privately, control downloads, hide ads and more …

副作用のある Lambda でも Lambda Power Tuning は使えるのか / l...

副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects

JAWS-UG 茨城 #15 Japan AWS Jr.Champion & TopE LT大会 登壇資料です。

Avatar for koukihosaka

koukihosaka

July 22, 2026

Other Decks in Technology

Transcript

  1. 自己紹介 保坂 光希 NTT ME株式会社(NTT東日本グループ) ハマっているサービス: Lambda Durable Functions 表彰など:

    2026 AWS Community Builders (Serverless) 2026 Japan AWS Top Engineers (Services) 2025 - 2026 Japan All AWS Certifications Engineers ほうき星 𝕏 @H0ukiStar 2 / 20
  2. Lambda Power Tuning とは Lambda 関数のメモリ割り当てに関する特徴 • Lambda 関数に割り当てるメモリ量に応じて、CPU パワーも比例し増える

    • CPU パワーが増えると、処理内容によっては実行時間が減少する • Lambda 関数の課金はざっくりメモリ割り当て量×実行時間 Lambda Power Tuning が行ってくれること • 指定した Lambda 関数で、複数のメモリ割り当て設定を試し実行時間を計測 • 試したメモリ割り当て設定の中で、コスト最適(メモリ割り当て量×実行時間)と なる設定値をレコメンド • 各メモリ割り当て設定ごとに指定した回数実行(推奨10~100回)し平均値を算出 8 / 20
  3. 早速コスト最適化をしてみる 最適化対象の Lambda • IoT センサから1分ごとに送られてきた計測値(生値)を 1時間のタイムウィンドウごとの平均値にする処理 • Zabbix触ったことある人なら History

    → Trend への変換処理相当 • データ取得、保存先は DynamoDB Lambda Power Tuning の開始方法 • 作成されたステートマシンに以下を入力して実行 { "lambdaARN": "your-lambda-function-arn", "powerValues": [128, 256, 512, 1024], "num": 50, "payload": {} } # 最適化を実施する Lambda 関数のARN # 試行するメモリ設定 # メモリ設定ごとの試行回数 # 最適化を実施する Lambda 関数に渡す ペイロード 10 / 20
  4. 副作用のある Lambda 関数での注意点 Lambda Power Tuning のチューニング方法 • 各メモリ割り当て設定間は並列、同一メモリ設定内では指定した回数直列で チューニング対象の

    Lambda 関数を実行し、実行結果からコスト最適なメモリ割 り当て設定を探し出す チューニング 開始 メモリ:128MB 1回目 メモリ:128MB 2回目 ・・・ メモリ:128MB 10回目 メモリ:256MB 1回目 メモリ:256MB 2回目 ・・・ メモリ:256MB 10回目 ・・・ メモリ:1024MB 10回目 ・ ・ ・ メモリ:1024MB 1回目 メモリ:1024MB 2回目 チューニング 終了 12 / 20
  5. 副作用のある Lambda 関数での注意点 そのまま実行すると副作用が問題になる • チューニング対象の Lambda 関数は複数回・並列的に繰り返し実行される • DB

    更新・削除などがあると、各実行が互いに影響し、計測条件がそろわない 並列実行(複数回) DB 実行A 実行B 実行C 処理対象のレコードが 既にあります / ありません レコードA ・・・ レコードB ・・・ レコードC ・・・ ・・・ ・・・ 13 / 20
  6. 副作用のある Lambda 関数での注意点 そのまま実行すると副作用が問題になる • チューニング対象の Lambda 関数は複数回・並列的に繰り返し実行される • DB

    更新・削除などがあると、各実行が互いに影響し、計測条件がそろわない 並列実行(複数回) DB 実行A 実行B 実行C 各実行を独立させる レコードA ・・・ レコードB ・・・ レコードC ・・・ ・・・ ・・・ 14 / 20
  7. どうすればいいのか 各実行の前後で、テストデータを準備・削除する • チューニング対象の Lambda 関数の実行前後で、DB に対しユニークなテストレ コードの準備やお片付けを実施する チューニング 開始

    前 128MB 1回目 後 前 128MB 2回目 後 ・・・ 前 128MB 10回目 後 前 256MB 1回目 後 前 256MB 2回目 後 ・・・ 前 256MB 10回目 後 1024MB 後 2回目 ・・・ 前 1024MB 後 10回目 ・ ・ ・ 前 1024MB 後 1回目 前 チューニング 終了 15 / 20
  8. どうすればいいのか 前・後処理を指定し各実行ごとに DB 内のデータ準備・削除を行う • ステートマシンへ preProcessorARN / postProcessorARNとして 前処理・後処理を行う

    Lambda 関数を指定可能 { "lambdaARN": "your-lambda-function-arn", "powerValues": [128, 256, 512, 1024], "num": 50, "payload": {}, "preProcessorARN": "pre-process-lambda-function-arn", "postProcessorARN": "post-process-lambda-function-arn" } # 前処理を行う Lambda 関数のARN # 後処理を行う Lambda 関数のARN 注意:前処理の出力が、チューニング対象 Lambda の入力になる • チューニング対象の Lambda 関数がペイロードを受け取る必要がある場合、前処 理で出力する必要がある payloadの流れ: [payload = execute Pre-processor (payload)] results = execute Main Function (payload) [execute Post-processor (results)] 16 / 20
  9. まとめ Lambda Power Tuning は複数のメモリ割り当て設定 を自動で試しコスト最適なメモリを確認可能 preProcessorARN / postProcessorARN で

    前処理・後処理を指定することで 副作用のある Lambda 関数でも安全に利用可能 19 / 20