Vergleich zum Verhalten der Daten-API von Amazon RDS – bei Aurora Serverless v2 und bereitgestellten Clustern und bei Aurora Serverless v1-Clustern
Die neuesten Verbesserungen der Daten-APIs von Amazon RDS machen Daten-APIs für Cluster verfügbar, die aktuelle Versionen von PostgreSQL- oder MySQL-Engines ausführen. Diese Cluster können so konfiguriert werden, dass sie Aurora Serverless v2 verwenden, oder bereitgestellte Instance-Klassen wie db.r6g oder db.r6i.
In den folgenden Abschnitten werden die Unterschiede beschrieben, die hinsichtlich der Daten-API von Amazon RDS zwischen Aurora Serverless v2 und bereitgestellten DB-Clustern auf der einen Seite und Aurora Serverless v1-DB-Clustern auf der anderen Seite bestehen. Aurora Serverless v1 DB-Cluster verwenden den serverless-Engine-Modus. Bereitgestellte DB-Cluster verwenden den provisioned-Engine-Modus. Ein Aurora Serverless v2-DB-Cluster verwendet auch den provisioned-Engine-Modus und enthält eine oder mehrere Aurora Serverless v2-DB-Instances mit der db.serverless-Instance-Klasse.
Maximale Anzahl von Anforderungen pro Sekunde
Aurora Serverless v1
Daten-APIs können bis zu 1 000 Anforderungen pro Sekunde stellen.
Aurora Serverless v2
Daten-APIs können eine unbegrenzte Anzahl von Anforderungen pro Sekunde stellen.
Aktivieren oder Deaktivieren der Daten-API von Amazon RDS in einer vorhandenen Datenbank
Aurora Serverless v1
-
Mit der Amazon-RDS-API: Verwenden Sie den Vorgang
ModifyClusterund legen Sie für den ParameterEnableHttpEndpointentwederTrueoderFalsefest. -
Mit der AWS CLI: Verwenden Sie die Operation
modify-db-clustermit der Option--enable-http-endpointoder--no-enable-http-endpoint.
Aurora Serverless v2
-
Mit der Amazon-RDS-API: Verwenden Sie die Operationen
EnableHttpEndpointundDisableHttpEndpoint. -
Mit der AWS CLI: Verwenden Sie die Operationen
enable-http-endpointunddisable-http-endpoint.
CloudTrail-Ereignisse
Aurora Serverless v1
Ereignisse aus Daten-API-Aufrufen sind Verwaltungsereignisse. Diese Ereignisse werden in einem Trail standardmäßig automatisch eingeschlossen. Weitere Informationen finden Sie unter Ausschließen von Data API-Ereignissen aus einem AWS CloudTrail-Trail (nur Aurora Serverless v1).
Aurora Serverless v2
Ereignisse aus Daten-API-Aufrufen sind Datenereignisse. Diese Ereignisse werden in einem Trail standardmäßig automatisch ausgeschlossen. Weitere Informationen finden Sie unter Einschließen von Daten-API-Ereignissen in einen AWS CloudTrail-Trail.
Unterstützung für mehrere Anweisungen
Aurora Serverless v1
-
Mehrere Anweisungen werden für Aurora MySQL nicht unterstützt.
-
Mehrere Anweisungen geben für Aurora PostgreSQL nur die erste Abfrageantwort zurück.
Aurora Serverless v2
Mehrere Anweisungen werden nicht unterstützt. Wenn Sie versuchen, mehrere Anweisungen in einem einzigen API-Aufruf auszuführen, wird der Fehler “An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.” zurückgegeben. Um mehrere Anweisungen auszuführen, nutzen Sie separate ExecuteStatement-API-Aufrufe oder BatchExecuteStatement für die Stapelverarbeitung.
Das folgende Beispiel zeigt die Fehlermeldung, die ein API-Aufruf zurückgibt, wenn Sie versuchen, mehrere Anweisungen darin auszuführen.
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.
Im folgenden Beispiel werden mehrere Anweisungen mit separaten ExecuteStatement-API-Aufrufen ausgeführt.
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;"
Gleichzeitige Anforderungen für dieselbe Transaktions-ID
Aurora Serverless v1
Nachfolgende Anforderungen warten, bis die aktuelle Anforderung abgeschlossen ist. Ihre Anwendung muss Zeitüberschreitungsfehler beheben, wenn die Wartezeit zu lang ist.
Aurora Serverless v2
Wenn die Daten-API mehrere Anforderungen mit derselben Transaktions-ID erhält, gibt sie sofort diesen Fehler zurück:
DatabaseErrorException: Transaction is still running a query
Dieser Fehler tritt in zwei Situationen auf:
-
Ihre Anwendung stellt asynchrone Anforderungen (wie JavaScript-Versprechen) mit derselben Transaktions-ID.
-
Eine frühere Anforderung mit dieser Transaktions-ID wird noch verarbeitet.
Das folgende Beispiel zeigt alle Anforderungen, die parallel zu promise.all() ausgeführt werden.
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);
Um diesen Fehler zu beheben, warten Sie, bis die aktuelle Anforderung abgeschlossen ist, bevor Sie eine weitere Anforderung mit derselben Transaktions-ID senden, oder entfernen Sie die Transaktions-ID, um parallele Anforderungen zu ermöglichen.
Das folgende Beispiel zeigt einen API-Aufruf, der die sequentielle Ausführung mit derselben Transaktions-ID verwendet.
for (let i = 0; i < 10; i++) { await client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ).promise() ); }
Wie sich BatchExecuteStatement verhält
Weitere Informationen zu BatchExecuteStatement finden Sie unter BatchExecuteStatement.
Aurora Serverless v1
Das Objekt für generierte Felder im Aktualisierungsergebnis enthält eingefügte Werte.
Aurora Serverless v2
-
Für Aurora MySQL enthält das Objekt für generierte Felder im Aktualisierungsergebnis eingefügte Werte.
-
Für Aurora PostgreSQL bleibt das Objekt für generierte Felder leer.
Wie sich ExecuteSQL verhält
Weitere Informationen zu ExecuteSQL finden Sie unter ExecuteSQL.
Aurora Serverless v1
Der Vorgang ExecuteSQL ist veraltet.
Aurora Serverless v2
Der Vorgang ExecuteSQL wird nicht unterstützt.
Wie sich ExecuteStatement verhält
Weitere Informationen zu ExecuteStatement finden Sie unter ExecuteStatement.
Aurora Serverless v1
Der Parameter ExecuteStatement unterstützt das Abrufen von multidimensionalen Array-Spalten und allen erweiterten Datentypen.
Aurora Serverless v2
Der Parameter ExecuteStatement unterstützt keine multidimensionalen Array-Spalten. Er unterstützt auch bestimmte PostgreSQL-Datentypen nicht, einschließlich geometrischer und monetärer Typen. Wenn eine Daten-API auf einen nicht unterstützten Datentyp stößt, gibt sie diesen Fehler zurück: UnsupportedResultException: The result contains the unsupported data type data_type.
Um dieses Problem zu umgehen, konvertieren Sie den nicht unterstützten Datentyp in TEXT. Im folgenden Beispiel wird ein nicht unterstützter Datentyp in TEXT konvertiert.
SELECT custom_type::TEXT FROM my_table;-- ORSELECT CAST(custom_type AS TEXT) FROM my_table;
Eine Liste der unterstützten Datentypen für jede Aurora-Datenbank-Engine finden Sie in der Referenz zu Daten-API-Vorgängen.
Wie sich der Parameter Schema verhält
Aurora Serverless v1
Der Parameter Schema wird nicht unterstützt. Wenn Sie den Parameter Schema in einen API-Aufruf aufnehmen, ignoriert die Daten-API den Parameter.
Aurora Serverless v2
Der Parameter Schema ist veraltet. Wenn Sie den Parameter Schema in einen API-Aufruf aufnehmen, gibt die Daten-API diesen Fehler zurück: ValidationException: The schema parameter isn't supported. Im folgenden Beispiel wird ein Daten-API-Aufruf angezeigt, der den Fehler ValidationException zurückgibt.
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"
Um dieses Problem zu lösen, entfernen Sie den Parameter Schema aus Ihrem API-Aufruf.
Das folgende Beispiel zeigt einen Daten-API-Aufruf, bei dem der Parameter Schema entfernt wurde.
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"