我的 DynamoDB 数据库中每个用户大约有 300,000 个事务。
我想以无服务器的方式根据这些交易计算税款,如果这是最便宜的方式。
我的想法是,我应该使用 AWS Step Functions 获取所有事务,将它们存储到 Amazon S3 中,然后使用 AWS Step Functions 循环访问 CSV 文件中的每一行。问题是,一旦我在 CSV 中读取了一行,我就必须将其存储在内存中,以便我可以将其用于以后的计算。如果这个 Lambda 函数用完了时间,那么我就没有办法保存状态,所以这条路线是不合理的。
另一种成本高昂的方法是在 DynamoDB 中为每个事务提供两个副本,并对副本表执行操作,同时保持原始数据不变。这样做的问题是 DynamoDB 表最终是一致的,并且可能会出现我读取脏项目的情况。
无服务器是事件驱动型处理的理想选择,但对于您的批处理使用案例,使用 EC2 实例可能更容易。
Amazon EC2 t2.nano 实例低于 1c/小时,采用竞价定价的 t2.micro 实例也是如此,并且是按秒定价。
这里真的没有足够的细节来提出一个好的建议。例如,DynamoDB 表中的数据是如何组织的?您计划多久运行一次此作业?您需要多快完成作业?
你提到了价格,所以我假设这对你来说是最大的因素。
对于事件驱动的处理,Lambda 往往是最便宜的。这个想法是,对于任何 EC2/ECS 事件驱动系统,您都需要过度预置一定数量来处理流量高峰。过度配置的计算能力大部分时间处于空闲状态,但您仍需为此付费。对于 lambda,您需要为计算能力支付更多费用,但您需要更少的资金来节省资金,因为您不需要过度预置。
批处理系统往往非常适合 EC2,因为它们通常在整个作业期间使用 100% 的计算能力。在作业结束时,您将关闭所有实例,并且不再为它们付费。此外,如果您使用现货定价,则可以真正降低计算能力的价格。