Aurora Serverless v2 およびプロビジョニングされたクラスターの Amazon RDS Data API の動作と Aurora Serverless v1 クラスターの比較 - Amazon Aurora

Aurora Serverless v2 およびプロビジョニングされたクラスターの Amazon RDS Data API の動作と Aurora Serverless v1 クラスターの比較

Amazon RDS Data API の最新の機能強化により、PostgreSQL または MySQL エンジンの最新バージョンを使用しているクラスターでデータ API を利用できるようになりました。これらのクラスターは、Aurora Serverless v2 を使用するように設定するか、db.r6g または db.r6i などのプロビジョニングされたインスタンスクラスを使用するように設定できます。

次のセクションは、Aurora Serverless v2 とプロビジョニングされた DB クラスター、および Aurora Serverless v1 DB クラスター間の Amazon RDS Data API の違いについて説明します。Aurora Serverless v1DB クラスターは serverless エンジンモードを使用します。プロビジョンド DB クラスターは provisioned エンジンモードを使用します。Aurora Serverless v2 DB クラスターも provisioned エンジンモードを使用し、db.serverless インスタンスクラスを持つ 1 つ以上の Aurora Serverless v2 DB インスタンスを含みます。

1 秒あたりの最大リクエスト数。

Aurora Serverless v1

Data API は、1 秒あたり最大 1,000 リクエストを行うことができます。

Aurora Serverless v2

データ API は、1 秒あたり無制限の数のリクエストを行うことができます。

既存のデータベースで Amazon RDS Data API を有効化または無効化

Aurora Serverless v1
  • Amazon RDS API を使用する場合ModifyCluster オペレーションを使用し、適用される EnableHttpEndpoint パラメータに True または False を指定します。

  • AWS CLI を使用する場合 – 適用される --enable-http-endpoint または --no-enable-http-endpoint オプションを指定して、modify-db-cluster オペレーションを使用します。

Aurora Serverless v2
  • Amazon RDS API を使用する場合EnableHttpEndpoint および DisableHttpEndpoint オペレーションを使用します。

  • AWS CLI を使用する場合: enable-http-endpoint および disable-http-endpoint オペレーションを使用します。

CloudTrail のイベント

Aurora Serverless v1

Data API コールからのイベントは管理イベントです。これらのイベントは、デフォルトで証跡で自動的に含まれます。詳細については、「AWS CloudTrail の証跡からの Data API イベントの除外 (Aurora Serverless v1 のみ)」を参照してください。

Aurora Serverless v2

Data API コールからのイベントはデータイベントです。これらのイベントは、デフォルトで証跡で自動的に除外されます。詳細については、「AWS CloudTrail の証跡からの Data API イベントの包含」を参照してください。

マルチステートメントのサポート

Aurora Serverless v1
  • Aurora MySQL では、マルチステートメントはサポートされていません。

  • Aurora PostgreSQL の場合、マルチステートメントは最初のクエリレスポンスのみを返します。

Aurora Serverless v2

マルチステートメントはサポートされていません。1 回の API コールで複数のステートメントを実行しようとすると、“An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.” が返されます。複数のステートメントを実行するには、別々の ExecuteStatement API コールを実行するか、バッチ処理用の BatchExecuteStatement を使用します。

次の例は、マルチステートメントの実行を試みる API コールの結果のエラーメッセージを示しています。

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table; Select * FROM next_table; "An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.

次の例では、個別の ExecuteStatement API コールを使用して複数のステートメントを実行します。

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table;" aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM next_table;"

同じトランザクション ID に対する同時リクエスト

Aurora Serverless v1

後続のリクエストは、現在のリクエストが終了するまで待機します。待機時間が長すぎる場合、アプリケーションはタイムアウトエラーを処理する必要があります。

Aurora Serverless v2

Data API は、同じトランザクション ID を持つ複数のリクエストを受信すると、すぐに次のエラーを返します。

DatabaseErrorException: Transaction is still running a query

このエラーは、次の 2 つの状況で発生します。

  • アプリケーションが、同じトランザクション ID を使用して非同期リクエスト (JavaScript promise など) を行う場合。

  • そのトランザクション ID を持つ以前のリクエストは、まだ処理中の場合。

次の例は、promise.all() と並行して実行されるすべてのリクエストを示しています。

const api_calls = []; for (let i = 0; i < 10; i++) { api_calls.push( client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ) ); } await Promise.all(api_calls);

このエラーを解決するには、現在のリクエストが完了するまで待ってから、同じトランザクション ID を持つ別のリクエストを送信するか、トランザクション ID を削除して並列リクエストを許可します。

次の例は、同じトランザクション ID で順次実行を使用する API コールを示しています。

for (let i = 0; i < 10; i++) { await client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ).promise() ); }

BatchExecuteStatement の動作

BatchExecuteStatement の詳細については、「BatchExecuteStatement」を参照してください。

Aurora Serverless v1

更新結果で生成されたフィールドオブジェクトには、挿入された値が含まれます。

Aurora Serverless v2
  • Aurora MySQL の場合、更新結果で生成されたフィールドオブジェクトには、挿入された値が含まれます。

  • Aurora PostgreSQL の場合、生成されたフィールドオブジェクトは空です。

ExecuteSQL の動作

ExecuteSQL の詳細については、「ExecuteSQL」を参照してください。

Aurora Serverless v1

ExecuteSQL オペレーションは非推奨です。

Aurora Serverless v2

ExecuteSQL オペレーションはサポートされていません。

ExecuteStatement の動作

ExecuteStatement の詳細については、「ExecuteStatement」を参照してください。

Aurora Serverless v1

ExecuteStatement パラメータは、多次元配列の列とすべての高度なデータ型の取得をサポートします。

Aurora Serverless v2

ExecuteStatement パラメータは多次元配列の列をサポートしていません。また、ジオメトリ型や金額型など、特定の PostgreSQL データ型もサポートしていません。Data API がサポートされていないデータ型を検出すると、このエラー UnsupportedResultException: The result contains the unsupported data type data_type を返します。

この問題を回避するには、サポートされていないデータ型を TEXT にキャストします。次の例では、サポートされていないデータ型を TEXT にキャストします。

SELECT custom_type::TEXT FROM my_table;-- ORSELECT CAST(custom_type AS TEXT) FROM my_table;

各 Aurora データベースエンジンでサポートされているデータ型のリストについては、「Data API オペレーションリファレンス」を参照してください。

スキーマパラメータの動作

Aurora Serverless v1

Schema パラメータはサポートされていません。API コールに Schema パラメータを含めると、Data API は パラメータを無視します。

Aurora Serverless v2

Schema パラメータは廃止されました。API コールに Schema パラメータを含めると、Data API はこのエラー ValidationException: The schema parameter isn't supported を返します。次の例は、ValidationException エラーを返す Data API コールを示しています。

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --schema "your_schema" \ --sql "SELECT * FROM your_table LIMIT 10"

この問題を解決するには、API コールから Schema パラメータを削除します。

次の例は、Schema パラメータが削除された Data API コールを示しています。

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table LIMIT 10"