用于从 s3 自动恢复到 rds 的 AWS lambda

AWS lambda for automated restore from s3 to rds

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

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

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

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

要将备份从 S3 恢复到 postgresql:您必须将 pg_restorepsql 二进制文件捆绑到您的 Lambda 部署包中。然后,您的 Lambda 代码必须将备份 S3 文件下载到您的 Lambda 的 /tmp 文件夹(注意 Lambda 的 limit of 512 MB for the /tmp folder), or stream the S3 file's content to pg_restore/psql . To invoke psql or pg_restore, you should use Python's subprocess 模块。注意大型备份,不要将整个备份文件加载到内存中:您可能会超过 Lambda 的 RAM 限制。

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

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

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