Подтвердить что ты не робот

Может ли 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();
};
4b9b3361

Ответ 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