首页 > 解决方案 > AWS lambda 用于从 s3 到 rds 的自动还原

问题描述

我已将我的本地数据库服务器配置为每天晚上 11 点将备份放入 aws s3。备份使用 s3 标准加密进行加密。

我需要将此加密的 postgresql 备份从 s3 恢复到 RDS(运行 postgres),一旦它到达 s3,然后查询一些字段并使用 python 函数获取数据,该函数会将这些数据发送到电子邮件列表。

我的问题是:我可以使用 AWS lambda 而不是 ec2 实例来完成这项任务吗?

标签: amazon-web-servicesamazon-s3aws-lambdaamazon-rds

解决方案


从理论上讲,是的,你可以,但如果你走这条路,就会面临一些挑战。

要将备份从 S3 恢复到 postgresql:您必须将pg_restorepsql二进制文件捆绑到您的 Lambda 部署包中。然后,您的 Lambda 代码必须将备份 S3 文件下载到您的 Lambda/tmp文件夹(注意Lambda 对文件夹的 512 MB限制/tmp),或者将 S3 文件的内容流式传输到pg_restore/psql 通过 stdin。要调用psqlor pg_restore,您应该使用 Python 的subprocess模块。请注意大型备份,不要将整个备份文件加载到内存中:您可能会超过 Lambda 的 RAM 限制。

要查询数据库,您需要在 Lambda 的部署包中包含 psycopg2。有关如何执行此操作的详细信息,请参阅https://github.com/jkehler/awslambda-psycopg2 。

要通过电子邮件发送数据,您应该考虑使用AWS SES

就个人而言,我可能会使用 Docker 容器来实现这一点(使用 AWS ECSBatch)。这样,安装必要的二进制文件(pg_restore/ psql, psycopg2 )可能会更容易。此外,您将避免 Lambda 的固有限制(15 分钟执行时间限制、最大/tmp大小、RAM 限制)。


推荐阅读