Amazon のトラブルシューティング QLDB - Amazon Quantum 台帳データベース (Amazon QLDB)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon のトラブルシューティング QLDB

重要

サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了QLDBまで Amazon を使用できます。詳細については、「Amazon Ledger QLDB を Amazon Aurora Postgre に移行するSQL」を参照してください。

以下のセクションでは、Amazon の使用時に発生する可能性がある一般的なエラーの集計リストとQLDB、それらのトラブルシューティング方法のガイダンスを提供します。

IAM アクセスに固有のトラブルシューティングガイダンスについては、「」を参照してくださいAmazon QLDB アイデンティティとアクセスのトラブルシューティング

PartiQL ステートメントのチューニングのベストプラクティスについては、「クエリパフォーマンスの最適化」を参照してください。

QLDB ドライバーを使用したトランザクションの実行

このセクションでは、台帳で PartiQL トランザクションを実行するために Amazon QLDBドライバーが返すことができる一般的な例外を一覧表示します。この機能の詳細については、「ドライバーの開始方法」を参照してください。ドライバーを設定および使用するためのベストプラクティスについては、「ドライバーに関する推奨事項」を参照してください。

それぞれの例外には、特定のエラーメッセージに加え、簡単な説明と考えられる解決方法に関する推奨事項が記載されています。

CapacityExceededException

メッセージ: 処理能力の超過

Amazon は、台帳の処理能力を超えたため、リクエストQLDBを拒否しました。QLDB は、サービスの状態とパフォーマンスを維持するために、台帳ごとに内部スケーリング制限を適用します。この制限は、各リクエストのワークロードサイズによって異なります。例えば、非インデックス修飾クエリによるテーブルスキャンなど、非効率なデータトランザクションを実行する場合、リクエストのワークロードが増大する可能性があります。

リクエストを再試行する前に、待機することをお勧めします。アプリケーションでこの例外が継続的に発生する場合は、ステートメントを最適化し、台帳に送信するリクエストの割合やボリュームを減らします。ステートメントの最適化の例としては、トランザクションごとに実行するステートメントの数を減らすことや、テーブルインデックスのチューニングなどがあります。ステートメントの最適化方法およびテーブルスキャンの回避方法については、「クエリパフォーマンスの最適化」を参照してください。

また、最新バージョンのQLDBドライバーを使用することをお勧めします。このドライバーには、エクスポネンシャルバックオフとジッターを使用するデフォルトの再試行ポリシーがあり、こうした例外発生時に自動的に再試行します。エクスポネンシャルバックオフは、再試行間の待機時間を累進的に長くして、連続的なエラー応答に対処するという概念に基づいています。

InvalidSessionException

メッセージ: トランザクション transactionId の有効期限が切れている

トランザクションが最大有効期間を超えました。トランザクションは、コミットされるまでに最大 30 秒間実行できます。このタイムアウト制限を超えると、トランザクションに対して実行された作業はすべて拒否され、 はセッションをQLDB破棄します。この制限は、クライアントがトランザクションを開始し、トランザクションをコミットまたはキャンセルしないことで、セッションがリークするのを防ぎます。

この例外がアプリケーションでよく発生する場合、トランザクションの実行に時間がかかりすぎている可能性があります。トランザクションの実行に 30 秒以上かかる場合は、トランザクションを高速化するようにステートメントを最適化します。ステートメントの最適化の例としては、トランザクションごとに実行するステートメントの数を減らすことや、テーブルインデックスのチューニングなどがあります。詳細については、「クエリパフォーマンスの最適化」を参照してください。

InvalidSessionException

メッセージ: セッション sessionId の有効期限が切れている

QLDB は、最大合計有効期間を超えたため、セッションを破棄しました。QLDB は、アクティブなトランザクションに関係なく、13~17 分後にセッションを破棄します。ハードウェア障害、ネットワーク障害、アプリケーションの再起動など、さまざまな理由でセッションが失われたり、障害が生じたりすることがあります。そのため、 は、クライアントソフトウェアがセッション障害に対して回復力を持つように、セッションに最大有効期間QLDBを適用します。

この例外が発生した場合は、新しいセッションを取得し、トランザクションを再試行することをお勧めします。また、アプリケーションに代わってセッションプールとそのヘルスを管理する最新バージョンのQLDBドライバーを使用することをお勧めします。

InvalidSessionException

メッセージ: そのようなセッションはありません

クライアントは、存在しないセッションQLDBを使用して と取引しようとしました。以前に存在していたセッションをクライアントが使用していると仮定すると、次のいずれかが原因でセッションは存在しなくなる可能性があります。

  • セッションが内部サーバー障害 (つまり、HTTPレスポンスコード 500 のエラー) に関与している場合、 は、顧客が不確実な状態のセッションとトランザクションすることを許可するのではなく、セッションを完全に破棄することを選択するQLDB場合があります。その後、そのセッションでの再試行は、このエラーで失敗します。

  • 期限切れのセッションは、最終的に によって忘れられますQLDB。その後、そのセッションの使用を継続しようとすると、最初の InvalidSessionException エラーではなく、このエラーが発生します。

この例外が発生した場合は、新しいセッションを取得し、トランザクションを再試行することをお勧めします。また、アプリケーションに代わってセッションプールとそのヘルスを管理する最新バージョンのQLDBドライバーを使用することをお勧めします。

RateExceededException

メッセージ: レートを超えました

QLDB は、発信者の ID に基づいてクライアントをスロットリングしました。QLDB は、トークンバケットスロットリングアルゴリズムを使用して、リージョンごと、アカウントごとにスロットリングを適用します。QLDB は、サービスのパフォーマンスを向上させ、すべてのQLDBお客様に公平な使用を保証するためにこれを行います。たとえば、StartSessionRequest オペレーションを使用して多数の同時セッションを取得しようとすると、スロットリングが発生する可能性があります。

アプリケーションの正常性を維持し、さらなるスロットリングを軽減するために、エクスポネンシャルバックオフおよびジッターを使用してこの例外を再試行できます。エクスポネンシャルバックオフは、再試行間の待機時間を累進的に長くして、連続的なエラー応答に対処するという概念に基づいています。最新バージョンのQLDBドライバーを使用することをお勧めします。このドライバーには、エクスポネンシャルバックオフとジッターを使用するデフォルトの再試行ポリシーがあり、こうした例外発生時に自動的に再試行します。

最新バージョンのQLDBドライバーは、アプリケーションがStartSessionRequest呼び出しQLDBのために によって一貫してスロットリングされている場合にも役立ちます。このドライバーは、トランザクション間で再利用されるセッションのプールを維持します。これにより、アプリケーションが行う StartSessionRequest コールの回数を減らすことができます。スロットリング制限の引き上げをリクエストするには、 API AWS Support センターにお問い合わせください。

LimitExceededException

メッセージ: セッション制限を超えました

台帳が、アクティブなセッション数のクォータ (制限とも呼ばれる) を超えました。このクォータは Amazon のクォータと制限 QLDB で定義されています。台帳のアクティブセッション数は結果的に一貫しており、常時クォータ付近で実行している台帳の場合、この例外が定期的に表示される場合があります。

アプリケーションの正常性を維持するために、この例外を再試行することをお勧めします。この例外を回避するには、すべてのクライアントで単一台帳で使用する同時セッションが 1,500 を超えないようにしてください。例えば、Java 用 Amazon QLDBドライバーの maxConcurrentTransactionsメソッドを使用して、ドライバーインスタンスで使用可能なセッションの最大数を設定できます。

QldbClientException

メッセージ: ストリームされた結果は、親トランザクションが開いている場合にのみ有効です

トランザクションは閉じられ、 から結果を取得するために使用することはできませんQLDB。トランザクションは、コミットまたはキャンセルされると終了します。

この例外は、クライアントがTransactionオブジェクトを直接操作していて、トランザクションをコミットまたはキャンセルQLDBした後に から結果を取得しようとしている場合に発生します。この問題を軽減するには、クライアントはトランザクションを閉じる前にデータを読み取る必要があります。

ジャーナルデータのエクスポート

このセクションでは、ジャーナルデータを台帳から Amazon S3 バケットにエクスポートするときに が返QLDBす可能性がある一般的な例外を一覧表示します。この機能の詳細については、「Amazon からのジャーナルデータのエクスポート QLDB」を参照してください。

それぞれの例外には、特定のエラーメッセージに加え、簡単な説明と考えられる解決方法に関する推奨事項が記載されています。

AccessDeniedException

メッセージ: ユーザー:userARN は、iam:PassRole on リソース: を実行する権限がありません。roleARN

QLDB サービスに IAMロールを渡すアクセス許可がありません。QLDB では、すべてのジャーナルエクスポートリクエストにロールが必要であり、このロールを に渡すためのアクセス許可が必要ですQLDB。ロールはQLDB、指定した Amazon S3 バケットの書き込みアクセス許可を に付与します。

QLDB サービス () の指定されたIAMロールリソースで PassRoleAPIオペレーションを実行するアクセス許可を付与する IAMポリシーを定義していることを確認しますqldb.amazonaws.com。ポリシーの例については、「Amazon のアイデンティティベースのポリシーの例 QLDB」を参照してください。

IllegalArgumentException

メッセージ: QLDB S3 設定の検証中にエラーが発生しました。errorCode errorMessage

このエラーの原因として考えられるのは、指定したバケットが Simple Storage Service (Amazon S3) に存在しないことです。または、 QLDB には、指定した Amazon S3 バケットにオブジェクトを書き込むのに十分なアクセス許可がありません。

エクスポートジョブリクエストで指定した S3 バケット名が正しいか確認します。バケットの命名規則の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「バケットの制約と制限」を参照してください。

また、QLDBサービス () に PutObjectおよび アクセスPutObjectAcl許可を付与するポリシーを、指定したバケットに定義していることを確認しますqldb.amazonaws.com。詳細については、「エクスポートアクセス許可」を参照してください。

IllegalArgumentException

メッセージ: Unexpected response from Amazon S3 while validating the S3 configuration. (S3 設定の検証中に、Amazon S3 から不測のレスポンスがありました。) S3 からのレスポンス:errorCode errorMessage

指定した S3 バケットにジャーナルエクスポートデータを書き込もうとしましたが、Simple Storage Service (Amazon S3) エラーレスポンスがあり失敗しました。考えられる原因の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「Amazon S3 のトラブルシューティング」を参照してください。

IllegalArgumentException

メッセージ: Amazon S3 bucket prefix must not exceed 128 characters (Amazon S3 バケットプレフィックスは 128 文字以下でなければなりません)

ジャーナルエクスポートのリクエストで指定したプレフィックスが 128 文字を超えています。

IllegalArgumentException

メッセージ: Start date must not be greater than end date (開始日は終了日よりも前の日付でなければなりません)

InclusiveStartTime と はどちらも ExclusiveEndTime ISO8601 日付と時刻の形式、および協定世界時 () である必要がありますUTC。

IllegalArgumentException

メッセージ: End date cannot be in future (終了日を現在よりも後の日付にすることはできません)

InclusiveStartTimeExclusiveEndTimeは両方ともISO 8601日付と時刻の形式、および である必要がありますUTC。

IllegalArgumentException

メッセージ: 指定されたオブジェクト暗号化設定 (S3EncryptionConfiguration) は AWS Key Management Service (AWS KMS) キーと互換性がありません

ObjectEncryptionTypeNO_ENCRYPTION または SSE_S3KMSKeyArn が指定されています。SSE_KMS のオブジェクトの暗号化タイプに対してのみ、カスタマーマネージド AWS KMS key を指定できます。Simple Storage Service (Amazon S3) のサーバー側の暗号化オプションの詳細については、「Amazon S3 デベロッパーガイド」の「サーバー側の暗号化を使用したデータの保護」を参照してください。

LimitExceededException

メッセージ: Exceeded the limit of 2 concurrently running Journal export jobs (ジャーナルエクスポートジョブの同時実行の上限数 2 を超えています)

QLDB では、ジャーナルの同時エクスポートジョブを 2 つというデフォルトの制限が適用されます。

ジャーナルデータのストリーミング

このセクションではQLDB、ジャーナルデータを台帳から Amazon Kinesis Data Streams にストリーミングするときに返される可能性がある一般的な例外を一覧表示します。この機能の詳細については、「Amazon からのジャーナルデータのストリーミング QLDB」を参照してください。

それぞれの例外には、特定のエラーメッセージに加え、簡単な説明と考えられる解決方法に関する推奨事項が記載されています。

AccessDeniedException

メッセージ: ユーザー:userARN は、iam:PassRole on リソース: を実行する権限がありません。roleARN

QLDB サービスに IAMロールを渡すアクセス許可がありません。QLDB には、すべてのジャーナルストリームリクエストにロールが必要であり、このロールを に渡すためのアクセス許可が必要ですQLDB。ロールはQLDB、指定した Amazon Kinesis Data Streams リソースの書き込みアクセス許可を に付与します。

QLDB サービス () の指定されたIAMロールリソースで PassRoleAPIオペレーションを実行するアクセス許可を付与する IAMポリシーを定義していることを確認しますqldb.amazonaws.com。ポリシーの例については、「Amazon のアイデンティティベースのポリシーの例 QLDB」を参照してください。

IllegalArgumentException

メッセージ: QLDB Kinesis Data Streams の検証中にエラーが発生しました: Kinesis からのレスポンス:errorCode errorMessage

このエラーの原因として考えられるのは、存在しない Kinesis Data Streams リソースが指定されていることです。または、 には、指定した Kinesis データストリームにデータレコードを書き込むのに十分なアクセス許可QLDBがありません。

ストリーミングリクエストに指定した Kinesis データストリームが正しいことを確認します。詳細については、「Amazon Kinesis Data Streams デベロッパーガイド」の「データストリームの作成および更新」を参照してください。

また、以下のアクションに対するQLDBサービス (qldb.amazonaws.com) アクセス許可を付与する、指定された Kinesis データストリームのポリシーを定義していることを確認します。詳細については、「ストリームアクセス許可」を参照してください。

  • kinesis:PutRecord

  • kinesis:PutRecords

  • kinesis:DescribeStream

  • kinesis:ListShards

IllegalArgumentException

メッセージ: Unexpected response from Kinesis Data Streams while validating the Kinesis configuration. (Kinesis 設定の検証中に、Kinesis Data Streams から不測のレスポンスがありました) Kinesis からのレスポンス:errorCode errorMessage

指定した Kinesis データストリームにデータレコードを書き込もうとしましたが、Kinesis エラーレスポンスがあり失敗しました。考えられる原因については、「Amazon Kinesis Data Streams デベロッパーガイド」の「Amazon Kinesis Data Streams プロデューサーのトラブルシューティング」を参照してください。

IllegalArgumentException

メッセージ: Start date must not be greater than end date. (開始日は終了日よりも前の日付でなければなりません。)

InclusiveStartTime と は両方とも ExclusiveEndTime ISO8601 日付と時刻の形式、および協定世界時 () である必要がありますUTC。

IllegalArgumentException

メッセージ: Start date cannot be in the future (開始日を現在よりも後の日付にすることはできません)

InclusiveStartTimeExclusiveEndTimeは両方ともISO 8601日付と時刻の形式、および である必要がありますUTC。

LimitExceededException

メッセージ: Exceeded the limit of 5 concurrently running Journal streams to Kinesis Data Streams (Kinesis Data Streams への同時実行ジャーナルストリームの 5 つの制限を超えました)

QLDB は、デフォルトの 5 つの同時ジャーナルストリームの制限を適用します。

ジャーナルデータの検証

このセクションではQLDB、台帳内のジャーナルデータを検証するときに返される可能性がある一般的な例外を一覧表示します。この機能の詳細については、「Amazon でのデータ検証 QLDB」を参照してください。

各例外には、特定のエラーメッセージ、それに続くスローできるAPIオペレーション、簡単な説明、考えられる解決策の提案が含まれます。

IllegalArgumentException

メッセージ: 提供された Ion 値は無効なため解析できません。

API オペレーション: GetDigest, GetBlock, GetRevision

リクエストを再試行する前に、有効な Amazon Ion 値が指定されているか確認してください。

IllegalArgumentException

メッセージ: 指定されたブロックアドレスは無効です。

API オペレーション: GetDigest, GetBlock, GetRevision

リクエストを再試行する前に、有効なブロックアドレスが指定されていることを確認してください。ブロックアドレスは、strandIdsequenceNo という 2 つのフィールドを含む Amazon Ion 構造です。

例: {strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}

IllegalArgumentException

メッセージ: The sequence number of the provided digest tip address is beyond the strand's latest committed record. (指定されたダイジェストティップアドレスのシーケンス番号が、ストランドの最新のコミット済みレコードを超えています。)

API オペレーション: GetDigest, GetBlock, GetRevision

指定するダイジェストティップアドレスのシーケンス番号は、ジャーナルストランドの最新のコミット済みレコードのシーケンス番号以下でなければなりません。リクエストを再試行する前に、ダイジェストティップアドレスに有効なシーケンス番号を指定していることを確認してください。

IllegalArgumentException

メッセージ: The Strand ID of the provided block address is not valid. (指定されたブロックアドレスのストランド ID が無効です。)

API オペレーション: GetDigest, GetBlock, GetRevision

指定するブロックアドレスのストランド ID は、ジャーナルのストランド ID に一致するものでなければなりません。リクエストを再試行する前に、ブロックアドレスに有効なストランド ID を指定していることを確認してください。

IllegalArgumentException

メッセージ: The sequence number of the provided block address is beyond the strand's latest committed record. (指定されたブロックアドレスのシーケンス番号が、ストランドの最新のコミット済みレコードを超えています。)

API オペレーション: GetBlock, GetRevision

指定するブロックアドレスのシーケンス番号は、ストランドの最新のコミット済みレコードのシーケンス番号以下でなければなりません。リクエストを再試行する前に、有効なシーケンス番号を持つブロックアドレスが指定されているか確認してください。

IllegalArgumentException

メッセージ: 指定されたブロックアドレスのストランド ID は、指定されたダイジェストティップアドレスのストランド ID と一致するものでなければなりません。

API オペレーション: GetBlock, GetRevision

ドキュメントリビジョンまたはブロックは、指定するダイジェストと同じジャーナルストランドに存在する場合に限り検証できます。

IllegalArgumentException

メッセージ: 指定されたブロックアドレスのシーケンス番号は、指定されたダイジェストティップアドレスのシーケンス番号以下でなければなりません。

API オペレーション: GetBlock, GetRevision

ドキュメントリビジョンまたはブロックは、指定されたダイジェストでカバーされている場合に限り検証できます。言い換えると、ダイジェストティップアドレスより前のジャーナルにコミットされている場合に限り検証できます。

IllegalArgumentException

メッセージ: 指定されたドキュメント ID が、指定されたブロックアドレスのブロックに存在しません。

API オペレーション: GetRevision

指定するドキュメント ID は、指定するブロック内に存在するものでなければなりません。リクエストを再試行する前に、これら 2 つのパラメータが一貫しているか確認してください。