amazon-web-services - AWS lambda 用于从 s3 到 rds 的自动还原
问题描述
我已将我的本地数据库服务器配置为每天晚上 11 点将备份放入 aws s3。备份使用 s3 标准加密进行加密。
我需要将此加密的 postgresql 备份从 s3 恢复到 RDS(运行 postgres),一旦它到达 s3,然后查询一些字段并使用 python 函数获取数据,该函数会将这些数据发送到电子邮件列表。
我的问题是:我可以使用 AWS lambda 而不是 ec2 实例来完成这项任务吗?
解决方案
从理论上讲,是的,你可以,但如果你走这条路,就会面临一些挑战。
要将备份从 S3 恢复到 postgresql:您必须将pg_restore
或psql
二进制文件捆绑到您的 Lambda 部署包中。然后,您的 Lambda 代码必须将备份 S3 文件下载到您的 Lambda/tmp
文件夹(注意Lambda 对文件夹的 512 MB限制/tmp
),或者将 S3 文件的内容流式传输到pg_restore
/psql
通过 stdin。要调用psql
or pg_restore
,您应该使用 Python 的subprocess模块。请注意大型备份,不要将整个备份文件加载到内存中:您可能会超过 Lambda 的 RAM 限制。
要查询数据库,您需要在 Lambda 的部署包中包含 psycopg2。有关如何执行此操作的详细信息,请参阅https://github.com/jkehler/awslambda-psycopg2 。
要通过电子邮件发送数据,您应该考虑使用AWS SES。
就个人而言,我可能会使用 Docker 容器来实现这一点(使用 AWS ECS或Batch)。这样,安装必要的二进制文件(pg_restore
/ psql
, psycopg2 )可能会更容易。此外,您将避免 Lambda 的固有限制(15 分钟执行时间限制、最大/tmp
大小、RAM 限制)。
推荐阅读
- facebook - FBInstant 广告出现“NO FILL”错误怎么办
- javascript - 将javascript代码分配给变量并执行它
- javascript - 在特定浏览器版本中调试js错误
- django - 在 celery worker 中获取相同的线程 id
- kubernetes - 数据库如何在 Kubernetes 中的持久卷之间同步数据
- google-sheets - Google Sheet 将一列拆分为数组
- python - 如何减少多元多元线性回归的变量
- javascript - 如何按 JavaScript 中不同键的值对对象数组进行排序?
- python - 基于特定模式的拆分和编辑字符串
- html - 网格中留下额外空间的原因可能是什么?