Conceptos y terminología de RDS Proxy
Puede simplificar la administración de conexiones de las instancias de base de datos de Amazon RDS usando RDS Proxy.
RDS Proxy controla el tráfico de red entre la aplicación cliente y la base de datos. Lo hace de una manera activa, comprendiendo primero el protocolo de base de datos. A continuación, ajusta su comportamiento en función de las operaciones SQL de la aplicación y los conjuntos de resultados de la base de datos.
RDS Proxy reduce la sobrecarga de memoria y CPU para la administración de conexiones en la base de datos. La base de datos necesita menos memoria y recursos de CPU cuando las aplicaciones abren muchas conexiones simultáneas. Tampoco requiere lógica en las aplicaciones para cerrar y volver a abrir conexiones que permanecen inactivas durante mucho tiempo. Del mismo modo, requiere menos lógica de aplicación para restablecer conexiones en caso de un problema de base de datos.
La infraestructura para RDS Proxy está altamente disponible e implementada en varias zonas de disponibilidad (AZ). El cálculo, la memoria y el almacenamiento de RDS Proxy son independientes de las instancias de base de datos de RDS. Esta separación ayuda a reducir la sobrecarga en los servidores de bases de datos, de modo que puedan dedicar sus recursos a servir cargas de trabajo de base de datos. Los recursos informáticos de RDS Proxy no tienen servidor y se escalan automáticamente en función de la carga de trabajo de la base de datos.
Temas
Información general de los conceptos de RDS Proxy
RDS Proxy gestiona la infraestructura para llevar a cabo la agrupación de conexiones y las demás características descritas en las siguientes secciones. Puede ver los proxies representados en la consola de RDS en la página Proxies.
Cada proxy gestiona las conexiones a una única instancia de base de datos de RDS. El proxy determina automáticamente la instancia de escritor actual para la instancia o clúster de base de datos de RDS Multi-AZ.
Las conexiones que un proxy mantiene abiertas y disponibles para que las aplicaciones de base de datos puedan utilizar el grupo de conexiones.
De forma predeterminada, RDS Proxy puede reutilizar una conexión después de cada transacción en la sesión. Esta reutilización en el nivel de transacción se denomina multiplexación. Cuando RDS Proxy elimina temporalmente una conexión del grupo de conexiones para reutilizarla, esa operación se denomina préstamo de la conexión. Cuando sea seguro hacerlo, RDS Proxy devuelve esa conexión al grupo de conexiones.
En algunos casos, RDS Proxy no puede estar seguro de que sea seguro volver a utilizar una conexión de base de datos fuera de la sesión actual. En estos casos, mantiene la sesión en la misma conexión hasta que finalice la sesión. Este comportamiento de reserva se denomina fijación.
Un proxy tiene un punto de enlace predeterminado. Se conecta a este punto de conexión cuando trabaja con una instancia de base de datos de Amazon RDS. Lo hace en lugar de conectarse al punto de conexión de lectura y escritura que se conecta directamente a la instancia. Para los clústeres de bases de datos de RDS, también puede crear puntos de conexión de lectura o escritura y de solo lectura adicionales. Para obtener más información, consulte Información general de los puntos de enlace de proxy.
Por ejemplo, aún puede conectarse al punto de enlace del clúster para conexiones de lectura y escritura sin agrupación de conexiones. Aún puede conectarse al punto de enlace del lector para conexiones de solo lectura con equilibrio de carga. Aún puede conectarse a los puntos de conexión de instancia para el diagnóstico y la resolución de problemas de instancias de base de datos específicas dentro de un clúster. Si utiliza otros servicios de AWS como AWS Lambda para conectarse a bases de datos de RDS, cambie la configuración de conexión para utilizar el punto de conexión del proxy. Por ejemplo, especifique el punto de enlace del proxy para permitir que las funciones de Lambda accedan a la base de datos mientras aprovechan la funcionalidad del RDS Proxy.
Cada proxy contiene un grupo de destino. Este grupo de destino abarca la instancia de base de datos de RDS que se puede conectar con el proxy. La instancia de base de datos de RDS asociada con un proxy se denomina destino de ese proxy. Para mayor comodidad, al crear un proxy a través de la consola, RDS Proxy también crea el grupo de destino correspondiente y registra los destinos asociados automáticamente.
Una familia de motores es un conjunto relacionado de motores de base de datos que utilizan el mismo protocolo de base de datos. Elija la familia de motores para cada proxy que cree.
Grupo de conexiones
Cada proxy realiza la agrupación de conexiones para la instancia de escritor de su base de datos de RDS asociada. La agrupación de conexiones es una optimización que reduce la sobrecarga asociada a la apertura y el cierre de conexiones y al mantenimiento de muchas conexiones abiertas simultáneamente. Esta sobrecarga incluye la memoria necesaria para gestionar cada nueva conexión. También implica una sobrecarga de la CPU para cerrar cada conexión y abrir una nueva. Los ejemplos incluyen el protocolo de enlace Transport Layer Security/Secure Sockets Layer (TLS/SSL), autenticación, capacidades de negociación, etc. La agrupación de conexiones simplifica la lógica de la aplicación. No es necesario escribir código de aplicación para minimizar el número de conexiones abiertas simultáneas.
Además, todos los proxies hacen multiplexación de conexión, algo conocido también como reutilización de la conexión. Con la multiplexación, el proxy de RDS realiza todas las operaciones de una transacción mediante una conexión de base de datos subyacente. A continuación, RDS puede usar una conexión diferente para la siguiente transacción. Puede abrir muchas conexiones simultáneas al proxy y el proxy mantiene un número menor de conexiones abiertas a la instancia de base de datos o al clúster. Al hacerlo, se minimiza aún más la sobrecarga de memoria para las conexiones en el servidor de base de datos. Esta técnica también reduce la posibilidad de errores de «demasiadas conexiones».
Seguridad de RDS Proxy
El proxy de RDS utiliza los mecanismos de seguridad de RDS existentes, como TLS/SSL e AWS Identity and Access Management (IAM). Para obtener información general acerca de esas características de seguridad, consulte Seguridad en Amazon RDS. Además, asegúrese de familiarizarse con la forma en la que RDS trabaja con autenticación, autorización y otras áreas de seguridad.
RDS Proxy puede actuar como una capa adicional de seguridad entre las aplicaciones cliente y la base de datos subyacente. Por ejemplo, puede conectarse al proxy mediante TLS 1.3, incluso si la instancia de base de datos subyacente admite una versión más antigua de TLS. Puede conectarse al proxy mediante un rol de IAM. Esto es así incluso si el proxy se conecta a la base de datos mediante el método nativo de autenticación de usuario y contraseña. Mediante esta técnica, puede imponer requisitos de autenticación sólidos para las aplicaciones de base de datos sin un esfuerzo de migración costoso para las propias instancias de base de datos.
Almacene las credenciales de base de datos utilizadas por el proxy de RDS en AWS Secrets Manager. Cada usuario de base de datos para la instancia de base de datos de RDS a la que accede un proxy debe tener un secreto correspondiente en Secrets Manager. También puede configurar la autenticación de IAM para los usuarios de RDS Proxy. Al hacerlo, puede aplicar la autenticación de IAM para el acceso a la base de datos incluso si las bases de datos utilizan la autenticación de contraseña nativa. Recomendamos utilizar estas características de seguridad en lugar de incorporar credenciales de base de datos en el código de la aplicación.
Uso de TLS/SSL con RDS Proxy
Puede conectarse a RDS Proxy con el protocolo TLS/SSL.
nota
El proxy de RDS utiliza certificados de AWS Certificate Manager (ACM). Si está utilizando RDS Proxy, no es necesario descargar certificados de Amazon RDS ni actualizar aplicaciones que usen conexiones RDS Proxy.
Para aplicar TLS a todas las conexiones entre el proxy y la base de datos, puede especificar la configuración Exigir Transport Layer Security al crear o modificar un proxy en la AWS Management Console.
RDS Proxy puede también garantizar que la sesión utiliza TLS/SSL entre el cliente y el punto de enlace de RDS Proxy. Para que RDS Proxy lo haga, especifique el requisito en el lado del cliente. Las variables de sesión SSL no están establecidas para las conexiones SSL a una base de datos usando RDS Proxy.
-
En el caso de RDS para MySQL, especifique el requisito en el lado del cliente con el parámetro
--ssl-mode
cuando ejecute el comandomysql
. -
En el caso de Amazon RDS PostgreSQL, especifique
sslmode=require
como parte de la cadenaconninfo
cuando ejecute el comandopsql
.
RDS Proxy admite las versiones 1.0, 1.1, 1.2 y 1.3 del protocolo TLS. Puede conectarse al proxy mediante una versión de TLS posterior a la que utiliza en la base de datos subyacente.
De forma predeterminada, los programas del cliente establecen una conexión cifrada con RDS Proxy, con un mayor control disponible gracias a la opción --ssl-mode
. Desde el lado del cliente, RDS Proxy es compatible con todos los modos de SSL.
Para el cliente, los modos SSL son los siguientes:
- PREFERRED
-
SSL es la primera opción, pero no es necesaria.
- DISABLED
-
No se permite SSL.
- REQUIRED
-
Obliga a usar SSL.
- VERIFY_CA
-
Implemente SSL y verifique la entidad de certificación (CA).
- VERIFY_IDENTITY
-
Obliga a usar SSL y comprueba CA y el nombre de host de CA.
Cuando se utiliza un cliente con --ssl-mode
VERIFY_CA
o VERIFY_IDENTITY
, especifique que la opción de --ssl-ca
y apunte a una autoridad certificadora en formato .pem
. Para usar el archivo .pem
, descargue todos los PEM de CA raíz desde Amazon Trust Services.pem
.
RDS Proxy utiliza certificados comodín, que se aplican tanto a un dominio como a sus subdominios. Si utiliza el cliente mysql
para conectarse con el modo SSL VERIFY_IDENTITY
, actualmente deberá usar el comando mysql
compatible con MySQL 8.0.
Conmutación por error
La conmutación por error es una característica de alta disponibilidad que reemplaza una instancia de base de datos por otra cuando la instancia original deja de estar disponible. Puede producirse una conmutación por error debido a un problema con una instancia de base de datos. También es posible que sea parte de los procedimientos normales de mantenimiento, como durante la actualización de una base de datos. La conmutación por error se aplica a las instancias de base de datos de RDS en una configuración Multi-AZ.
La conexión a través de un proxy hace que las aplicaciones sean más resistentes a las conmutaciones por error de la base de datos. Cuando la instancia de base de datos original deja de estar disponible, RDS Proxy se conecta a la base de datos en espera sin perder las conexiones de aplicaciones inactivas. Esto le ayuda a acelerar y simplificar el proceso de conmutación por error. Esto es menos disruptivo para la aplicación que un problema típico de reinicio o base de datos.
Sin RDS Proxy, una conmutación por error implica una breve interrupción. Durante la interrupción, no puede realizar operaciones de escritura en esa base de datos en conmutación por error. Las conexiones de base de datos existentes se interrumpen y la aplicación debe volver a abrirlas. La base de datos está disponible para nuevas conexiones y operaciones de escritura cuando se promociona una instancia de base de datos de solo lectura para que tome el lugar de la que no está disponible.
Durante las conmutaciones por error de la base de datos, RDS Proxy continúa aceptando conexiones en la misma dirección IP y dirige automáticamente las conexiones a la nueva instancia de base de datos primaria. Los clientes que se conectan a través de RDS Proxy no son susceptibles a lo siguiente:
-
Retrasos de propagación del sistema de nombres de dominio (DNS) en la conmutación por error.
-
Almacenamiento en caché de DNS local.
-
Tiempos de espera de conexión.
-
Incertidumbre sobre qué instancia de base de datos es el escritor actual.
-
Espera a la respuesta de una consulta de un escritor anterior que dejó de estar disponible sin cerrar las conexiones.
En el caso de las aplicaciones que mantienen su propio grupo de conexiones, pasar por RDS Proxy significa que la mayoría de las conexiones permanecen activas durante las conmutaciones por error u otras interrupciones. Solo se cancelan las conexiones que están en medio de una transacción o sentencia SQL. El proxy de RDS acepta inmediatamente nuevas conexiones. Cuando el escritor de la base de datos no está disponible, RDS Proxy pone en cola las solicitudes entrantes.
Para aplicaciones que no mantienen sus propios grupos de conexiones, RDS Proxy ofrece velocidades de conexión más rápidas y conexiones más abiertas. Descarga la costosa sobrecarga de reconexiones frecuentes de la base de datos. Lo hace reutilizando las conexiones de base de datos que se mantienen en el grupo de conexiones de RDS Proxy. Este enfoque es especialmente importante para las conexiones TLS, en las que los costos de instalación son importantes.
Transacciones
Todas las instrucciones dentro de una sola transacción siempre utilizan la misma conexión de base de datos subyacente. La conexión está disponible para su uso por parte de una sesión diferente cuando finaliza la transacción. El uso de la transacción como unidad de granularidad tiene las siguientes consecuencias:
-
La reutilización de la conexión puede ocurrir después de cada instrucción individual cuando se ha activado la configuración
autocommit
de RDS para MySQL. -
Por el contrario, cuando el parámetro
autocommit
está desactivada, la primera instrucción que emita en una sesión comienza una nueva transacción. Por ejemplo, suponga que introduce una secuencia deSELECT
,INSERT
,UPDATE
y otras instrucciones de lenguaje de manipulación de datos (DML). En este caso, la reutilización de la conexión no se producirá hasta que emita unCOMMIT
,ROLLBACK
o finalice la transacción. -
La introducción de una instrucción de lenguaje de definición de datos (DDL) hace que la transacción finalice después de que se complete esa instrucción.
RDS Proxy detecta cuándo finaliza una transacción a través del protocolo de red utilizado por la aplicación cliente de base de datos. La detección de transacciones no se basa en palabras clave como COMMIT
o ROLLBACK
que aparecen en el texto de la instrucción SQL.
En algunos casos, RDS Proxy podría detectar una solicitud de base de datos que hace que sea poco práctico trasladar la sesión a una conexión diferente. En estos casos, desactiva la multiplexación para esa conexión el resto de la sesión. La misma regla se aplica si RDS Proxy no puede estar seguro de que la multiplexación sea práctica para la sesión. Esta operación se denomina fijación. Para obtener información sobre formas de detectar y minimizar la fijación, consulte Cómo evitar la fijación de RDS Proxy.