Amazon web services 如何在AWS CloudWatch中为AWS SQS添加偶数模式

Amazon web services 如何在AWS CloudWatch中为AWS SQS添加偶数模式,amazon-web-services,aws-lambda,amazon-sqs,amazon-cloudwatch,Amazon Web Services,Aws Lambda,Amazon Sqs,Amazon Cloudwatch,每当有新消息添加到SQS时,我想触发Lambda函数。 请注意,我不想向SQS添加新消息(事件) 我想做什么: 我的应用程序将向SQS发送消息 每当生成添加到队列CloudWatch事件的新消息时 CloudWatch事件触发lambda 问题: 在AWS控制台中,在配置CloudWatch事件时,我没有找到任何选项来添加事件源,即我的SQS队列的URL或名称 我不确定这个用例是否有效,但请帮助我 我建议您改变方法 您的应用程序应该将消息发布到现有SNS主题。您的SQS和Lambda应该订阅此S

每当有新消息添加到SQS时,我想触发Lambda函数。 请注意,我不想向SQS添加新消息(事件)

我想做什么:

  • 我的应用程序将向SQS发送消息
  • 每当生成添加到队列CloudWatch事件的新消息时
  • CloudWatch事件触发lambda
  • 问题:

    在AWS控制台中,在配置CloudWatch事件时,我没有找到任何选项来添加事件源,即我的SQS队列的URL或名称


    我不确定这个用例是否有效,但请帮助我

    我建议您改变方法

    您的应用程序应该
    将消息发布到现有SNS主题。您的SQS和Lambda应该订阅此SNS主题

    Application -> publish -> SNS_TOPIC
                                -> SQS is notified
                                -> Lambda is notified
    

    编辑:AWS现在支持SQS作为触发Lambda函数的事件源

    原始答复: 不支持SQS作为AWS Lambda函数的直接事件源。如果您的用例需要排队系统的属性,那么您可以拥有一个“cron job”类型的Lambda函数,该函数从队列接收消息,并调用worker Lambda函数来响应接收到的每条消息。这种方法的问题是,即使在您不期望消息的期间,您也必须持续轮询SQ,这会产生不必要的成本

    最简单的方法是改用SNS。创建一个主题,将事件发布到该主题,而不是将消息添加到SQS队列,并让Lambda函数订阅该SNS主题。然后,每次将消息发布到该SNS主题时,都会调用它。这里有一个关于这种方法的教程:


    看来我无法直接为每个SQS消息触发lambda。正如您所建议的,若我创建SQS侦听器来轮询队列,并且每当出现新消息时,都会触发lambda。这是否可行,因为即使SQS中没有消息,EC2实例上也需要全天候运行。我之所以避免使用SNS,是因为它不适合我们的整体架构。
    我之所以避免使用SNS,是因为它不适合我们的整体架构。
    -也许你应该重新思考一下你的架构。