1. ホーム
  2. amazon-ec2

[解決済み] Linuxのcronジョブを「Amazon流」に変換する方法とは?

2022-10-07 15:47:14

質問

良くも悪くも、私たちはこの度、全システムを LAMP ウェブアプリケーションを専用機からクラウド (Amazon EC2 マシン) に移行しました。今のところうまくいっていますが、私たちのやり方は クロンズ を行う方法は最適ではありません。Amazon特有の質問ですが、クラウドでcronジョブを管理する方法として、"Amazon way"を使用するのが最適なのでしょうか?

問題点 : 我々は、複数のWebサーバーを持っており、RSSフィードの作成、電子メールのトリガー、実際には多くの異なるもののようなバッチジョブのためにcronを実行する必要があります。しかし、クーロン・ジョブは は1つのマシン上でだけ実行する必要があります なぜなら、それらはしばしばデータベースに書き込むので、複数のマシンで実行すると、結果が重複してしまうからです。

これまでのところ、私たちは Web サーバーの 1 つを「マスター Web サーバー」として指定し、他の Web サーバーにはないいくつかの「特別な」タスクを持っています。クラウドコンピューティングのトレードオフは信頼性です。単一の障害点となるマスターウェブサーバーは必要ありません。すべての Web サーバーが同一であり、マスター Web サーバーをクラスターから取り外すことを忘れることなく、アップスケールやダウンスケールを行えるようにしたいのです。

Linux cron ジョブを単一障害点ではない一過性のワークアイテムに変換するために、どのようにアプリケーションを再設計すればよいのでしょうか?

これまでの私のアイデア

  • cron のみを実行する専用のマシンを用意する。これは少し管理しやすくなりますが、まだ単一障害点であり、余分なインスタンスを持つことはいくらかのお金を浪費することになります。
  • いくつかのジョブは、Linux crons から MySQL イベント に移動させることも考えられますが、アプリケーションロジックをデータベース層に置きたくないので、このアイデアはあまり好きではありません。
  • おそらく、すべてのマシンですべてのcronを実行することができますが、1つのサーバーだけが実際にアクションを取り、他のものは単にスキップするように、ロックメカニズムを実装するロジックのビットで開始するようにcronスクリプトを変更することができます。潜在的にバグがありそうなので、このアイデアのファンではありませんし、独自にロール オーバーするよりも Amazon のベスト プラクティスを使用することを希望します。
  • 私は、ジョブがどこかでスケジュールされ、キューに追加され、ウェブサーバーがそれぞれワーカーになって、quot; hey, I'll take this one" と言うことができる状況を想像しています。 Amazon シンプルワークフローサービス は、まさにこの種のもののように思えますが、私は現在それについてあまり知らないので、何か具体的なことがあれば助かります。cronのような単純なもののために、それは一種のヘビー級に思えるのですが?これは正しいサービスなのでしょうか、それとももっと適切なAmazonのサービスがあるのでしょうか?

更新しました。 質問をしてから、私は Amazon シンプルワークフローサービス のウェビナーを YouTube で見て、34:40 に気づきました ( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s ) で、サンプルアプリケーションとして cron ジョブに言及したスライドをちらっと見ました。そのドキュメントページでは、" Amazon SWFのAWS Flow Frameworkサンプル というドキュメントページで、cronのサンプルコードがあると書かれています。

... Cronジョブ このサンプルでは、長時間稼働するワークフローが定期的にアクティビティを実行します。 アクティビティを実行しています。新しいアクティビティとして実行を継続することができるため 実行を継続する機能により、非常に長い期間実行することができます。 このサンプルでは、新しい実行として実行を継続する機能により、非常に長い時間実行することができます。 ...

AWS SDK for Javaをダウンロードしました( http://aws.amazon.com/sdkforjava/ ) そして確かに、とんでもないフォルダのレイヤーに埋もれて、いくつかのJavaコード ( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow ).

問題は、正直に言うと、私のスキルセットで簡単に消化できるものではないので、これは本当に役に立ちません。同じサンプルは PHP SDK からは消えており、プロセスを説明するチュートリアルはないようです。だから、基本的に、私はまだアドバイスやヒントを探しています。

どのように解決するのですか?

12/Feb/16のAmazonのブログでは、以下のように書かれています。 AWS Lambdaを使用したSSHジョブのスケジューリング . これが答えになっていると思います。