2016-04-20 1 views
4

DynamoDB имеет функцию «Потоки», которая может автоматически вызывать функцию Lambda всякий раз, когда создается или обновляется строка таблицы.Может ли функция Lambda автоматически вызываться, когда таблица MySQL (RDS) имеет строку, созданную/обновленную?

Есть ли способ реализовать это с помощью RDS (MySQL) и Lambda? Мне было бы очень приятно, если бы функцию Lambda можно было вызвать, когда строка была создана или обновлена.

Я знаю, что можно опросить базу данных для изменения таблицы/строки, но я предпочел бы, чтобы Lambda запускался из внешнего события. Я также читал о событиях RDS и использовании SNS для подписки на эти события. Но эти события RDS выглядят как рабочие события (доступность, конфигурация, восстановление). Для изменения данных нет «событий».

ответ

0

Вы ищете триггеры MySQL и хранимые процедуры. https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

+1

Спасибо за ваш ответ Марк. Я знаю о триггерах DB и хранимых процедурах, но я специально ищу способ вызова функции Lambda. Триггеры и хранимые процедуры выполняют SQL, но я ищу код приложения, который мог бы например (1) вызвать API (2) выполнить бизнес-логику и вернуть HTML. Я знаю, что код, который вставляет в MySQL, может впоследствии выполнять бизнес-логику, но я надеюсь разделить функциональность операций вставки/обновления DB с бизнес-логикой на 2 функции лямбда. – Chris

+1

@Chris Вы должны были упомянуть, что вы хотели выполнить в своем вопросе. Ответ заключается в том, что единственное, что MySQL будет делать автоматически в событии, таком как вставка или обновление, - это вызов хранимой процедуры. MySQL на RDS не является исключением из этого. Только движок MySQL знает об изменении данных, и доступны только стандартные инструменты MySQL для ответа на эти события. –

1

На момент написания этого документа нет простого способа сделать это. RDS не отслеживает действительные действия SQL, и MySQL не знает, как взаимодействовать с Lambda.

При этом, если вы посмотрите на эту релевантную нить SO (Send an http request in mysql trigger after insertion in a table), в ней объясняется, как выполнять и HTTP-запрос.

Теперь, если у вас есть функция лямбда за шлюзом API и выполняется HTTP-запрос, вы можете выполнить то, что хотите, но [не зная приложения], я бы спросил, будет ли проще обновлять ваши приложение для запуска самих лямбда-функций.

+1

Одна из проблем заключается в том, что http-библиотека для MySQL построена как пользовательская функция (UDF, не такая же, как хранимая функция), и UDF не поддерживаются в RDS. –

0

Лямбда может быть вызвана из хранимой процедуры в Авроре. Хотя это не является исключительно вариантом RDS MySql, это вариант, где вы можете перейти на совместимое с MySQL предложение Aurora от AWS и выполнить то, что вы хотели. Вопрос в том, насколько сильно вам нужна эта возможность и насколько хорошо Aurora вписывается в ваш бюджет и архитектуру. Для получения дополнительной информации см .: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Lambda.html