AWS オートスケーリンググループで crontab を実行する

AWS オートスケーリンググループで crontab を実行する

次のような設定になっています: アプリケーション X がインストールされているサーバー 1 台。1 時間に 1 回 crontab を実行します。crontab はデータベースに接続し、負荷の高い計算を実行し、データを特別なデータ ファイルにエクスポートして、アプリケーションを再起動します。エクスポートは 10 分から 40 分の間で実行できます。

したい:

  • そのサーバーを AWS に移動し、自動スケーリング グループを使用します。

  • crontab は 1 つのサーバー上でのみ実行され、計算を実行してデータをエクスポートし、何らかの方法で他のすべてのライブ サーバーと同期します。

  • すべてのサーバーは新しいデータを自動的に検出し、安全に再起動する必要があります (たとえば、同期中ではありません)。

  • 自動スケーリング グループから起動される新しいサーバーは、実際のアプリケーションを起動する前に、起動時にデータ ファイルを自動的に取得します。

それを実行する方法についての「簡単な」アイデアや、AWS 固有のソリューションはありません。

これが私のアイデアです:

  • 自動スケーリング グループの外で 1 つのサーバーを実行します。そのサーバーでのみ crontab を実行します。すべてのデータ ファイルは S3 にアップロードされます。

  • すべての自動スケーリング サーバーには、1 分ごとに実行され、一意のファイル「please_download_me_TIMESTAMP」をチェックする crontab があります。

  • ファイルがダウンロードされると、スクリプトはサービスを再起動します。

  • 新しいサーバーが起動されると、起動時に S3 からすべてのファイルが自動的に取得されます。

これはうまくいくと思いますか?

答え1

これはAWS EC2の一般的な問題であり、解決されています。https://gist.github.com/kixorz/5209217実装例についてはこちらをご覧ください。

答え2

これは 2015 年の古い質問であり、Joe によって取り上げられたものであることを認識しているので、回答してもいいかもしれません。

ジョブが 1 時間に 1 回で、10 分から 40 分かかる場合、結局 1 時間分の料金を支払うことになります。サーバーを起動したりシャットダウンしたりする意味はなく、サーバーを実行したままにしておくだけです。

頻度が低い場合は、SQS キューにメッセージを入れる時間指定イベントを設定できます。これは t2.nano で実行できますが、Amazon サービス (Lambda) を使用するとより安価に実行できるかもしれません。キューのサイズに基づいて自動的にスケールします。処理するデータがある場合、サーバーが作成され、データが処理され、必要な場所に移動されてからシャットダウンされます。

別の方法としては時間ベースのスケーリングがありますが、これも 1 時間ごとよりも頻度が低い場合に限られます。

関連情報