Amazon DynamoDB が Amazon Kinesis データストリームとやり取りする方法を最適化し、問題をトラブルシューティングしたいです。
簡単な説明
DynamoDB テーブルで Kinesis データストリームを使用するときに、次の一般的な問題が発生する場合があります。
- Kinesis データストリームレコードが失敗する。
- コストが高くなったり、変動したりする。
AWS CloudTrail のログを確認し、Amazon CloudWatch で Kinesis データストリームのメトリクスを監視すると、問題のトラブルシューティングに役立ちます。
注: DynamoDB と Kinesis ストリームのデータのデフォルトの保管期間は、24 時間枠に設定されています。ただし、ストリームの保持期間を延長すると、データを最大 1 年間 (365 日または 8,760 時間) 保存できます。
解決策
失敗したレコードのトラブルシューティング
レコードが失敗した理由を特定するには、CloudTrail ログを確認します。レコードが失敗する一般的な理由を次に示します。
ProvisionedThroughputExceedException エラーが発生し、ストリームがプロビジョニングされたキャパシティモードの場合は、シャードの数が不足しています。より多くのシャードをプロビジョニングして、テーブルの読み取りおよび書き込み操作を管理します。
ProvisionedThroughputExceedException エラーが発生し、ストリームがオンデマンドキャパシティモードの場合は、正しくないパーティションキーを使用している可能性があります。パーティションキーが正しくないと、データがシャード間で不均等に分散される場合があります。データの分散が不均等だと、1 秒あたり 2 MB の読み取りレートクォータと 1 秒あたり最大 1 MB の書き込みレートクォータを超えるレコードを持つシャードで過負荷がかかる場合があります。
この問題を解決するには、データをシャード全体に均等に分散するパーティションキーを選択します。
適切なキャパシティモードを選択してコストを最適化する
DynamoDB で Kinesis データストリームのパフォーマンスとコストを最適化するには、適切なキャパシティモードを選択します。
DynamoDB データベースのワークロードの変動が大きく、予測が難しい場合は、オンデマンドキャパシティモードを選択します。Kinesis データストリームはシャードを自動的に管理するため、キャパシティを計画する必要はありません。
ワークロードが安定していて予測可能な場合は、プロビジョニングされたキャパシティモードを選択します。DynamoDB テーブルからの変更データキャプチャレコードを収容するために必要なシャードの数を指定することができます。
CloudTrail ログを使用して API アクティビティを確認する
コントロールプレーン API アクティビティを参考にデータストリームをトラブルシューティングするには、CloudTrail ログを確認します。CloudTrail は、すべてのコントロールプレーンの操作を記録し、内容にはストリームが有効または無効になった時期など、ストリームのアクティビティ情報が含まれます。CloudTrail ログを分析して、プロビジョニングされたスループットや、Kinesis および DynamoDB リソースに問題がないかどうかを確認します。次に、Kinesis Data Streams API を使用してシャードを管理します。
Kinesis データストリームメトリクスを使用して詳細なトラブルシューティングを行う
Kinesis データストリームメトリクスを監視するには、CloudWatch を使用します。
一般的な問題を特定するには、次のメトリクスが便利です。
- GetRecords.IteratorAgeMilliSeconds メトリクスは、指定した期間におけるデータストリームに対するすべての GetRecords 呼び出しから受信した、最新のレコードの経過時間を示します。
- GetRecords.Latency メトリクスは、指定された期間における Kinesis ストリームでの各 GetRecords 操作の所要時間を示します。
- ThrottledPutRecordCount メトリクスは、データストリームにおける容量が不十分なためにスロットリングされたレコードの数を示します。
- WriteProvisionedThroughputExceeded および ReadProvisionedThroughputExceeded メトリクスは、指定された期間において、データストリームのスロットリングが原因で拒否されたレコードの数を示します。
関連情報
Amazon CloudWatch と AWS Lambda を使用して Amazon Kinesis データストリームを自動スケーリングする
Kinesis データストリームコンシューマーのトラブルシューティング