我已将本地数据库服务器配置为每天晚上11点将备份放入AWS s3中。使用s3标准加密对备份进行加密。
我需要在到达s3时将加密的postgresql备份从s3恢复到RDS(运行postgres),然后查询某些字段并使用python函数获取数据,该函数会将这些数据发送到电子邮件列表中。
我的问题是:我可以使用AWS lambda代替ec2实例来执行此任务吗?
答案 0 :(得分:1)
从理论上讲,是可以的,但是如果您走这条路,将会面临一些挑战。
要将备份从S3还原到postgresql:您将必须将pg_restore
或psql
二进制文件捆绑到Lambda部署软件包中。然后,您的Lambda的代码将必须将备份S3文件下载到Lambda的/tmp
文件夹中(注意/tmp
文件夹的512 MB的Lambda的limit)或流式传输S3文件内容到pg_restore
/ psql
via stdin。要调用psql
或pg_restore
,应使用Python的subprocess模块。对于大型备份要小心,不要将整个备份文件加载到内存中:您可能会超出Lambda的RAM限制。
要查询数据库,您需要将psycopg2包括在Lambda的部署程序包中。有关如何执行此操作的详细信息,请参见https://github.com/jkehler/awslambda-psycopg2。
要通过电子邮件发送数据,您应该使用AWS SES。
就个人而言,我可能会使用Docker容器来实现这一点(使用AWS ECS或Batch)。这样,安装必要的二进制文件(pg_restore
/ psql
,psycopg2)可能会更容易。另外,您将避免Lambda的固有限制(执行时间限制为15分钟,最大/tmp
大小,RAM限制)。