我的公司有一个消息系统,它以JSON格式发送实时消息,它不是在AWS上构建的,也不会与AWS建立任何VPN连接。
我们的团队正在尝试使用AWS SQS接收这些消息,然后让DynamoDB将JSON消息处理到TSV,然后加载到RDS中。
但是,根据常见问题解答,SQS只能从AWS内部接收消息。 https://aws.amazon.com/sqs/faqs/
问:谁可以对邮件队列执行操作?
只有AWS账户所有者(或账户所有者已委派权限的AWS账户才能对Amazon SQS消息队列执行操作。
为了使用SQS,我能想到的一种方法是创建一个面向公众的EC2实例,它接收消息并传递给SQS。
我的问题是:
答案 0 :(得分:6)
- 我的想法是否正确?
醇>
不,不是。
你误解了常见问题解答中的(有些不明确的)信息。
SQS可从Internet上的任何位置访问和使用。它唯一暴露的接口是HTTP(S)。实际上,从EC2内部来看,除非EC2实例实际上具有对Internet的出站访问权限,否则SQS 不能可访问。
文档中的要点并不是您需要在AWS内部使用队列,而是需要拥有一组授权的AWS凭证以便按顺序使用使用queues.¹
如果您拥有AWS账户,则您拥有凭据,并且可以使用SQS。您无需从“内部”AWS访问队列。
选择距您服务器最近的endpoint(最低延迟),您应该可以从任何地方找到它并且可以访问。
¹可以将问题配置为在创建后允许匿名访问。 (不要这样做,我只是说这是可能的。)FAQ的这一部分似乎是指一个操作的子集,例如创建队列。
答案 1 :(得分:0)
通过accesskey& secret key或IAM角色获得适当的权限后,您可以从任何地方访问sqs。
SQS并非特定于vpc
答案 2 :(得分:0)
很明显,您尝试这样做:
从公司邮件系统收集邮件,发送给SQS。
使用您的方法(使用EC2作为桥接器)没有错。但是,您不需要EC2连接到SQS。
只要您提供正确的凭据,就可以使用AWS API(例如Python boto3等)访问所有AWS服务。所以你可以把你的"中间件"只要您能够建立与所述服务的连接,就可以在任何地方使用。
因此,您可以使用更多选项。例如从您的邮件系统触发;使用AWS Lambda等
答案 3 :(得分:0)
感谢您与我分享信息和见解!
我已经测试了下面的解决方案,它适用于我的用例:
在AWS API Gateway中创建了一个端点,该端点能够从公司消息系统接收消息,该系统不带有AWS凭证
创建了由API网关触发的Lambda函数,因此一旦消息到达,Lambda将消化JSON消息并将其转换为TSV,然后加载到RDS
答案 4 :(得分:0)
我无法从外部服务写入SQS。我发现了一些部分解释,但被卡在角色创建上。
我发现的替代方法是使用AWS服务Lambda
+ API Gateway
写入SQS
。
本教程非常有用,详细解释了所有步骤: https://startupnextdoor.com/adding-to-sqs-queue-using-aws-lambda-and-a-serverless-api-endpoint/