パフォーマンスのチューニングと最適化テクニック

AWS Lambda によるサーバーレスアプリケーション

Claudio Canales

Senior DevOps Engineer

パフォーマンス=レイテンシ+コスト

  • 時間がコストになります。
  • パフォーマンスのチューニングはコスト最適化でもあります。
  • チューニング前に計測しましょう。
  • 変更は一度に一つずつ行いましょう。

ストップウォッチとコスト

AWS Lambda によるサーバーレスアプリケーション

時間の内訳

  • 初期化。
  • ハンドラーの実行。
  • 外部呼び出しの待機時間。

初期化・ハンドラー・外部呼び出しの比較

AWS Lambda によるサーバーレスアプリケーション

コールドスタートとウォームスタート

コールドスタート

  • Lambda は新しい環境を必要とします。

ウォームスタート

  • 既存の環境を再利用します。
  • ハンドラーはオーバーヘッドが少ない状態で実行されます。

コールドスタートとウォームスタートのタイムライン比較

AWS Lambda によるサーバーレスアプリケーション

初期化処理とハンドラー処理

  • インポートとグローバルセットアップは初期化時に実行されます。
  • 初期化処理が多いとコールドスタートが遅くなります。
  • 初期化時間はメトリクスに表示されます。

初期化処理とハンドラー処理の比較

AWS Lambda によるサーバーレスアプリケーション

ウォーム呼び出し間でクライアントを再利用する

  • 呼び出しのたびにクライアントを作成するとコストが重複します。
  • 環境がウォーム状態のときは再利用しましょう。

グローバルクライアントの再利用

AWS Lambda によるサーバーレスアプリケーション

コードパターン:ハンドラーの外でクライアントを定義する

import boto3
sts = boto3.client("sts")
def handler(event, context):
    return sts.get_caller_identity()

クライアントを一度だけ作成する

AWS Lambda によるサーバーレスアプリケーション

キャッシュを活用する

  • データはメモリに保持しましょう。
  • 小さな一時ファイルには /tmp を使いましょう。
  • キャッシュは慎重に行い、必要に応じて無効化しましょう。

メモリと /tmp のキャッシュ

AWS Lambda によるサーバーレスアプリケーション

依存関係を軽量に保つ

  • パッケージが大きいほどロードに時間がかかります。
  • 使用しない依存関係は削除しましょう。
  • 依存関係はできる限り小さく保ちましょう。

軽量パッケージと重量パッケージの比較

AWS Lambda によるサーバーレスアプリケーション

ログを適切に活用する

  • ログが多すぎるとコストが増え、ノイズになります。
  • 小さく構造化されたメッセージを心がけましょう。
  • 検索しやすい形式にしておくと、トレースやデバッグに役立ちます。

ログ量とシグナルの関係

AWS Lambda によるサーバーレスアプリケーション

外部呼び出しのオーバーヘッドを削減する

  • 外部サービスへの呼び出しは最も時間のかかる処理です。
  • 呼び出し回数を減らし、可能な場合はまとめて処理しましょう。
  • タイムアウトを設定し、障害時に処理が止まらないようにしましょう。

外部呼び出しの最小化

AWS Lambda によるサーバーレスアプリケーション

メモリは CPU にも影響する

  • CPU はメモリに比例してスケールします。
  • CPU バウンドなコードはより速く完了できます。
  • メモリを増やすと実行時間やコストを削減できる場合があります。
  • 最適な値をテストで確認しましょう。

メモリ→CPU→実行時間の短縮

AWS Lambda によるサーバーレスアプリケーション

コストの最適点を見つける

  • 最適なメモリ設定は総コストを最小化します。
  • コストはいったん下がり、その後横ばいか上昇します。
  • 変更後は再テストしましょう。

コストとメモリの関係曲線

AWS Lambda によるサーバーレスアプリケーション

CloudWatch で計測する

  • Duration と Init duration を追跡しましょう。
  • エラーとスロットリングを追跡しましょう。
  • テールレイテンシ(p95、p99)を監視しましょう。

CloudWatch のパフォーマンスメトリクス

AWS Lambda によるサーバーレスアプリケーション

コールドスタートを削減する

  • 初期化時に実行する処理を減らしましょう。
  • パッケージを軽量に保ちましょう。
  • コストのかかるセットアップは再利用しましょう。
  • プロビジョニング済み環境の利用を検討しましょう。

コールドスタート削減のチェックリスト

AWS Lambda によるサーバーレスアプリケーション

重要なポイント

  • 時間がどこに使われているかを把握しましょう。
  • クライアントを再利用し、キャッシュは慎重に行いましょう。
  • メモリは CPU と実行時間に影響します。
  • 変更のたびに計測しましょう。

パフォーマンスの重要なポイント

AWS Lambda によるサーバーレスアプリケーション

練習しましょう!

AWS Lambda によるサーバーレスアプリケーション

Preparing Video For Download...