Comparación de los comportamientos de la API de datos de Amazon RDS para clústeres de Aurora Serverless v2 y aprovisionados con clústeres de Aurora Serverless v1
Las mejoras más recientes de las API de datos de Amazon RDS permiten que las API de datos estén disponibles para los clústeres que utilizan versiones recientes de los motores de PostgreSQL o MySQL. Estos clústeres se pueden configurar para el uso de Aurora Serverless v2 o de clases de instancias aprovisionadas, como db.r6g
o db.r6i
.
Las secciones siguientes describen las diferencias de la API de datos de Amazon RDS entre clústeres de bases de datos de Aurora Serverless v2 y aprovisionados y los clústeres de bases de datos de Aurora Serverless v1. Aurora Serverless v1 Los clústeres de bases de datos utilizan el modo de motor serverless
. Los clústeres de bases de datos aprovisionados utilizan el modo de motor provisioned
. Un clúster de base de datos de Aurora Serverless v2 también utiliza el modo de motor provisioned
y contiene una o más instancias de base de datos de Aurora Serverless v2 con la clase de instancia db.serverless
.
Número máximo de solicitudes por segundo
Aurora Serverless v1
Las API de datos pueden realizar hasta 1000 solicitudes por segundo.
Aurora Serverless v2
Las API de datos pueden realizar un número ilimitado de solicitudes por segundo.
Habilitación o desactivación de la API de datos de Amazon RDS en una base de datos existente
Aurora Serverless v1
-
Con la API de Amazon RDS: use la operación
ModifyCluster
y especifiqueTrue
oFalse
, según proceda, para el parámetroEnableHttpEndpoint
. -
Con la AWS CLI: use la operación
modify-db-cluster
con la opción--enable-http-endpoint
o--no-enable-http-endpoint
, según proceda.
Aurora Serverless v2
-
Con la API de Amazon RDS: utilice las operaciones
EnableHttpEndpoint
yDisableHttpEndpoint
. -
Con la AWS CLI: utilice las operaciones
enable-http-endpoint
ydisable-http-endpoint
.
Eventos de CloudTrail
Aurora Serverless v1
Los eventos de las llamadas a la API de datos son eventos de administración. De forma predeterminada, estos eventos se incluyen automáticamente de un registro. Para obtener más información, consulte Excluir eventos de la API de datos de un seguimiento de AWS CloudTrail (solo Aurora Serverless v1).
Aurora Serverless v2
Los eventos de las llamadas a la API de datos son eventos de datos. De forma predeterminada, estos eventos se excluyen automáticamente de un registro. Para obtener más información, consulte Inclusión de eventos de la API de datos en un seguimiento de AWS CloudTrail.
Compatibilidad con instrucciones múltiples
Aurora Serverless v1
-
Aurora MySQL no admite las instrucciones múltiples.
-
Para Aurora PostgreSQL, las instrucciones múltiples devuelven solo la primera respuesta a la consulta.
Aurora Serverless v2
Las instrucciones múltiples no son compatibles. Intentar ejecutar varias instrucciones en una sola llamada a la API devuelve “An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”
. Para ejecutar varias instrucciones, realice llamadas a la API ExecuteStatement
independientes o utilice BatchExecuteStatement
para el procesamiento por lotes.
El siguiente ejemplo muestra el mensaje de error resultante de una llamada a la API que intenta ejecutar una instrucción múltiple.
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.
El siguiente ejemplo ejecuta varias instrucciones con llamadas a la API ExecuteStatement
independientes.
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;"
Solicitudes simultáneas para el mismo ID de transacción
Aurora Serverless v1
Las solicitudes subsiguientes esperan hasta que finalice la solicitud actual. Su aplicación debe gestionar los errores de tiempo de espera si el período de espera es demasiado largo.
Aurora Serverless v2
Cuando la API de datos recibe varias solicitudes con el mismo ID de transacción, devuelve inmediatamente este error:
DatabaseErrorException: Transaction is still running a query
Este error se produce en dos situaciones:
-
La aplicación realiza solicitudes asíncronas (como las promesas de JavaScript) con el mismo ID de transacción.
-
Aún se está procesando una solicitud anterior con ese ID de transacción.
El siguiente ejemplo muestra todas las solicitudes ejecutadas en paralelo con 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);
Para resolver este error, espere a que finalice la solicitud actual antes de enviar otra solicitud con el mismo ID de transacción o elimine el ID de transacción para permitir las solicitudes en paralelo.
El siguiente ejemplo muestra una llamada a la API que utiliza la ejecución secuencial con el mismo ID de transacción.
for (let i = 0; i < 10; i++) { await client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ).promise() ); }
Comportamiento de BatchExecuteStatement
Para obtener más información acerca de BatchExecuteStatement
, consulte BatchExecuteStatement.
Aurora Serverless v1
El objeto de campos generado en el resultado de la actualización incluye los valores insertados.
Aurora Serverless v2
-
Para Aurora MySQL, el objeto de campos generado en el resultado de la actualización incluye los valores insertados.
-
En Aurora PostgreSQL, el objeto de campos generado está vacío.
Comportamiento de ExecuteSQL
Para obtener más información acerca de ExecuteSQL
, consulte ExecuteSQL.
Aurora Serverless v1
La operación ExecuteSQL
no está disponible.
Aurora Serverless v2
La operación ExecuteSQL
no es compatible.
Comportamiento de ExecuteStatement
Para obtener más información acerca de ExecuteStatement
, consulte ExecuteStatement.
Aurora Serverless v1
El parámetro ExecuteStatement
admite la recuperación de columnas de matrices multidimensionales y todos los tipos de datos avanzados.
Aurora Serverless v2
El parámetro ExecuteStatement
no admite columnas de matrices multidimensionales. Tampoco admite determinados tipos de datos de PostgreSQL, incluidos los tipos geométricos y monetarios. Cuando una API de datos encuentra un tipo de datos no compatible, devuelve este error: UnsupportedResultException: The result contains the unsupported data type data_type
.
Para evitar este problema, convierta el tipo de datos no compatible a TEXT
. El siguiente ejemplo convierte un tipo de datos no compatible en TEXT
.
SELECT custom_type::TEXT FROM my_table;-- ORSELECT CAST(custom_type AS TEXT) FROM my_table;
Para obtener una lista de los tipos de datos admitidos para cada motor de base de datos de Aurora, consulte Referencia de operaciones de la API de datos.
Comportamiento del parámetro de esquema
Aurora Serverless v1
El parámetro Schema
no es compatible. Cuando incluye el parámetro Schema
en una llamada a la API, la API de datos lo ignora.
Aurora Serverless v2
El parámetro Schema
no está disponible. Cuando incluye el parámetro Schema
en una llamada a la API, la API de datos devuelve este error: ValidationException: The schema parameter isn't supported
. El siguiente ejemplo muestra una llamada a la API de datos que devuelve el error ValidationException
.
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"
Para solucionar este problema, elimine el parámetro Schema
de la llamada a la API.
El siguiente ejemplo muestra una llamada a la API de datos con el parámetro Schema
eliminado.
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"