当SQS为空时关闭Worker Tier App

时间:2014-05-02 04:53:47

标签: amazon-web-services amazon-ec2 elastic-beanstalk

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

我的申请总是"绿色"除了短时间内将类型设置为WARN 2分钟,然后将其设置为"信息" (绿色)再过几个小时。空闲时,我的监控选项卡显示它的CPU负载约为7.7%。

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

2 个答案:

答案 0 :(得分: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 :(得分: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

快乐的编码!