Configuración del acceso a la base de datos para una función Lambda
Puede crear un proxy de base de datos Amazon RDS Proxy para su función. Un proxy de base de datos administra un conjunto de conexiones de base de datos y transmite consultas desde una función. Esto permite que una función alcance altos niveles de simultaneidad sin agotar las conexiones de base de datos.
Secciones
Creación de un proxy de base de datos (consola)
Puede utilizar la consola Lambda para crear un proxy de base de datos de Amazon RDS Proxy.
Para crear un proxy de base de datos
Abra la página de Functions
(Funciones) en la consola de Lambda. -
Elija una función.
-
Elija Configuración y, a continuación, seleccione Proxies de basede datos.
-
Elija Add database proxy (Agregar proxy de base de datos).
-
Configure las siguientes opciones.
-
Identificador de proxy: el nombre del proxy.
-
Instancia de base de datos RDS: una instancia de base de datos o clúster de MySQL o PostgreSQL compatible.
-
Secreto: un secreto de Secrets Manager con el nombre de usuario y la contraseña de la base de datos.
ejemplo secreta
{ "username": "admin", "password": "e2abcecxmpldc897" }
-
Rol de IAM: un rol de IAM con permiso para usar el secreto y una política de confianza que permite a Amazon RDS asumir el rol.
-
Autenticación: método de autenticación y autorización para conectarse al proxy desde el código de función.
-
-
Elija Add (Agregar).
Amazon RDS cobra un precio por hora para los proxies que está determinado por el tamaño de instancia de su base de datos. Para obtener más información, consulte Precios del proxy de RDS
La creación de proxy tarda unos minutos. Cuando el proxy esté disponible, configure su función para que se conecte al punto de enlace del proxy en lugar del punto de enlace de la base de datos.
Se aplican los precios de Amazon RDS Proxy (Amazon RDS Proxy)
Uso de los permisos de la función para autenticación
De forma predeterminada, puede conectarse a un proxy con el mismo nombre de usuario y contraseña que utiliza para conectarse a la base de datos. La única diferencia en su código de función es el punto de enlace al que se conecta el cliente de base de datos. El inconveniente de este método es que debe exponer la contraseña a su código de función, ya sea configurándola en una variable de entorno seguro o recuperándola de Secrets Manager.
Puede crear un proxy de base de datos que utilice las credenciales de IAM de la función para la autenticación y autorización en lugar de una contraseña. Para utilizar los permisos de la función para conectarse al proxy, establezca la función Authentication (Autenticación) en Execution role (Rol de ejecución).
La consola de Lambda agrega el permiso requerido (rds-db:connect
) al rol de ejecución. A continuación, puede utilizar el SDK de AWS para generar un token que le permita conectarse al proxy. El siguiente ejemplo muestra cómo configurar una conexión de base de datos con la biblioteca mysql2
en Node.js.
ejemplo dbadmin/index-iam.js : AWS SDK Signer
const signer = new AWS.RDS.Signer({ region: region, hostname: host, port: sqlport, username: username })
exports.handler = async (event) => { let connectionConfig = { host : host, user : username, database : database, ssl: 'Amazon RDS',authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() }
} var connection = mysql.createConnection(connectionConfig) var query = event.query var result connection.connect() }
Para obtener más información, consulte Autenticación de bases de datos de IAM en la Guía del usuario de Amazon RDS.
Aplicación de muestra
Las aplicaciones de muestra que presentan el uso de Lambda con una base de datos de Amazon RDS están disponibles en el repositorio GitHub de esta guía. Hay dos aplicaciones:
-
RDS MySQL
: la plantilla de AWS CloudFormation template-vpcrds.yml
crea una base de datos de MySQL 5.7 en una VPC privada. En la aplicación de muestra, una función de Lambda intercepta las consultas a la base de datos. Tanto la función como las plantillas de base de datos utilizan Secrets Manager para obtener acceso a las credenciales de la base de datos. -
Administrador de listas
: una función del procesador lee los eventos de un flujo de Kinesis. Utiliza los datos de los eventos para actualizar las tablas de DynamoDB y almacena una copia del evento en una base de datos de MySQL.
Para utilizar las aplicaciones de muestra, siga las instrucciones del repositorio GitHub: RDS MySQL