15

AWS EC2 で実行されている Web サイトがあります。サイトマップ ファイルを生成し、ファイルをさまざまなブラウザーにアップロードする夜間ジョブを作成する必要があります。この機能を可能にする AWS のユーティリティを探しています。私は次のことを検討しました:

1) このタスクを実行するトリガーとなる Web サーバーへの要求を生成します。

  • サーバースレッドを拘束し、ホストでCPUサイクルを使用するため、このアプローチは好きではありません

2) このタスクを実行するために、Web サーバーが実行されているマシンで cron ジョブを作成します。

  • 繰り返しますが、Web サーバーから CPU サイクルが奪われるため、このアプローチは好きではありません。

3) 別の EC2 インスタンスを作成し、cron ジョブを設定してタスクを実行する

  • これで Web サーバーのリソースの問題は解決しますが、5 分未満のジョブを実行するために追加の EC2 インスタンスにお金を払う必要はありません。お金の無駄!

他のオプションはありますか?これは ElasticMapReduce の仕事ですか?

4

7 に答える 7

16

私があなたの立場だったら、毎晩干潮時に Web サーバーで cron ジョブを実行し、リソースの使用状況を監視して、Web サーバーに干渉しないようにすることから始めます。

うまく動作しない場合、またはアーキテクチャのエレガンスに高い基準がある場合 (私はそれを賞賛できます)、おそらく別のインスタンスを実行する必要があります。

一晩に 1 回だけ実行すればよいジョブのために、1 日 24 時間インスタンスを実行するのはもったいないと思うことに同意します。

アプローチの 1 つを次に示します。プライマリ マシン (現在は Web サーバー) の cron ジョブは、新しいインスタンスを起動してタスクを実行できます。インスタンスの起動時に実行されるユーザーデータ スクリプトを渡すことができ、タスクの完了時にインスタンスがシャットダウンする可能性があります (ここで、instance-initiated-shutdown-behavior は「terminate」に設定されています)。

残念ながら、これは関心の分離を強制するというあなたの欲求を逃します。複数の Web サーバーへのスケーリングを開始すると複雑になり、ジョブを実行するには Web サーバーが稼働している必要があります。

数か月前、既存の AWS 機能に完全に依存し、他のサーバーを実行する必要がない、cron スケジュールでインスタンスを実行する別のアプローチを思いつきました。

基本的な考え方は、毎晩特定の時間にグループを「0」から「1」にスケーリングする繰り返しアクションで Amazon の Auto Scaling を使用することです。インスタンスは、ジョブが完了すると終了する可能性があり、Auto Scaling は後で確実に終了するようにクリーンアップできます。

この記事では、詳細と実際の例を提供しました。

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

于 2012-01-10T23:57:23.107 に答える
9

Amazon は、Elastic Beanstalk の新機能をリリースしました[1]。CRON 構文で URL を呼び出すスケジューリングタスクを設定する cron.yaml を含むワーカー環境を作成できるようになりました: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers .html#worker-定期タスク

[1] http://aws.amazon.com/about-aws/whats-new/2015/02/17/aws-elastic-beanstalk-supports-environment-cloning-periodic-tasks-and-1-click-iam -役割-作成/

于 2015-02-24T10:54:56.333 に答える
2

EC2 の *nix バージョンで実行していると仮定すると、nice コマンドを使用して cron で実行することをお勧めします。

niceはジョブの優先度を変更します。Web サーバーがビジー状態の場合、cron ジョブは CPU を待機する必要があります。

nice 番号が大きいほど、優先順位は低くなります。Niceness の範囲は -20 (最も有利なスケジューリング) から 19 (最も不利) です。

于 2013-01-27T22:22:01.460 に答える
0

AWS Opswork を使用して、アプリケーションの cron ジョブをセットアップできます。詳細については、AWS OpsWork のユーザー ガイドを参照してください。cron ジョブのセットアップ方法を説明するページを見つけました: http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-extend-cron.html

于 2014-02-26T16:52:30.070 に答える
0

このタスクが 1 台のマシンで実行できる場合は、Ruby で記述されたフォグ ジェムを使用してプログラムでインスタンスを起動することをお勧めします。

インスタンスを起動したら、ssh 経由でコマンドを実行できます。完了したら、霧でシャットダウンすることもできます。

タスクを map reduce 方式で記述できる場合、Amazon EMR も優れたソリューションです。EMR がインスタンスの開始/停止を処理します。elastic-mapreduce-ruby cli ツールは、自動化に役立ちます

于 2012-01-10T23:28:02.000 に答える