あるチームがCloudWatchで本番Lambda関数を監視している。メモリ使用量をカスタムメトリクスとして毎回の呼び出しで送信したいが、PutMetricData APIを呼ぶ方法ではコストが高くなりすぎると懸念している。コスト効率よくカスタムメトリクスを送信する最も適切な方法はどれか。
- A. CloudWatch Logs Insightsのクエリでログからメモリ使用量を集計してカスタムダッシュボードに表示する
- B. CloudWatch Embedded Metrics Format(EMF)を使い、構造化ログをCloudWatch Logsに書き込むことでメトリクスを自動抽出させる
- C. LambdaのDESTINATION設定でメトリクスをKinesis Data Streamsに送り、Lambda処理で集約してからPutMetricDataを呼ぶ
- D. Lambda関数をVPC内に配置してVPCエンドポイント経由でPutMetricDataを呼ぶことでAPIコストを削減する
解答と解説を見る
正解: B
CloudWatch Embedded Metrics Format(EMF)は、JSON形式のログにメトリクス値を埋め込んでCloudWatch Logsに出力するだけで、CloudWatchが自動的にカスタムメトリクスを抽出する機能である(選択肢B)。PutMetricData APIを直接呼ぶよりも安価で、追加の非同期処理やレイテンシも発生しない。AWS Lambda Powertools(Python/Node.js/Java)のMetricsモジュールを使えばEMFを簡単に実装できる。選択肢DのVPCエンドポイントはネットワーク経路の変更であり、PutMetricDataの呼び出し回数単位のコストは変わらない。選択肢AのLogs Insightsはクエリ時点で課金され、リアルタイムメトリクスとして使えない。選択肢CのKinesis経由集約は構成が複雑になりコスト削減効果も限定的。EMFはLambdaのカスタムメトリクス送信のベストプラクティスとしてAWSが推奨している。
📚 関連サービスの解説: Amazon CloudWatch