Recientemente trabajé en un proyecto que requería crear y adjuntar un RDS Proxy a una instancia RDS ya existente ejecutando PostgreSQL. Parece bastante fácil, pero seguía obteniendo un error de validación que tomó algún tiempo resolver.
Lo Que Estaba Haciendo (Esto No Funciona)
Mi primer intento usó la función estándar fromLookup
para referenciar una base de datos existente:
...
const coolDatabase = rds.DatabaseInstance.fromLookup(this, 'coolDB', {
instanceIdentifier: props.databaseInstanceId,
})
const dbProxy = coolDatabase.addProxy('coolDBProxy', {
secrets: [<relevant_secrets>],
vpc: <relevant_vpc>,
securityGroups: [<relevant_security_groups>],
});
...
Este código recupera información de una instancia RDS usando la función fromLookup
con un identificador de base de datos pasado a través de props, luego llama addProxy
para crear y adjuntar un proxy RDS.
Bastante fácil, ¿verdad? Cuando intenté desplegar mi stack seguía obteniendo este error de validación:
Could not determine engine for proxy target 'coolStack/coolDB'.
Please provide it explicitly when importing the resource at path
[coolStack/coolDB/coolProxy] in aws-cdk-lib.aws_rds.DatabaseProxy
El Problema
La esencia del asunto es que la función fromLookup
no puebla el campo engine usado por la base de datos. Internamente, este valor es importante para el código que crea y conecta el RDS Proxy, por lo que te presenta un error de validación.
La Solución
Usa fromDatabaseInstanceAttributes
en lugar de fromLookup
. Esta función te permite especificar explícitamente el motor de base de datos, resolviendo nuestro problema. La desventaja es que la llamada requiere información adicional sobre la base de datos:
- Identificador de instancia
- Dirección del endpoint de instancia
- Número de puerto
- Grupos de seguridad (pueden dejarse vacíos si es necesario)
El código corregido se ve así:
const coolDatabase = rds.DatabaseInstance.fromDatabaseInstanceAttributes(this,'coolDB',
{
instanceIdentifier: props.databaseInstanceId,
instanceEndpointAddress: props.databaseInstanceEndpoint,
port: 5432, // because Postgres
securityGroups: [<relevant_security_groups>], // This can be left empty in a pinch
engine: rds.DatabaseInstanceEngine.POSTGRES, // <- Magic happening right there
}
);
const dbProxy = coolDatabase.addProxy('coolDBProxy', {
secrets: [<relevant_secrets>],
vpc: <relevant_secrets>,
securityGroups: [<relevant_security_groups>],
});
Al establecer explícitamente el campo engine, CDK tiene toda la información que necesita para configurar apropiadamente el RDS Proxy. La llamada addProxy
ahora tendrá éxito sin errores de validación.
Aunque esta solución funciona, no es ideal. Preferiría pasar el motor directamente a la función fromLookup
, pero en julio de 2025, usar fromDatabaseInstanceAttributes
es probablemente la forma más directa de resolver este problema.
Si te has encontrado con este problema específico, ¡bienvenido a nuestro exclusivo club! Probablemente solo hay un puñado de personas que se han topado con este escenario exacto, pero espero que esta guía te ahorre algo de tiempo de debugging/corrección.
¡Espero que esto te sea útil!