74

現在、私はすべての cron ジョブを配置する単一のサーバーを amazon に持っています。この単一障害点を排除し、すべてのタスクを Web サービスとして公開したいと考えています。VPC ELB の背後にあるサービスを、呼び出されたときにタスクを実行するいくつかのサーバーに公開したいと考えています。

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

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

4

11 に答える 11

70

AWSは、2015 年の re:Invent カンファレンスで、Lambda でのスケジュールされた関数のサポートを発表しました。この機能により、ユーザーは cron に似た構文を使用してスケジュールに基づいて Lambda 関数を実行できます。Lambda ドキュメントは、 Python を使用してスケジュールされたイベントを実行する例を示しています。

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

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

Gordon の cron の例は、スケジュールされたラムダ関数を展開するためのおそらく最も単純なインターフェイスを備えています。


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

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

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

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

うまくいけば、より良い解決策がすぐに出てきます。

于 2015-01-17T23:59:25.063 に答える
16

AWS Cloudwatch でのイベントの紹介

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

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

ここに画像の説明を入力

于 2016-05-12T15:19:37.807 に答える
7

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 を介してメッセージを挿入できます。

于 2012-07-23T18:52:34.287 に答える
4

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

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

于 2013-08-15T22:01:34.043 に答える
3

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

Scheduled Function を活用することで、CRON の適切な置き換えを実現できます。

詳細情報 - http://aws.amazon.com/lambda/details/

ここに画像の説明を入力

于 2015-10-09T14:14:15.903 に答える
3

次のように聞こえるかもしれません: 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 の代わりに、カスタム タスク エージェントを開発してインストールします。そのための手順は、カスタム タスク エージェントの実装によって異なります。

于 2013-08-12T14:10:56.017 に答える
1

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

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

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

于 2015-06-25T15:57:34.130 に答える