我将Elastic Beanstalk应用程序设置为Worker Tier,其中SQS将消息发送到进程。有时我的SQS是空的,当它空了我不想让我的应用程序运行,并且花费我的钱。
我的申请总是"绿色"除了短时间内将类型设置为WARN 2分钟,然后将其设置为"信息" (绿色)再过几个小时。空闲时,我的监控选项卡显示它的CPU负载约为7.7%。
所以我想要的是当我的SQS为空时让我们说60秒。 EC2实例将关闭,直到添加新的SQS消息。这怎么可能?或者我是否必须继续为没有做任何事情的EC2实例付费"?
答案 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
快乐的编码!