web-dev-qa-db-fra.com

AWS Lambda peut-il se connecter à la base de données mySQL RDS et mettre à jour la base de données?

J'essaie de connecter la fonction AWS Lambda à la base de données mysql RDS.
Je voulais juste mettre à jour la base de données à partir de ma fonction lambda. Est-il possible d'accéder à RDS en spécifiant le rôle et la stratégie d'accès IAM?.
Je peux me connecter à mysql databse en utilisant mysql client. voici mon code.

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();
};
42
ARUNBALAN NV

Oui. Vous pouvez accéder à une base de données MySql RDS depuis AWS Lambda.

Vous pouvez utiliser node-mysql bibliothèque.

Cependant, il y a une grande mise en garde qui va avec.

AWS Lambda n'a pas (actuellement) accès aux sous-réseaux privés d'un VPC. Par conséquent, pour qu'AWS Lambda puisse accéder à votre base de données RDS, celle-ci doit être accessible au public, ce qui peut constituer un risque pour la sécurité.

Mise à jour (2015-10-30) : AWS Lambda a annoncé la prise en charge prochaine du VPC ( à compter de re: Invent 2015 ), donc ce ne sera plus un problème pour longtemps.

Mise à jour (2015-11-17) : AWS Lambda ne prend toujours pas en charge le VPC.

Mise à jour (2016-02-11) : AWS Lambda peut désormais accéder aux ressources VPC:

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

Pour obtenir cette fonctionnalité, votre fonction Lambda sera exécutée dans votre VPC dans un sous-réseau. Certaines mises en garde viennent avec cette fonctionnalité:

  • Le sous-réseau VPC nécessite suffisamment d'adresses IP libres pour gérer la mise à l'échelle de Lambda
  • Si votre fonction Lambda nécessite un accès Internet, le sous-réseau VPC désigné aura besoin d'une passerelle Internet ou d'un NAT.
77
Matt Houser

essayez ce tutoriel: http://docs.aws.Amazon.com/lambda/latest/dg/vpc-rds.html

Dans ce tutoriel, vous procédez comme suit:

Lancez une instance de moteur de base de données Amazon RDS MySQL dans votre Amazon VPC par défaut.

Dans l'instance MySQL, vous créez une base de données (ExampleDB) contenant un exemple de table (Employee).

Créez une fonction Lambda pour accéder à la base ExampleDB, créez une table (Employé), ajoutez quelques enregistrements et récupérez les enregistrements de la table.

Appelez la fonction Lambda manuellement et vérifiez les résultats de la requête.

6
Pallav

Puisque Lambda utilise Node.js, Java et Python en tant que langage de programmation/script backend, vous pouvez certainement l’utiliser pour vous connecter à RDS. ( Lien )

Enfin, This est la documentation sur la spécification des rôles IAM lors de la connexion à RDS. (Voir image ci-dessous):

enter image description here

4
Jordan

Je voulais juste mettre à jour la base de données à partir de ma fonction lambda. Est-il possible d'accéder à RDS en spécifiant le rôle IAM et la stratégie d'accès?.

Non tu ne peux pas. Vous devez fournir l'URL de la base de données, le nom d'utilisateur et le mot de passe pour vous connecter. Vous devrez peut-être exécuter Lambda dans le même VPC s'il se trouve dans un sous-réseau privé. Voir mes pointeurs ci-dessous.

Je peux me connecter à MySQL databse en utilisant mysql client.Mais quand j'essaie sur lambda, je ne peux pas le faire.

Ceci est strict Non, non! Votre RDS ne devrait pas être accessible depuis Internet à moins que vous n'en ayez vraiment besoin. Essayez de l'exécuter dans un sous-réseau privé et configurez les autres services AWS en conséquence.

Deux centimes de mon côté si vous obtenez des délais d’accès avec des ressources provenant de Lambda-

  1. Par défaut, Lambda a un accès Internet et peut accéder à des ressources en ligne.
  2. Lambda ne peut pas accéder aux services qui tournent dans le sous-réseau privé de votre VPC.
  3. Pour vous connecter à des services dans un sous-réseau privé, vous devez exécuter le sous-réseau lambda est privé. Pour cela, vous devez accéder à la section Réseau et configurer votre VPC, vos sous-réseaux et votre groupe de sécurité.
  4. Cependant, notez que lorsque vous faites cela, vous perdez l'accès à Internet. Si vous avez toujours besoin d'un accès Internet, vous devrez créer une passerelle NAT ou NAT dans un sous-réseau public et configurer un itinéraire de sous-réseau privé) vers ce NAT.
  5. J'ai fait face à cela quand j'essayais de me connecter à RDS dans un sous-réseau privé à partir de mon lambda. Depuis que j'ai utilisé KMS pour chiffrer certaines variables d’environnement et que le décryptage nécessite un accès Internet, je devais utiliser une passerelle NAT).

Plus de détails - http://docs.aws.Amazon.com/lambda/latest/dg/vpc.html#vpc-internet

Comment se connecter à postgres RDS depuis AWS Lambda

PS: Les liens ci-dessus vont sur mon blog personnel qui contient des informations pertinentes supplémentaires.

2
Aniket Thakur