¿puede AWS Lambda conectarse a la base de datos MySQL de RDS y actualizar la base de datos?


Estoy intentando conectar la función AWS Lambda a la base de datos mysql RDS.
Quería actualizar la base de datos desde mi función lambda. ¿Es posible acceder a RDS especificando el Rol de IAM y la Política de acceso?.
Puedo conectarme a mysql databse usando mysql client.pero cuando me pruebo con Lambda no puedo hacer eso. aquí está mi código.

console.log('Loading function');
var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();
var mysql = require('mysql');
exports.handler = function(event, context) {
    //console.log('Received event:', JSON.stringify(event, null, 2));  
    var operation = event.operation;
    delete event.operation;
    switch (operation) {
        case 'create':
            var conn = mysql.createConnection({
                host: 'lamdatest.********.rds.amazonaws.com', // RDS endpoint 
                user: 'user', // MySQL username 
                password: 'password', // MySQL password 
                database: 'rdslamda'
            });
            conn.connect();
            console.log("connecting...");
            conn.query('INSERT INTO login (name,password) VALUES("use6","password6")', function(err, info) {
                console.log("insert: " + info.msg + " /err: " + err);
            });
            console.log("insert values in to database");
            break;
        case 'read':
            dynamo.getItem(event, context.done());
            break;

        default:
            context.fail(new Error('Unrecognized operation "' + operation + '"'));

    }
    context.succeed();
};
Author: Eknoes, 2015-08-04

4 answers

Sí. Puede acceder a una base de datos MySQL RDS desde AWS Lambda.

Puede usar la biblioteca node-mysql.

Sin embargo, hay una gran advertencia que va con ella.

AWS Lambda (actualmente) no tiene acceso a subredes privadas dentro de una VPC. Por lo tanto, para que AWS Lambda pueda acceder a su base de datos RDS, debe ser de acceso público, lo que podría suponer un riesgo de seguridad para usted.

Actualizar (2015-10-30): AWS Lambda anunció el próximo soporte de VPC (a partir de re:Invent 2015), por lo que esto no será un problema por mucho más tiempo.

Actualización (2015-11-17) : AWS Lambda todavía no tiene compatibilidad con VPC.

Actualización (2016-02-11) : AWS Lambda ahora puede acceder a los recursos de VPC:

Https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/

Para lograr esta funcionalidad, su función Lambda en realidad, ejecute dentro de su VPC en una subred. Algunas advertencias vienen con esta funcionalidad:

  • La subred VPC necesita suficientes direcciones IP libres para manejar el escalado de Lambda
  • Si su función Lambda necesita acceso a Internet, entonces su subred VPC designada necesitará una puerta de enlace de Internet o NAT
 71
Author: Matt Houser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-12 01:38:29

Dado que Lambda usa Node.js, Java y Python como un lenguaje de programación/scripting backend, definitivamente puede usarlo para conectarse a RDS. (Link )

Finalmente, Esta es la documentación sobre la especificación de roles de IAM cuando se conecta a RDS. (Ver imagen abajo):

introduzca la descripción de la imagen aquí

 4
Author: Jordan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-04 15:29:38

Prueba este tutorial: http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html

En este tutorial, haz lo siguiente:

Inicie una instancia de Amazon RDS MySQL database engine en su Amazon VPC predeterminado.

En la instancia de MySQL, se crea una base de datos (ExampleDB) con una tabla de ejemplo (Employee) en ella.

Crear una función Lambda para acceder a la base de datos ExampleDB, crear una tabla (Empleado), añadir unos pocos registros, y recuperar los registros de la tabla.

Invoque la función Lambda manualmente y verifique los resultados de la consulta.

 4
Author: Pallav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-12 10:51:00

Solo quería actualizar la base de datos desde mi función lambda. ¿Es posible acceder a RDS especificando el Rol de IAM y la Política de acceso?.

No, no puedes. Debe proporcionar la url/nombre de usuario/contraseña de la base de datos para conectarse. Es posible que necesite ejecutar Lambda en la misma VPC si está en una subred privada. Ver mis consejos a continuación.

Puedo conectarme a mysql databse usando mysql client.pero cuando me pruebo con Lambda no puedo hacer eso.

Esto es estricto No, No! Su RDS no debe ser accesible desde Internet a menos que realmente lo necesite. Intente ejecutarlo en una subred privada y configure otros servicios de AWS en consecuencia.

Dos centavos de mi extremo si usted está recibiendo tiempos de espera acceder a recursos de Lambda-

  1. Por defecto Lambda tiene acceso a Internet y puede acceder a recursos en línea.
  2. Lambda no puede acceder a servicios rurnning en subred privada de su VPC.
  3. Para conectarse a servicios en subred privada necesita ejecutar el lambda es subred privada. Para ello, debe ir a la sección de red y configurar su VPC, subredes y grupo de seguridad.
  4. Sin embargo, tenga en cuenta que cuando haga esto perderá acceso a Internet. Si todavía necesita acceso a Internet, tendrá que activar una puerta de enlace NAT o una instancia NAT en la subred pública y configurar la ruta de la subred privada a esta NAT.
  5. Me enfrenté a esto cuando intentaba conectarme a RDS en subred privada desde mi lambda. Desde que usé KMS para cifrar algunas variables de entorno y parte de descifrado requiere acceso a Internet Tuve que usar una puerta de enlace NAT.

Más detalles - http://docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-internet

Cómo conectarse a postgres RDS desde AWS Lambda

 2
Author: Aniket Thakur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-23 12:41:02