是否可以在没有IAM登录的情况下将数据发布到AWS kinesis



Amazon Web Services SQS服务允许您定义一个策略,允许未经身份验证的用户向队列提交简单的POST,而无需对请求进行签名。

我也想做同样的事情,但使用AWS Kinesis,这样我就可以从使用webhook发布通知但无法签署请求的设备和进程中收集数据。

这可能吗?

我仍然认为您不希望对AWS资源完全没有保护。您可以在ip上使用基于资源的策略,但这被认为是不好的做法。使用API GW+Kinesis会产生巨大成本的唯一原因是,如果客户端发送了过多的请求,所有请求都包含少量数据,这在任何情况下都不是您想要的。但我想你仍然想要API GW,因为你可以执行节流并阻止成本呈指数级增长,&稍后的DDOS攻击或只是减轻客户端代码中的错误。API GW应该为你省钱,而不是花更多的钱。

更可取的是,如果您让客户端每隔x分钟或y秒向您发送数据。然而,这可能会给客户端带来负担,您可能需要生成他们可以使用的sdkdaemonservice,它们将自动为客户端执行此操作,并在应用程序侦听特定端口上的数据的情况下运行。一个很好的例子是X-Ray daemonAWS生成的批量数据传输到云。如果没有这种策略,服务的成本可能会成倍地增加。这反过来意味着,与其他情况相比,您可能只有1%的请求进入API GW

最后一点需要注意的是,尽管过多地将许多消息集中在一起会导致实时分析的准确性降低。您需要记住,增加给定数据字段的速度是有限的,尤其是在本质上最终一致的分布式系统上。当我在DynamoDB中创建聚合表时,我从痛苦中吸取了这一课。我在一个项目上很快调用了inc,这导致了许多事务错误,并且占用了比实际需要多得多的WCUs。所以,尽管我的桌子上有更多的WCUs,而且我的批次很小。它不如我将写入分批到10-30秒的时间间隔那么准确。

对评论的回应

目前还不清楚您所说的事件是什么意思,我假设您为每个事件执行一个HTTP请求。如果一台设备每秒处理1k个HTTP请求,那将是令人印象深刻的!虽然可能不可能!我相信你的话

API每秒1百万需求

假设你有1k个设备,每个设备每秒处理1k个请求,这将是每秒100万个,一个月2.628e+6秒,这意味着每月2.63e+12个请求。根据它们的定价和0.90 per million的最低成本,这将使你每月花费超过200万美元。你可能是世界上API GW最大的消费者!祝贺

API批量节省

除非你有钱,否则这是个问题!即使成本降低了100倍,仍然会很贵!但假设您每60秒发送一次数据,这意味着1k devices x 2.628e+6 sec in month / 60 req/sec。那只不过是40美元多一点。但是,假设您可以在一个请求中聚集60k个事件,这可能是不可行的,但它确实说明了节省的成本。

一般批量节省

现在有一种简单的方法可以在不分批的情况下经济地完成你所说的事情。在基础设施的许多不同层,批处理是降低成本和提高性能的有效方法。当您一次读写超过1条消息时,SQS会执行此操作。DynamoDB在批量写入和读取时成本要低得多,EBS吞吐量优化卷是另一个很好的例子,因为它缓冲写入。即使你可以直接点击Kinesis,如果不批量,也会花费一大笔钱!让我们分析一下数字:

Kinesis

每个碎片每秒支持1k次写入,即1000个碎片,即每天1.44$ x 1k,远远超过每月40k!

TL;DR

除了改变设备以减少发送更大请求的频率之外,任何其他事情都是无法大规模负担的,无论你如何剥猫的皮。

您可以设置Cognito身份池并启用未经身份验证/匿名访问。将IAM角色与允许写入Kinesis的未经身份验证/匿名用户关联。

最新更新