AWS Lambdaメトリクスとは

AWS Lambdaメトリクスは、サーバーレス関数のパフォーマンス、健全性、コストを包括的に把握するための重要な指標群です。これらのメトリクスを活用することで、アプリケーションの動作を最適化し、潜在的な問題を早期に発見し、運用コストを削減することができます。

AWS Lambdaアーキテクチャとメトリクスフロー

AWS Lambdaアーキテクチャとメトリクスフロー コンピュート・アプリケーションに関するAWS技術アーキテクチャを視覚的に表現した図。 イベントソース API Gateway S3 EventBridge Lambda 関数 コールドスタート 関数実行 エラーハンドリング CloudWatch Logs CloudWatch Metrics X-Ray トレース セグメント サービスマップ 呼び出し イベント スケジュール ログ メトリクス トレース メトリクスデータフロー Lambda → CloudWatch → アラーム → 通知

主要なInvocationメトリクス

Invocations(呼び出し回数)

関数が実行された回数

📊

Lambda関数が呼び出された回数を示します。API Gateway、S3イベント、EventBridgeスケジュールなど、あらゆるソースからの呼び出しがカウントされます。

📈 重要度: 最高
🔢 単位: Count
⏱️ 統計: Sum

Errors(エラー)

関数の実行中に発生したエラー

関数の実行中に発生したエラーの数を示します。コード内の例外、タイムアウト、権限の問題などが含まれます。エラー率(Errors/Invocations)は通常、5%未満に保つべきです。

📈 重要度: 最高
🔢 単位: Count
⏱️ 統計: Sum

Duration(実行時間)

コード実行に要した時間

⏱️

関数がコードの実行に費やした時間をミリ秒単位で測定します。初期化時間は含まれず、純粋なコード実行時間のみです。タイムアウト制限(最大15分)に近づいていないかを監視します。

📈 重要度: 高
🔢 単位: ミリ秒
⏱️ 統計: Average, Max, Min

Throttles(スロットル)

制限により拒否された呼び出し

🛑

同時実行の制限によりスロットルされた呼び出しの数です。デフォルトでは、AWSアカウントごとにリージョンあたり1,000の同時実行数の制限があります。スロットルが発生すると、クライアントは429エラーを受け取ります。

📈 重要度: 高
🔢 単位: Count
⏱️ 統計: Sum

ConcurrentExecutions(同時実行数)

同時に実行されているインスタンス数

🔄

特定の時点で同時に実行されているLambda関数のインスタンス数を示します。予約済み同時実行数を設定している場合は、その使用率を監視します。高負荷時にスロットルが発生していないか確認するために重要です。

📈 重要度: 中
🔢 単位: Count
⏱️ 統計: Average, Max

IteratorAge(イテレータ年齢)

ストリームベースの処理遅延

ストリームベースの呼び出し(KinesisやDynamoDB Streams)において、レコードがストリームに追加されてからLambdaで処理されるまでの時間です。この値が大きいと、ストリーム処理に遅延が生じていることを示します。

📈 重要度: 中
🔢 単位: ミリ秒
⏱️ 統計: Maximum

DeadLetterErrors(DLQエラー)

DLQへの送信失敗

💀

Lambda関数がデッドレターキュー(DLQ)にイベントを送信できなかった回数を示します。これは通常、DLQの設定ミスやアクセス権限の問題を示唆しています。

📈 重要度: 高
🔢 単位: Count
⏱️ 統計: Sum

コスト分析指標

リソース使用量とコスト最適化

💰

Lambda関数の実行に関連するコストは、呼び出し回数、実行時間、メモリ使用量の組み合わせで決まります。これらのメトリクスを組み合わせて分析することで、コスト最適化の機会を特定できます。

📈 重要度: 高
💵 単位: USD

Invocationメトリクスの活用シナリオ

パフォーマンス最適化

Durationメトリクスを分析して、実行時間が長い関数を特定します。メモリ割り当ての調整、コードの最適化、外部依存関係の削減などの対策を講じることができます。

💰

コスト削減

呼び出し回数、実行時間、メモリ使用量を分析して、コストが高い関数を特定します。コードの最適化、不要な呼び出しの削減、またはStepFunctionsを使用したオーケストレーションなどの対策を検討できます。

📊

リソース計画

ConcurrentExecutionsメトリクスを分析して、同時実行のピークを特定します。この情報を基に、予約済み同時実行数を適切に設定し、スロットルを防止しながらコストを最適化できます。

🚨

障害検知と対応

Errorsメトリクスにアラームを設定して、エラー率が急増した場合に迅速に通知を受け取ります。CloudWatchのログと組み合わせて、根本原因を特定し、迅速に対応できます。

📈

キャパシティ管理

Throttlesメトリクスを監視して、キャパシティの制限に達している関数を特定します。同時実行制限の引き上げをリクエストするか、関数のアーキテクチャを見直して負荷を分散させることができます。

⏱️

イベント処理遅延の監視

IteratorAgeメトリクスを使用して、ストリームベースのイベント処理の遅延を監視します。処理が遅れている場合は、関数のパフォーマンスを改善するか、シャードの数を増やして並列処理を強化できます。

効果的なアラート設定

エラー率アラート

高優先度

Lambda関数のエラー率が5%を超えた場合に通知を受け取るアラームを設定します。エラー率は、Errors/Invocationsの比率として計算されます。

CloudFormation (YAML)
Resources:
  ErrorRateAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: LambdaErrorRateExceeded
      AlarmDescription: Lambda関数のエラー率が5%を超えました
      MetricName: Errors
      Namespace: AWS/Lambda
      Statistic: Sum
      Period: 60
      EvaluationPeriods: 5
      Threshold: 5
      ComparisonOperator: GreaterThanThreshold
      TreatMissingData: notBreaching
      Dimensions:
        - Name: FunctionName
          Value: !Ref MyLambdaFunction
      AlarmActions:
        - !Ref AlarmTopic

スロットルアラート

中優先度

Lambda関数がスロットルされ始めた場合に通知を受け取るアラームを設定します。これにより、同時実行制限の調整が必要かどうかを判断できます。

AWS CLI
aws cloudwatch put-metric-alarm \
  --alarm-name LambdaThrottlesDetected \
  --alarm-description "Lambda関数がスロットルされています" \
  --metric-name Throttles \
  --namespace AWS/Lambda \
  --statistic Sum \
  --period 60 \
  --evaluation-periods 1 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --dimensions Name=FunctionName,Value=MyLambdaFunction \
  --alarm-actions arn:aws:sns:region:account-id:AlarmTopic

実行時間アラート

中優先度

Lambda関数の実行時間がタイムアウト制限に近づいている場合に通知を受け取るアラームを設定します。タイムアウトに近い関数は、タイムアウトエラーのリスクがあります。

AWS CDK (TypeScript)
import * as cdk from 'aws-cdk-lib';
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import { Construct } from 'constructs';

export class LambdaAlarmsStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const fn = lambda.Function.fromFunctionName(
      this,
      'ExistingFunction',
      'MyLambdaFunction'
    );

    // 関数のタイムアウトの80%に近づいた場合にアラームを発生
    const timeoutInMs = 3000; // 関数のタイムアウト(例: 3秒)
    const durationAlarm = new cloudwatch.Alarm(this, 'DurationAlarm', {
      alarmName: 'LambdaDurationNearTimeout',
      alarmDescription: 'Lambda関数の実行時間がタイムアウトに近づいています',
      metric: fn.metricDuration(),
      threshold: timeoutInMs * 0.8, // タイムアウトの80%
      evaluationPeriods: 1,
      comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
    });
  }
}

効果的なダッシュボード設計

AWS Lambda メトリクスダッシュボード

総呼び出し回数
432,567
+8.2% vs 前日
エラー率
2.1%
-0.3% vs 前日
平均実行時間
245ms
-12ms vs 前日
時間別呼び出し回数
時間別エラー数
同時実行数
実行時間(p50, p90, p99)

メトリクスに基づく最適化戦略

1

コールドスタート最適化

Durationメトリクスに大きなばらつきがある場合、コールドスタートが原因である可能性があります。以下の対策を検討してください:

  • Provisioned Concurrency(予備容量)を設定して、常に温かいインスタンスを用意しておく
  • 関数のコードサイズを小さくして初期化時間を短縮する(依存ライブラリの最小化)
  • メモリ割り当てを増やして、CPUパワーも比例して増加させる
  • 初期化コードと実行コードを分離し、初期化部分を最適化する
2

スロットル対策

Throttlesメトリクスが0より大きい場合、同時実行の制限に達している可能性があります。以下の対策を検討してください:

  • 重要な関数に予約済み同時実行数を設定して、リソースを確保する
  • バッチ処理を複数の小さなバッチに分割して、同時実行数のピークを減らす
  • ワークロードを複数のリージョンに分散させる
  • AWS Support経由で同時実行制限の引き上げをリクエストする
  • SQSキューを導入して負荷を平準化する
3

エラー率の削減

Errorsメトリクスが高い場合、関数の信頼性に問題がある可能性があります。以下の対策を検討してください:

  • 包括的な例外処理を実装して、予期しないエラーをキャッチする
  • 外部サービスへの呼び出しに再試行メカニズムを導入する
  • リソース不足(メモリ、タイムアウト)によるエラーを特定し、適切に対処する
  • デッドレターキュー(DLQ)を設定して、処理に失敗したイベントを保存する
  • 段階的なデプロイとカナリアテストを導入して、新しいバージョンのエラーを早期に検出する
4

コスト最適化

Invocations、Duration、メモリ設定を組み合わせて分析し、コストを最適化します:

  • 高頻度で呼び出される関数は、実行時間を短縮してコストを削減する
  • メモリと実行時間のトレードオフを分析し、最もコスト効率の良い設定を見つける
  • 不要な呼び出しを特定し削減する(例:ポーリング頻度の最適化)
  • Computing SavingsPlanを検討して、長期的なコスト削減を図る
  • AWS LambdaのPower Tuningツールを使用して、最適なメモリ設定を見つける
5

ストリーム処理の最適化

IteratorAgeメトリクスが高い場合、ストリーム処理に遅延が生じています。以下の対策を検討してください:

  • バッチサイズを最適化して、各呼び出しで処理するレコード数を調整する
  • シャード数を増やして並列処理の能力を向上させる
  • 関数のパフォーマンスを改善して、レコード処理速度を上げる
  • 処理に時間のかかるタスクを非同期化して、メインの処理フローから切り離す

実世界のケーススタディ

Eコマースアプリケーション
IoTデータ処理
データ処理パイプライン

高トラフィックEコマースサイトの最適化

Retail Inc. の事例

大手オンラインリテーラーRetail Inc.は、セール期間中に商品カタログAPIのレスポンス時間が遅延し、スロットルが発生するという問題に直面していました。AWS Lambdaのメトリクスを分析することで、問題の根本原因を特定し、効果的な解決策を実装しました。

スロットル削減
99.8%
レスポンス時間短縮
78%
コスト削減
42%

実装した解決策:

  • 商品カタログAPIに予約済み同時実行数を設定
  • DynamoDBからのデータ取得を最適化
  • 人気商品のデータをElastiCacheにキャッシュ
  • セール期間中は自動的に同時実行数を引き上げるスケールメカニズムを実装

これらの最適化により、サイトは年末セールの記録的なトラフィックを問題なく処理し、顧客満足度を大幅に向上させることができました。

大規模IoTデータ処理システムの最適化

Smart City Solutions の事例

スマートシティソリューションプロバイダーのSmart City Solutionsは、数十万のセンサーからのデータを処理するLambda関数でIteratorAgeの増加とエラー率の上昇という問題に直面していました。

処理遅延削減
94%
エラー率削減
99.2%
処理能力向上
5倍

実装した解決策:

  • Kinesis Data Streamsのシャード数を増加
  • Lambda関数のバッチサイズを最適化
  • データ処理ロジックを改善してメモリ使用量を削減
  • 重要ではないデータの処理を別の低優先度キューに移動
  • 異常検知アルゴリズムをエッジで実行し、クラウドに送信するデータ量を削減

大規模データ処理パイプラインの最適化

Analytics Corp. の事例

分析サービスプロバイダーのAnalytics Corp.は、数TBのデータを毎日処理するLambdaベースのETLパイプラインで、タイムアウトエラーとコスト増加の問題に直面していました。

処理時間短縮
68%
コスト削減
57%
データ鮮度向上
3.5時間

実装した解決策:

  • 大規模処理をLambdaからGlue ETLジョブに移行
  • Step Functionsを導入してワークフローを制御
  • データをS3バケットで効率的にパーティショニング
  • 日中のバッチ処理を複数の小さなジョブに分割
  • Lambda関数のメモリを最適化して実行時間を短縮

メトリクスによるトラブルシューティング

エラー率が突然上昇した場合

症状: Errorsメトリクスが急激に上昇している

可能性のある原因:

  • 最近のデプロイによるコードエラー
  • 外部依存サービスの障害
  • 認証情報やアクセス権限の期限切れ
  • 入力データの形式変更

調査手順:

  1. CloudWatchログで最新のエラーメッセージを確認
  2. X-Rayトレースを調査して、障害箇所を特定
  3. 最近のデプロイと変更を確認
  4. 外部依存サービスのステータスを確認

解決策:

  • 問題のあるデプロイをロールバック
  • IAM権限を更新
  • フォールバックメカニズムやサーキットブレーカーを実装
  • 入力バリデーションを強化
スロットルが頻繁に発生する場合

症状: Throttlesメトリクスが0より大きい

可能性のある原因:

  • アカウントレベルの同時実行制限に到達
  • リージョンレベルの同時実行制限に到達
  • 関数レベルの予約済み同時実行制限に到達
  • 急激なトラフィック増加

調査手順:

  1. ConcurrentExecutionsメトリクスを確認して、使用状況を分析
  2. CloudWatchログで429エラーを確認
  3. トラフィックパターンの急な変化を特定

解決策:

  • AWS Supportを通じて同時実行制限の引き上げをリクエスト
  • 重要な関数に予約済み同時実行数を設定
  • SQSキューを導入して負荷を平準化
  • 複数のリージョンにワークロードを分散
実行時間が大幅に増加した場合

症状: Durationメトリクスが急激に増加している

可能性のある原因:

  • 外部依存サービスのレスポンス遅延
  • データ量の増加
  • リソース競合(メモリ不足など)
  • コードの変更による効率低下

調査手順:

  1. X-Rayトレースで遅延部分を特定
  2. 最近のデプロイと変更を確認
  3. 処理データ量の変化を分析
  4. ログから詳細な実行時間情報を取得

解決策:

  • 関数のメモリ割り当てを増やす
  • 外部依存サービスへの接続タイムアウトを設定
  • 一度に処理するデータ量を制限
  • コードのプロファイリングと最適化
ストリーム処理に遅延がある場合

症状: IteratorAgeメトリクスが増加している

可能性のある原因:

  • Lambda関数の処理能力がストリームデータレートに追いつかない
  • エラーによる処理の遅延
  • シャード数が不足
  • バッチサイズが最適でない

調査手順:

  1. ストリームの入力レートとLambdaの処理レートを比較
  2. エラーログを確認
  3. 現在のシャード数とバッチサイズ設定を確認

解決策:

  • シャード数を増やして並列処理能力を向上
  • バッチサイズを最適化
  • Lambda関数のコードを最適化して処理速度を向上
  • 処理に時間のかかる処理を別のワークフローに移動
コストが予想より高い場合

症状: AWS請求額がLambdaの使用に対して予想より高い

可能性のある原因:

  • 予想より多い呼び出し回数
  • 長い実行時間
  • 必要以上のメモリ割り当て
  • 無限ループや再帰的な呼び出し

調査手順:

  1. Invocationsメトリクスを分析して呼び出しパターンを確認
  2. Durationメトリクスを確認して実行時間を分析
  3. AWS Cost Explorerで詳細なコスト内訳を確認
  4. CloudWatchログで無限ループの兆候を探す

解決策:

  • 不要な呼び出しを削減(キャッシュの導入など)
  • コードを最適化して実行時間を短縮
  • 適切なメモリ設定を見つけるためにパフォーマンスとコストのバランスを評価
  • AWS Lambda Power Tuningツールを使用して最適なメモリ設定を見つける

関連リソース

📚

AWS Lambda公式ドキュメント

AWS Lambdaの公式ドキュメントは、メトリクス、モニタリング、トラブルシューティングに関する包括的な情報を提供しています。

公式ドキュメントを見る →
🛠️

AWS Lambda Power Tuning

AWS Lambda Power Tuningは、コストとパフォーマンスのバランスが最適になるメモリ設定を見つけるためのオープンソースツールです。

GitHubリポジトリを見る →
📝

AWS公式ブログ - Lambda最適化

AWS公式ブログには、Lambda関数の最適化、監視、トラブルシューティングに関する実用的な記事が多数掲載されています。

ブログ記事を読む →
🎥

AWS re:Invent セッション

AWS re:Inventでは、Lambda関数のモニタリングと最適化に関する詳細なセッションが提供されています。

セッション動画を見る →
👨‍💻

AWS Serverless Workshop

AWS Serverless Workshopは、Lambdaのモニタリングと最適化に関する実践的な演習を提供しています。

ワークショップに参加する →
👥

Serverless Framework

Serverless Frameworkは、Lambda関数のデプロイ、モニタリング、最適化を容易にするためのフレームワークです。

Serverless Frameworkを見る →

Created by SSuzuki1063

AWS SAP Learning Resources