Configuración del acceso a la base de datos para una función Lambda - AWS Lambda

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.

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

  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija una función.

  3. Elija Configuración y, a continuación, seleccione Proxies de basede datos.

  4. Elija Add database proxy (Agregar proxy de base de datos).

  5. 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.

  6. Elija Add (Agregar).

Precios

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 Proxy de Amazon RDS estándar. Para obtener más información, consulte Administración de conexiones con el proxy de Amazon RDS en la Guía del usuario de Amazon Aurora.

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.

    
              The dbadmin function relays queries to a database.

  • 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.

    
              The processor function processes Kinesis events and stores the events in a
                MySQL database.

Para utilizar las aplicaciones de muestra, siga las instrucciones del repositorio GitHub: RDS MySQL, Administrador de listas.