DVA-C02トラブルシューティングと最適化HARD単一選択

あるチームがCloudWatchのカスタムメトリクスを大量のLambda関数から送信している。一部のLambda呼び出しで「ThrottlingException: Rate exceeded」というエラーがPutMetricData呼び出し時に発生している。コスト増加を抑えつつこの問題を解決する最も適切な方法はどれか。

  1. A. CloudWatch Embedded Metrics Format(EMF)に切り替えてPutMetricData API呼び出し自体をなくし、ログ経由でメトリクスを送信する
  2. B. Lambda関数のメモリを増やしてCPUを確保し、PutMetricData呼び出しを高速化する
  3. C. PutMetricDataを非同期(fire-and-forget)にしてLambdaのメインロジックをブロックしないようにする
  4. D. メトリクス送信をSQSキューに入れてバッチ処理Lambda関数で集約してからPutMetricDataを呼ぶ
解答と解説を見る

正解: A

PutMetricData APIにはリクエストレート制限があり(リージョンごとに1,000リクエスト/秒)、大量のLambda関数から並行して呼ばれるとスロットリングが発生する。EMF(Embedded Metrics Format)に切り替えると(選択肢A)、PutMetricData API呼び出しをまったく行わずにCloudWatch Logsへのログ書き込みだけでカスタムメトリクスを送信できる。CloudWatch Logsのスループット制限はPutMetricDataよりも大幅に高く、スロットリングが解消される。またログはLambdaの実行環境から直接CloudWatch Logsに送られるためAPI呼び出しコストも発生しない。選択肢Bのメモリ増加はPutMetricDataのレート制限とは無関係。選択肢Cの非同期化はLambdaのメインロジックは保護されるがThrottlingException自体は発生し続け、メトリクスが欠損する。選択肢DのSQS集約はコストと複雑性が増え、集約Lambda関数も同様にPutMetricDataのレート制限に当たる可能性がある。EMFはPutMetricDataのスロットリング問題の根本解決策。

▸ この試験を本気で演習する(全150問・無料)