AWS Lambdaメトリクスは、サーバーレス関数のパフォーマンス、健全性、コストを包括的に把握するための重要な指標群です。これらのメトリクスを活用することで、アプリケーションの動作を最適化し、潜在的な問題を早期に発見し、運用コストを削減することができます。
関数が実行された回数
Lambda関数が呼び出された回数を示します。API Gateway、S3イベント、EventBridgeスケジュールなど、あらゆるソースからの呼び出しがカウントされます。
関数の実行中に発生したエラー
関数の実行中に発生したエラーの数を示します。コード内の例外、タイムアウト、権限の問題などが含まれます。エラー率(Errors/Invocations)は通常、5%未満に保つべきです。
コード実行に要した時間
関数がコードの実行に費やした時間をミリ秒単位で測定します。初期化時間は含まれず、純粋なコード実行時間のみです。タイムアウト制限(最大15分)に近づいていないかを監視します。
制限により拒否された呼び出し
同時実行の制限によりスロットルされた呼び出しの数です。デフォルトでは、AWSアカウントごとにリージョンあたり1,000の同時実行数の制限があります。スロットルが発生すると、クライアントは429エラーを受け取ります。
同時に実行されているインスタンス数
特定の時点で同時に実行されているLambda関数のインスタンス数を示します。予約済み同時実行数を設定している場合は、その使用率を監視します。高負荷時にスロットルが発生していないか確認するために重要です。
ストリームベースの処理遅延
ストリームベースの呼び出し(KinesisやDynamoDB Streams)において、レコードがストリームに追加されてからLambdaで処理されるまでの時間です。この値が大きいと、ストリーム処理に遅延が生じていることを示します。
DLQへの送信失敗
Lambda関数がデッドレターキュー(DLQ)にイベントを送信できなかった回数を示します。これは通常、DLQの設定ミスやアクセス権限の問題を示唆しています。
リソース使用量とコスト最適化
Lambda関数の実行に関連するコストは、呼び出し回数、実行時間、メモリ使用量の組み合わせで決まります。これらのメトリクスを組み合わせて分析することで、コスト最適化の機会を特定できます。
Durationメトリクスを分析して、実行時間が長い関数を特定します。メモリ割り当ての調整、コードの最適化、外部依存関係の削減などの対策を講じることができます。
呼び出し回数、実行時間、メモリ使用量を分析して、コストが高い関数を特定します。コードの最適化、不要な呼び出しの削減、またはStepFunctionsを使用したオーケストレーションなどの対策を検討できます。
ConcurrentExecutionsメトリクスを分析して、同時実行のピークを特定します。この情報を基に、予約済み同時実行数を適切に設定し、スロットルを防止しながらコストを最適化できます。
Errorsメトリクスにアラームを設定して、エラー率が急増した場合に迅速に通知を受け取ります。CloudWatchのログと組み合わせて、根本原因を特定し、迅速に対応できます。
Throttlesメトリクスを監視して、キャパシティの制限に達している関数を特定します。同時実行制限の引き上げをリクエストするか、関数のアーキテクチャを見直して負荷を分散させることができます。
IteratorAgeメトリクスを使用して、ストリームベースのイベント処理の遅延を監視します。処理が遅れている場合は、関数のパフォーマンスを改善するか、シャードの数を増やして並列処理を強化できます。
Lambda関数のエラー率が5%を超えた場合に通知を受け取るアラームを設定します。エラー率は、Errors/Invocationsの比率として計算されます。
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 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関数の実行時間がタイムアウト制限に近づいている場合に通知を受け取るアラームを設定します。タイムアウトに近い関数は、タイムアウトエラーのリスクがあります。
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,
});
}
}
Durationメトリクスに大きなばらつきがある場合、コールドスタートが原因である可能性があります。以下の対策を検討してください:
Throttlesメトリクスが0より大きい場合、同時実行の制限に達している可能性があります。以下の対策を検討してください:
Errorsメトリクスが高い場合、関数の信頼性に問題がある可能性があります。以下の対策を検討してください:
Invocations、Duration、メモリ設定を組み合わせて分析し、コストを最適化します:
IteratorAgeメトリクスが高い場合、ストリーム処理に遅延が生じています。以下の対策を検討してください:
Retail Inc. の事例
大手オンラインリテーラーRetail Inc.は、セール期間中に商品カタログAPIのレスポンス時間が遅延し、スロットルが発生するという問題に直面していました。AWS Lambdaのメトリクスを分析することで、問題の根本原因を特定し、効果的な解決策を実装しました。
これらの最適化により、サイトは年末セールの記録的なトラフィックを問題なく処理し、顧客満足度を大幅に向上させることができました。
Smart City Solutions の事例
スマートシティソリューションプロバイダーのSmart City Solutionsは、数十万のセンサーからのデータを処理するLambda関数でIteratorAgeの増加とエラー率の上昇という問題に直面していました。
Analytics Corp. の事例
分析サービスプロバイダーのAnalytics Corp.は、数TBのデータを毎日処理するLambdaベースのETLパイプラインで、タイムアウトエラーとコスト増加の問題に直面していました。
症状: Errorsメトリクスが急激に上昇している
可能性のある原因:
調査手順:
解決策:
症状: Throttlesメトリクスが0より大きい
可能性のある原因:
調査手順:
解決策:
症状: Durationメトリクスが急激に増加している
可能性のある原因:
調査手順:
解決策:
症状: IteratorAgeメトリクスが増加している
可能性のある原因:
調査手順:
解決策:
症状: AWS請求額がLambdaの使用に対して予想より高い
可能性のある原因:
調査手順:
解決策:
AWS Lambda Power Tuningは、コストとパフォーマンスのバランスが最適になるメモリ設定を見つけるためのオープンソースツールです。
GitHubリポジトリを見る →AWS Serverless Workshopは、Lambdaのモニタリングと最適化に関する実践的な演習を提供しています。
ワークショップに参加する →Serverless Frameworkは、Lambda関数のデプロイ、モニタリング、最適化を容易にするためのフレームワークです。
Serverless Frameworkを見る →Created by SSuzuki1063
AWS SAP Learning Resources