est-ce que AWS Lambda peut se connecter à la base de données mySQL RDS et mettre à jour la base de données?
j'essaie de connecter la fonction Lambda D'AWS à la base de données mysql de RDS.
Je voulais juste mettre à jour la base de données de ma fonction lambda. Est-il possible d'accéder à RDS en spécifiant le rôle de IAM et la Politique d'accès?.
Je peux me connecter à la base de données mysql en utilisant le client mysql.mais quand j'essaie lambda, Je ne peux pas. 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();
};
4 réponses
Oui. Vous pouvez accéder à une base de données MySql RDS à partir D'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 à des sous-réseaux privés à l'intérieur d'un VPC. Donc, pour QU'AWS Lambda puisse accéder à votre base de données RDS, elle doit être accessible au public, ce qui pourrait représenter un risque de sécurité pour vous.
mise à Jour (2015-10-30): AWS Lambda a annoncé à venir VPC de soutien (de re:Inventer 2015), donc ce ne sera plus un problème pour très longtemps.
mise à Jour (2015-11-17): AWS Lambda n'a toujours pas de support VPC.
mise à Jour (2016-02-11): AWS Lambda peut maintenant accéder à VPC ressources:
https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/
pour réaliser cette fonctionnalité, votre fonction Lambda s'exécutera effectivement à l'intérieur de votre VPC dans un sous-réseau. Certaines mises en garde accompagnent cette fonctionnalité:
- le sous-réseau VPC a besoin de suffisamment d'adresses IP gratuites pour gérer L'échelle de Lambda
- si votre fonction Lambda a besoin d'un accès internet, alors elle est désignée VPC subnet will besoin D'une passerelle Internet ou NAT
puisque Lambda utilise Node.js
,Java
et Lien)
Enfin, est la documentation sur la spécification des rôles IAM lors de la connexion à RDS. (Voir l'image ci-dessous):
essayez ce tutoriel: http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html
dans ce tutoriel, vous faites ce qui suit:
lancer un moteur de base de données MySQL Amazon RDS dans votre VPC Amazon par défaut.
dans L'instance MySQL, vous créez une base de données (Examplebd) avec un exemple de table (Employee).
créer une fonction Lambda pour accéder à la base de données Examplebd, créer une table (employé), ajouter quelques enregistrements, et récupérer les enregistrements de la table.
invoquer la fonction Lambda manuellement et vérifier les résultats de la requête.
je voulais juste mettre à jour la base de données de ma fonction lambda. Est-il possible d'accéder à RDS en spécifiant le rôle de IAM et la Politique d'accès?.
Non, vous ne le peut pas. Vous devez fournir l'url de la base de données/nom d'utilisateur/mot de passe pour vous connecter. Vous pouvez avoir besoin D'exécuter Lambda dans le même VPC s'il est dans le sous-réseau privé. Voir mes pointeurs ci-dessous.
je peux me connecter à la base de données mysql en utilisant le client mysql.mais quand j'essaie lambda, Je ne peux pas.
C'est une stricte non , Non! votre SDR ne devrait pas être accessible à partir d'Internet à moins que vous 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 cents de mon côté si vous obtenez des temps morts accès aux ressources de Lambda -
- par défaut Lambda a accès à internet et peut accéder aux ressources en ligne.
- Lambda ne peut pas accéder aux services votre VPC.
- pour se connecter aux services dans le sous-réseau privé, vous devez exécuter le sous-réseau lambda est privé. Pour cela, vous devez aller dans la section Réseau et configurer votre VPC, sous-réseaux et groupe de sécurité.
- Toutefois noter que lorsque vous faites cela, vous perdrez l'accès à Internet. Si vous avez encore besoin d'un accès Internet, vous devrez lancer une passerelle NAT ou une instance NAT dans le sous-réseau public et configurer la route du sous-réseau privé vers ce NAT.
- j'ai fait face à cela quand j'étais j'essaie de me connecter à RDS dans le sous-réseau privé de mon lambda. Comme J'ai utilisé KMS pour chiffrer certaines variables d'environnement et que la partie de déchiffrement nécessite un accès Internet, j'ai dû utiliser une passerelle NAT.
Plus de détails - http://docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-internet