AWS лямбда для автоматического восстановления с s3 на rds - PullRequest
0 голосов
/ 31 октября 2018

Я настроил свой локальный сервер баз данных на ежедневное создание резервной копии в 11 часов вечера в aws s3. Резервная копия зашифрована с использованием стандартного шифрования s3.

Мне нужно восстановить эту зашифрованную резервную копию postgresql из s3 в RDS (работает postgres), как только она достигнет s3, а затем запросить некоторые поля и получить данные с помощью функции python, которая отправит эти данные в список электронных писем.

У меня вопрос: могу ли я использовать AWS lambda для этой задачи вместо экземпляра ec2?

1 Ответ

0 голосов
/ 01 ноября 2018

Теоретически, да, но вы можете столкнуться с некоторыми проблемами, если вы пойдете по этому пути.

Чтобы восстановить резервную копию с S3 на postgresql: Вам нужно будет связать двоичные файлы pg_restore или psql в ваш пакет развертывания Lambda. Затем ваш код лямбды должен будет либо загрузить резервную копию файла S3 в папку /tmp вашей лямбды (следите за тем, чтобы limit Lambda для 512 МБ для папки /tmp), либо передать содержимое файла S3 в pg_restore / psql через стандартный . Чтобы вызвать psql или pg_restore, вы должны использовать модуль Python subprocess . Будьте осторожны с большими резервными копиями, чтобы не загружать весь файл резервной копии в память: вы можете превысить лимит памяти Lambda.

Чтобы запросить базу данных, вам нужно включить psycopg2 в пакет развертывания вашей Lambda. Подробнее о том, как это сделать, см. https://github.com/jkehler/awslambda-psycopg2.

Чтобы отправить данные по электронной почте, вы должны использовать AWS SES .

Лично я бы, вероятно, использовал для этого контейнер Docker (используя AWS ECS или Batch ). Таким образом, вероятно, будет проще установить необходимые двоичные файлы (pg_restore / psql, psycopg2). Кроме того, вы избежите ограничений, присущих Lambda (ограничение времени выполнения 15 минут, максимальный размер /tmp, ограничение ОЗУ).

...