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();
};
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é:
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.
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-
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.