当SQS为空时关闭Worker Tier App

问题描述 投票:0回答:2

我将Elastic Beanstalk应用程序设置为Worker Tier,其中SQS将消息发送到进程。有时我的SQS是空的,当它空了我不想让我的应用程序运行,并花费我的钱。

我的应用程序总是“绿色”,除了短时间内将类型设置为WARN 2分钟,然后再将其设置为“信息”(绿色)多个小时。闲置时,我的监控选项卡显示其CPU负载约为7.7%。

所以我想要的是当我的SQS为空时让我们说60秒。 EC2实例将关闭,直到添加新的SQS消息。这怎么可能?或者我是否必须继续为没有做“任何事情”的EC2实例付费?

amazon-web-services amazon-ec2 elastic-beanstalk
2个回答
3
投票

您将要设置自动缩放策略,本文档为您提供了很好的过程概述。

http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-using-sqs-queue.html

但要注意的一件事是,在60秒不活动后关闭ec2实例可能最终会让你花费更多而不是让它一直运行。

举个例子:

假设您的工作量是每2分钟一个新项目进入队列,并且每个项目需要45秒才能处理。

在这种情况下,最新情况是,您将启动一个实例,它将工作45秒,等待60秒然后关闭,因为SQS队列为空。 15秒后,新实例将启动以处理从第一个实例起2分钟到达的队列项。

因此,您的策略最终会在一小时内启动总共30个新实例,因为每次启动实例时,您都需要支付整整一小时的费用,因此每1小时工作需要支付30小时的实例时间你这么做 - 可能不是你想要的。

所以是的,您想要做的是可能的,但根据您的工作量可能不是一个好主意。请记住 - 在您需要时快速旋转实例,并且因为您已经支付了整整一小时,所以请慢慢关闭它们。

你真的需要弄清楚工作将在队列中到达的可能模式,然后围绕它设计解决方案。如果SQS队列备份超过某一点(并且你仍然想要确保不启动)并经常停止第二个实例)。


1
投票

也许您应该考虑使用SNS通知和Lambda函数。这样您就可以只为每个处理的邮件付费。您不必担心打开,关闭或缩放应用程序,具体取决于待处理消息的数量。

您可以在以下链接中获取有关如何进行此集成的更多详细信息:http://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html

另外,请记住Lambda函数支持多个事件源(例如Dynamodb和S3 Bucket)。您可以在以下链接中查看完整列表:http://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html

快乐的编码!

© www.soinside.com 2019 - 2024. All rights reserved.