AWS SQS用于从AWS外部接收消息

时间:2017-01-13 15:56:26

标签: message-queue messaging amazon-sqs

我的公司有一个消息系统,它以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。

我的问题是:

  1. 我的想法是否正确?
  2. 如果它是正确的,您是否可以分享有关如何在此EC2实例上构建任何应用程序以实现功能的任何详细信息(我没有应用程序开发经验,您的见解非常感谢!)
  3. AWS中是否有更容易/更好的选项可以实现在我的用例中接收消息的目标?

5 个答案:

答案 0 :(得分:6)

  
      
  1. 我的想法是否正确?
  2.   

不,不是。

你误解了常见问题解答中的(有些不明确的)信息。

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)

感谢您与我分享信息和见解!

我已经测试了下面的解决方案,它适用于我的用例:

  1. 在AWS API Gateway中创建了一个端点,该端点能够从公司消息系统接收消息,该系统不带有AWS凭证

  2. 创建了由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/