Amazon web services 如何设计在Lambda函数上运行的可伸缩ETL
我正在构建一个ETL,将来自各种Postgres数据库的数据导入S3,并将其导入到Redshift中。我希望我的ETL具有以下约束和目标: 1.涉及的每个数据库每次都有一个针对它的查询。 2.最短完成时间。 3.开发人员可以轻松地向ETL添加新数据集。 4.可扩展到更多数据库和更多数据集 由于超时而失败的设计 我通过以下方式对Lambda函数进行了全面规划: lambda_1:由cron触发。触发几个可以并行运行的lambda_2。每个源数据库触发一个lambda_2。还触发一个lambda_4 lambda_2:按顺序将所有数据集从其数据库导入S3 lambda_3:由文件放入S3触发,将相应的数据集名称添加到SQS队列中 lambda_4:由lambda_1触发。具有数据集列表。每次从SQS队列中弹出一条消息,并将该数据集从S3导入到红移。一旦导入了列表中的所有数据集,就会触发lambda_5 lambda_5+:(续) 如果在一个源数据库中有许多数据集需要导入,我会遇到问题,因为在完成导入之前,相应的lambda_2可能会超时。 出于类似的原因,我也会遇到lambda_4的问题,因为它会顺序地将每个数据集从S3导入到红移中 使添加新数据集变得困难的设计 另一种方法是为每个数据集创建一个链接lambda(例如,可能使用步骤函数链接它们)。我仍然可以通过S3文件触发器将数据集放入SQS队列,将导入S3与导入红移分离 这个解决方案可以工作,但很难看(imo),并且很难添加新的数据集,因为必须为它创建几个新的lambda 另一个更好的设计? 这一切的替代方案是放弃使用Lambda,使用。。。AWS法尔盖特?还有别的吗?期待设计建议 lambda_2可能在完成导入之前超时 是的,Lambda在执行ETL时的15分钟超时是一个令人头痛的问题,这可能需要一些时间 如果您不介意使用Python,我建议您使用AWS Glue Python外壳作业和可能的AWS Glue工作流。使用粘合工作流,您可以由其他作业触发作业。您将获得良好的可视性和自动重试 如果这不适合您,则使用ECS和Fargate,并与step函数相协调 lambda_2可能在完成导入之前超时 是的,Lambda在执行ETL时的15分钟超时是一个令人头痛的问题,这可能需要一些时间 如果您不介意使用Python,我建议您使用AWS Glue Python外壳作业和可能的AWS Glue工作流。使用粘合工作流,您可以由其他作业触发作业。您将获得良好的可视性和自动重试Amazon web services 如何设计在Lambda函数上运行的可伸缩ETL,amazon-web-services,amazon-s3,aws-lambda,amazon-redshift,aws-step-functions,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Redshift,Aws Step Functions,我正在构建一个ETL,将来自各种Postgres数据库的数据导入S3,并将其导入到Redshift中。我希望我的ETL具有以下约束和目标: 1.涉及的每个数据库每次都有一个针对它的查询。 2.最短完成时间。 3.开发人员可以轻松地向ETL添加新数据集。 4.可扩展到更多数据库和更多数据集 由于超时而失败的设计 我通过以下方式对Lambda函数进行了全面规划: lambda_1:由cron触发。触发几个可以并行运行的lambda_2。每个源数据库触发一个lambda_2。还触发一个lambda_4
如果这不适合您,那么将ECS与Fargate一起使用,并与step函数相协调。基于您的用例的最佳解决方案是使用Aws glue python shell作业,它们将充当您的扩展lambda 然后,您可以使用粘合工作流或步骤函数编排这些作业
这里的好处是,它们是无服务器的,由aws管理,而ecs您必须从一开始就进行管理,而且对于这项任务来说,这也是一种过分的做法。基于您的用例的最佳解决方案是使用aws glue python shell作业,它们将充当您的扩展lambda 然后,您可以使用粘合工作流或步骤函数编排这些作业
这里的好处是,它们是无服务器的,由aws管理,而您必须首先管理ecs,这也是完成此任务的一种过度手段。您应该使用aws EMR运行spark群集。您应该使用aws EMR运行spark群集。