Может ли AWS Lambda подключиться к базе данных RDS mySQL и обновить базу данных?
Я пытаюсь подключить функцию AWS Lambda к базе данных RDS mysql.
Я просто хотел обновить базу данных из своей лямбда-функции. Возможно ли получить доступ к RDS, указав роль роли IAM и политику доступа?
Я могу подключиться к mysql databse, используя mysql client.but, когда я пытаюсь использовать лямбда, я не могу этого сделать. вот мой код.
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();
};
Ответы
Ответ 1
Да. Вы можете получить доступ к базе данных MySql RDS из AWS Lambda.
Вы можете использовать библиотеку node-mysql
.
Однако есть большой оговорка, которая идет с ним.
AWS Lambda не имеет (в настоящее время) доступа к закрытым подсетям внутри VPC. Поэтому, чтобы AWS Lambda получал доступ к вашей базе данных RDS, она должна быть общедоступной, что может представлять угрозу безопасности для вас.
Обновление (2015-10-30): AWS Lambda объявила о предстоящей поддержке VPC (по состоянию на: Invent 2015), поэтому это не будет проблемой для гораздо дольше.
Обновление (2015-11-17): AWS Lambda по-прежнему не поддерживает VPC.
Обновление (2016-02-11): AWS Lambda теперь может обращаться к ресурсам VPC:
https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/
Чтобы достичь этой функциональности, ваша Lambda-функция будет фактически выполняться внутри вашего VPC в подсети. Некоторые оговорки поставляются с этой функциональностью:
- В подсети VPC требуется достаточно бесплатных IP-адресов для обработки масштабирования лямбда
- Если вашей функции Lambda требуется доступ в Интернет, тогда ей назначена подсеть VPC, потребуется интернет-шлюз или NAT
Ответ 2
Так как Lambda использует Node.js
, Java
и Python
как язык программирования/сценариев бэкэнд, вы можете определенно использовать его для подключения к RDS. (Ссылка)
Наконец, Это - документация по определению ролей IAM при подключении к RDS. (См. Рисунок ниже):
![введите описание изображения здесь]()
Ответ 3
попробуйте этот учебник:
http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html
В этом учебнике вы сделаете следующее:
Запустите экземпляр ядра базы данных базы данных Amazon RDS MySQL в вашем по умолчанию Amazon VPC.
В экземпляре MySQL вы создаете базу данных (ExampleDB) с образцовой таблицей (Employee) в ней.
Создайте функцию Lambda для доступа к базе данных ExampleDB, создайте таблицу (Employee), добавьте несколько записей и извлеките записи из таблицы.
Вызвать функцию лямбда вручную и проверить результаты запроса.
Ответ 4
Я просто хотел обновить базу данных из своей лямбда-функции. Возможно ли получить доступ к RDS, указав роль IAM и политику доступа?.
Нет, вы не можете. Вам необходимо указать URL-адрес БД/имя пользователя/пароль для подключения. Возможно, вам понадобится запустить Lambda в том же VPC, если он находится в частной подсети. См. Мои указатели ниже.
Я могу подключиться к mysql databse, используя mysql client.but, когда я пытаюсь использовать лямбда, я не могу этого сделать.
Это строгое Нет, Нет!. Ваш RDS не должен быть доступен из Интернета, если он вам действительно не нужен. Попробуйте запустить его в частной подсети и настроить другие службы AWS соответственно.
Два цента с моего конца, если вы получаете тайм-ауты доступа к ресурсам из Лямбды -
- По умолчанию Lambda имеет доступ в Интернет и может получать доступ к онлайн-ресурсам.
- Lambda не может получить доступ к службам, работающим в частной подсети вашего VPC.
- Чтобы подключиться к службам в частной подсети, вам нужно запустить лямбда-частную подсеть. Для этого вам нужно перейти в раздел "Сеть" и настроить VPC, подсети и группу безопасности.
- Однако обратите внимание, что когда вы это сделаете, вы потеряете доступ в Интернет. Если вам все еще нужен доступ в Интернет, вам придется развернуть NAT-шлюз или экземпляр NAT в общедоступной подсети и настроить маршрут из частной подсети на этот NAT.
- Я столкнулся с этим, когда пытался подключиться к RDS в частной подсети из своей лямбды. Поскольку я использовал KMS для шифрования некоторых переменных среды, а для части дешифрования требуется доступ в Интернет, мне пришлось использовать NAT-шлюз.
Подробнее - http://docs.aws.amazon.com/lambda/latest/dg/vpc.html#vpc-internet
Как подключиться к postgres RDS из AWS Lambda