2014-05-02 53 views
0

我有一个Elastic Beanstalk应用程序设置为“工作人员层”,SQS正在将其发送给进程。有时我的SQS是空的,当它空着时,我不希望我的应用程序正在运行,并且花费我的钱。SQS为空时关闭工作程序层应用程序

我的应用程序始终为“绿色”,除了在短时间内将类型设置为警告2分钟,然后再次将其设置为“信息”(绿色)多个小时。在空闲状态下,我的“监控”选项卡显示它的CPU负载约为7.7%。

所以我想要的是,当我的SQS是空的让我们说60秒。 EC2实例关闭,直到添加新的SQS消息。这怎么可能?还是我必须为不做任何事情的EC2实例付费?

回答

3

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

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

有一点要记住然而,活动最终可能会在60秒后关闭EC2实例你花费比保持它运行所有的时间更多。

作为一个例子:

假设工作负载是这样的,一个新的项目进入队列每2分钟,并且它们每一个需要45秒来处理。

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

因此,您的政策最终将在一个小时内跳出总共30个新实例,并且因为每次您启动一个实例,您会在整整一个小时内收到帐单,您将为每个实例支付30小时的实例时间1小时的工作 - 可能不是你想要的。

所以,你想做什么是可能的,但可能不是一个好主意,这取决于你的工作量。请记住 - 当你需要它们时快速旋转实例,并且因为你已经支付了整整一个小时而慢慢关闭它们。

你真的需要弄清楚工作到达队列的可能模式,然后围绕这个模式设计解决方案。总是有一个实例运行,即使是一个小实例,最终可能会更便宜,并且如果SQS队列备份超过某个点(并且您仍然要确保不启动并经常停止第二个实例)。

+0

在我的情况下,它每次加载50'000条消息,但每周只能加载几次或每天最多加载一次。所以我认为在我的具体情况下,这不会是一个问题。 –

0

也许你应该考虑使用SNS通知和Lambda函数。通过这种方式,您将只能为每条处理的消息付费。根据待处理消息的数量,您不必担心打开,关闭或缩放您的应用程序。

你可以得到关于如何做到这一点的集成在下面的链接的详细信息: http://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html

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

快乐编码!