用于从s3到rds的自动还原的AWS Lambda

时间:2018-10-31 19:14:14

标签: amazon-web-services amazon-s3 aws-lambda amazon-rds

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

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

我的问题是:我可以使用AWS lambda代替ec2实例来执行此任务吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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