Amazon EC2 で一連の Python スクリプトを実行しようとしています。このヘルプガイドでは、Amazon SQS を使用してキューを管理することを提案しています。このガイドから、EC2 インスタンスを起動し、自分のコンピューターからジョブをキューに送信する方法は理解できましたが、Python スクリプトがサーバーからフェッチされた後に実行されるように EC2 インスタンスを設定する方法はわかりません。キューに入れ、結果を Amazon S3 に保存します。python スクリプトをフェッチして EC2 サーバーで実行し、結果を S3 に保存するにはどうすればよいですか?
2 に答える
上記のガイドでは、サンプル コードを含むgithub リポジトリへのリンクを見つけることができます。これはあなたの質問に答える実例です。それはよく文書化されており、読みやすいです。
つまり、pdf/tasks.pyソース コードをよく見てください。つまり、次のようなブートストラップ bash スクリプトを使用ec2.run_instances
して ec2 インスタンスを起動します。
- でインスタンスを更新します
apt-get
- ループ内で
boto.connect_sqs
SQS に接続し、タスクを取得するために使用します - タスクを実行します
boto.connect_s3()
S3 への接続と結果のアップロードに使用- スクリプトの終了時にインスタンスをシャットダウンします。
アップデート
さらに、fromをCheckResponseQueueTask
使用してメッセージを定期的にデキューし、それらを処理する良い例です。S3 へのアップロード結果を示すサンプル コードについては、ソース行 51 ~ 57 を参照してください。また、タスクの量がインスタンスの数を超えた場合の、キュー プロセッサを使用した新しいインスタンスの起動とブートストラップを示しています。214 ~ 244 行を参照してください。Celery.PeriodicTask
SQS
BOOTSTRAP_SCRIPT
CheckQueueLevelsTask
そのための 1 つの方法は、AWS SQS をすぐにタスク ブローカーとして使用できる EC2 インスタンスで Celeryを実行することです。
Celery と AWS SQS の使用に関する情報は、http: //docs.celeryproject.org/en/latest/getting-started/brokers/sqs.htmlにあります。
Celery は、並行性と複数のワーカーもサポートしています。これは、1 つの AWS SQS キューをリッスンする Celery を実行する複数の EC2 インスタンスを持つことができ、タスクがインスタンス間で自動的に分散されることを意味します。