web-dev-qa-db-ja.com

cronを使用せずにAWSでスケジュールされたタスクを実行する

現在、Amazonには単一のサーバーがあり、すべてのcronjobを配置しています。この単一障害点を排除し、すべてのタスクをWebサービスとして公開したいと思います。 VPC ELBの背後にあるサービスを、呼び出されたときにタスクを実行するいくつかのサーバーに公開したいと思います。

Amazon(AWS)が提供する、スケジュールされた間隔で繰り返しジョブを実行できる(Webサービスを実際に呼び出す)サービスがありますか?私は本当にcron機能を時間/日の仕様に関して保持したいのですが、ドライバーのHA(適切なタイミングでエンドポイントを呼び出すもの)をAWSにファームアウトします。

SQSがWebエンドポイントを提供する方法は気に入っていますが、私が伝えることができるのは、それらをスケジュールできないことです。 SWFも適切ではないようです。

67
rynop

AWS 発表 2015 re:Invent会議でのLambdaのスケジュールされた機能のサポート。この機能により、ユーザーはcronのような構文を使用してLambda関数を定期的に実行できます。 Lambdaドキュメントは例を示します Pythonを使用してスケジュールされたイベントを実行します。

現在、スケジュールされたラムダが実行できる最小解像度は1分です(cronと同じですが、systemdタイマーほど細かくはありません)。

Lambder プロジェクトは、Lambdaでスケジュールされた関数の使用を簡素化するのに役立ちます。

λGordonのcronの例 には、スケジュールされたラムダ関数を展開するためのおそらく最も簡単なインターフェイスがあります。


元の回答、後世のために保存。

Eric Hammondと他の人が述べたように、スケジュールされたタスクのためのネイティブAWSサービスはありません。他の回答に記載されている回避策と半分の解決策しかありません。

現在のオプションを要約するには:

  • Eric Hammondが説明するように、スケジュールに従って開始および停止する単一インスタンスの自動スケールグループ。
  • Simple Workflow Serviceタイマーの使用 、これはまったく直感的ではありません。この ケーススタディ は、JPLがSWFを使用して分散cronを構築したことを示していますが、実装の詳細はありません。 SWFコードサンプルに埋め込まれている コード例 への参照もあります。
  • cronlock のようなものを使用して自分で実行します。
  • nreliable Town Clock(UTC) のようなものを使用して、スケジュールに従ってLambda関数を実行します。 Lambdaは現在VPC内のリソースにアクセスできないことに注意してください

うまくいけば、より良いソリューションがすぐに登場するでしょう。

64
Ben Whaley

紹介AWS Cloudwatchのイベント

Lambdaやプログラミングなしで、コンソールを使用して、分、時間、日、またはCRON式を使用してスケジュールできます。

SNS HTTPエンドポイントを使用して1分ごとに実行するASP.net WEB API(HTTP Post)をスケジュールしたところ、完全に機能しています。

enter image description here

13
Vikash Rathee

Amazon(AWS)が提供する、スケジュールされた間隔で繰り返しジョブを実行できるサービスはありますか?

これは、AWSを使用してアーキテクチャを設計するときに人々(私を含む)が言及し続けるいくつかの単一障害点の1つです。 Amazonがサービスで解決するまで、ここに公開したハックがあります。これはいくつかの企業で積極的に使用されています。

AWS Auto Scalingは、cron形式で指定された繰り返しスケジュールを使用してインスタンスを実行および終了できます。

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

インスタンスが起動時にプロセスを自動的に実行するようにできます。

ジョブの持続時間がわからない場合は、ジョブが完了したときにインスタンスを終了するように設定できます。

これを設定するために必要な正確なコマンドを説明する記事を次に示します。

Auto Scalingを使用して繰り返しスケジュールでEC2インスタンスを実行する
http://alestic.com/2011/11/ec2-schedule-instance

一連のジョブを開始するためだけにインスタンス全体を開始するのはやり過ぎのように思えますが、t1.microの場合は数ペニーしかかかりません。

そのt1.microでも実際の作業を行う必要はありません。インスタンスは、他の冗長サーバーがタスクを処理するように、SQSまたはSNSを介してメッセージを注入できます。

7
Eric Hammond

これは定期的にドメイン上のスケジュールされたスクリプトを呼び出すことができるホストされたサードパーティのサイトです。

これは、Apacheではなくシェルでスクリプトを実行する必要がある場合は機能しません。

4
Travis Austin

このような音はあなたに役立つかもしれません: http://docs.aws.Amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

Task Runnerは、スケジュールされたタスクについてAWS Data Pipelineをポーリングし、Amazon EC2インスタンス、Amazon EMRクラスター、またはその他の計算リソース上で実行して、ステータスを報告するタスクエージェントアプリケーションです。アプリケーションに応じて、以下を選択できます。

  • AWS Data Pipelineが自動的に管理する計算リソースに1つ以上のTask Runnerアプリケーションをインストールして管理できるようにします。この場合、このセクションで説明されているようにTask Runnerをインストールまたは構成する必要はありません。これが推奨される構成です。

  • 長時間実行されるEC2インスタンスや物理サーバーなどの計算リソースにTask Runnerを手動でインストールして設定します。これを行うには、このセクションの手順を使用します。

  • Task Runnerの代わりにカスタムタスクエージェントを開発してインストールします。そのための手順は、カスタムタスクエージェントの実装に依存します。

3
Joe Zack

Amazonは昨年NodeJSにLambdaを導入しました。 昨日 Amazonは、スケジュール機能、VPCサポート、およびPythonサポート。

スケジュール機能を活用することにより、CRONの適切な交換が可能になります。

詳細- http://aws.Amazon.com/lambda/details/

enter image description here

3
Naveen Vijay

これは、AWS BeanStalkの比較的新しいオプションのようです。

https://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

基本的に、通常のSQSレシーバーのように機能しますが、SQSメッセージへの応答ではなく、cronスケジュールで呼び出されます。

1
Falcolas

SWFは、タスクをスケジュールするために使用できるAWSのWebサービスです。ほとんどの作業は、タスクとスケジュールが何であるかを指定することになります。

http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html は、SWFに対して記述されたスケーラブルなスケジューラです。

0
milind parikh