2012-07-23 79 views
51

目前我在亞馬遜的一臺服務器上放置了所有的cronjob。我想消除這個單點故障,並將我的所有任務公開爲Web服務。我想將VPC ELB背後的服務暴露給幾個將在調用時運行這些任務的服務器。在沒有cron的情況下在AWS中運行計劃任務

亞馬遜(AWS)提供的服務是否可以按計劃的間隔運行重複作業(真正稱爲web服務)?我真的很希望能夠在時間/日期規格方面保持cron功能,但將驅動程序的HA(適時調用端點的東西)用於AWS。

我喜歡SQS如何提供Web端點,但從我可以告訴你無法安排它們。 SWF似乎也不太合適。

回答

53

AWS在其2015年重新在LAMBDA預定功能announced支持:發明了會議。通過此功能,用戶可以使用類似cron的語法按計劃執行Lambda函數。使用Python執行預定事件的Lambda docs show an example。截至2016年2月,Lambda函數可以訪問VPC內的資源。

目前,該計劃的拉姆達可以運行在1分鐘(同cron的,但不能作爲細粒度的systemd定時器)的最小分辨率。

Lambder項目有助於簡化LAMBDA上使用的預定功能。

λ Gordon's cron example可能是部署預定lambda函數最簡單的接口。


原始答案,爲後人保存。

正如埃裏克·哈蒙德等人所指出的,有計劃任務沒有本地AWS服務。在其他答案中只提到了解決方法和一半解決方案。

回顧一下當前選項:

希望有一個更好的解決方案很快就會出現。

+0

好的,謝謝你提供更新的細節。希望亞馬遜正在開發一項新的服務,以便在未來解決這個問題。 – thatidiotguy 2015-01-20 15:23:13

+2

@thatidiotguy如果你沒有看到公告,AWS LAMBDA現在解決了這一空白。相應地更新答案。 – 2015-10-11 02:05:56

+2

LAMBDA不必做的工作,如果你使用的lambda來創建可以觸發你的服務器之一工作的SQS,你可以避開不能夠在一個VPC運行LAMBDA的問題。 – ThomasRedstone 2015-10-27 08:30:11

7

亞馬遜(AWS)提供的服務是否可以按計劃的時間間隔運行重複作業?

這是人們(包括我)在使用AWS設計體系結構時不斷提及的幾個單點故障之一。在亞馬遜通過服務解決它之前,這是我發佈的一些黑客,它被一些公司積極使用。

AWS Auto Scaling可以使用以cron格式指定的重複計劃來運行和終止實例。

http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_PutScheduledUpdateGroupAction.html

你可以有實例在啓動時自動運行的過程。

如果您不知道作業將持續多久,您可以進行設置,以便在作業完成時終止作業。

這是我寫了一篇文章,通過所需的確切命令走到此設置:使用自動縮放
http://alestic.com/2011/11/ec2-schedule-instance

一個重複計劃

運行EC2實例啓動整個實例只是啓動一系列工作似乎有點過分,但如果它是一個t1.micro,那麼它只需花費幾個便士。

t1.micro也不必做實際的工作。您的實例可以將消息注入SQS或通過SNS,以便其他冗餘服務器選擇任務。

+0

這將工作一個cron。但是當你有幾個這樣的作業在不同的時間間隔運行時,它會增加複雜性和成本。 – Wasif 2012-07-24 05:35:46

+0

是的,我同意埃裏克。這是我遇到的最常見的問題之一,他們有很多好的服務,但這是AWS真正缺乏的一件事。這並不是說任何其他雲提供商都提供了更好的選擇。 – bwight 2012-07-24 14:36:31

+0

是的我曾經想過做類似的事情,但它不像我需要/想要的那樣健壯。好奇的是,AWS用戶願意爲軟件付費來解決這個問題嗎?我知道我可以做出一些具有特定整合特性的東西,只是想知道它是否值得投入時間/美元。我想定價/巴士模型將沿着pingdom.com – rynop 2012-07-24 14:45:08

3

聽起來這可能對你有用: http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

任務運行是一個任務代理應用程序,調查AWS數據管道 計劃任務,並在Amazon EC2實例,亞馬遜 EMR集羣執行它們,或其他計算資源,因此報告狀態如此。根據您的應用程序,你可以選擇:

  • 允許AWS數據管道安裝和操作,它會自動管理 計算資源管理一個或多個任務運行 應用爲您服務。在這種情況下,您不需要按照本節所述安裝或配置任務執行器。這是建議的 配置。

  • 在計算資源 (如長時間運行的EC2實例或物理服務器)上手動安裝和配置Task Runner。爲此, 使用本節中的步驟。

  • 開發並安裝自定義任務代理而不是任務運行程序。這樣做的過程將取決於 自定義任務代理的實現。

+0

取消標記爲正確。在終於有時間真正研究這個問題之後,數據管道似乎無法解決我的具體問題。它適用於設置非變量調度。任務,如每天備份發電機表。一個需要大量(數千)不同工作(稱爲活動)的系統在不同的時間以不同的「參數」運行,IMO將無法承受。 – rynop 2014-03-04 20:21:22

-1

的AWS彈性負載均衡器將ping您的情況,以檢查它們是健康的。您可以將您的類似cron的任務添加到ELB正在ping的腳本中,並且它將非常有規律地執行。

你會希望讓每個任務執行的次數適量,並在合適的時間間隔增加一些邏輯,但是這可能與跟蹤執行數據庫表來實現。每次ELB ping你的服務器時,你的服務器都會檢查數據庫,看看是否有任何工作正在等待,然後執行那個工作。

如果腳本時間過長要執行的ELB就會超時,所以不造成這樣一種情況你ELB健康檢查將多少秒來處理後臺任務是很重要的。爲了克服這個問題,您可以使用AWS Simple Notification Service。您的ELB健康檢查腳本可以簡單地將消息發佈到SNS主題,然後該主題可以通過HTTP請求將消息發送到您的Web服務器。

換句話說: ELB坪您的EC2實例... EC2實例檢查待處理的作業,併發送一條消息給SNS一旦發現任何... SNS通過HTTP ... 的HTTP通知您的應用程序從SNS電話是什麼實際處理cron作業

+4

在機器上設置Cron,Chronos或Quartz會更簡單。 – eSniff 2014-03-12 20:23:18

+1

是的,好點。無論是ELB還是cron經常發射都無關緊要。你是對的。我的答案太複雜了。 :-) – 2014-10-22 17:55:16

3

亞馬遜去年爲NodeJS推出了Lambda,yesterday亞馬遜增加了功能調度功能,VPC支持和Python支持。

通過利用計劃功能 - 可以實現CRON的正確替代。

更多信息 - http://aws.amazon.com/lambda/details/

enter image description here

+0

感謝您的使用預定功能有什麼不利之處? – 2016-06-28 12:30:34

+0

預定功能? @AdegokeObasa能否詳細說明計劃函數的含義? – 2016-06-28 18:13:56

+0

對不起,我的意思安排的活動 – 2016-06-28 18:20:17

7

介紹Events in AWS Cloudwatch

您可以通過安排分鐘,小時,天或使用使用控制檯和不LAMBDA或任何編程cron表達式。

我剛剛安排了我的ASP.net WEB API(HTTP Post),使用SNS HTTP端點來執行每一分鐘,它的工作完美。

enter image description here

+0

這對調用Lambda函數來說似乎很棒。 – Athar 2017-04-23 12:24:29

+0

@Athar是的,這是。我在https://www.agenty.com的製作中使用了這個功能 – Vicky 2017-06-30 03:12:02

相關問題