2014-05-02 93 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

快樂編碼!