2017-01-13 6 views
4

私は、DjangoアプリケーションをAWS LambdaにZappaでデプロイすることを実験しています。サーバレスAWSの非同期タスクキューLambda/Django/Zappa

私の他のいくつかの(EC2/EBSがホストする)Djangoプロジェクトでは、かなり時間がかかる重い計算を行う必要がある場合(電子メールをたくさん送信する、分)、Celeryが使用されます。これはタスクキューシステムであり、タスクはキューに送られ、応答はすぐに返され、後で作業者が処理することができます。

ラムダで実行されているZappa-Djangoアプリのためにセロリのようなタスクキューイングシステムを実装する最良の方法は何でしょうか?

ザッパ/ラムダは、スケジュールされたタスクをサポートし、アプリケーションのモデルは、処理は、後にスケジュール機能によって行うことができるとの結果がDBに保存することができように設計することができます。しかし、私は1分ごとにタスクのポーリングが十分に頑強だとは思っていません。遅延タスクをすぐに開始する必要が頻繁にあります。

後に実行されるようにキューに入れられた任意のパラメータで(Djangoのアプリ内からの)機能をすぐにDjangoのビューからの応答を返し、持ってする簡単な方法はありますか?

答えて

1

using SNSとすることができます。トピックにlambdaをサブスクライブし、そこにjsonペイロードでメッセージを公開してください。

+0

これは最適な解決策であるかどうかはわかりません。それはうまくいくかもしれませんが、タスクのコンシューマーは別のラムダ関数で実行される別々のコードでなければなりませんか?また、すべてのデータはJSONシリアライズ可能ではなく、djangoアプリケーションからの環境変数などは利用できません。 – tuoppimas

+0

セロリも同じように動作します。タスク引数はjsonにシリアル化され、別のプロセスはタスクを実行します。 変数が必要な場合は、 "worker"ラムダに設定ファイルを含めることができます。 – Raz

+0

ありがとう、私はそれを調べます。それにもかかわらず、別のLambaの機能「デプロイメント」が必要ですか?自動的にタスクを除く他のすべてのコードから剥がし、他の1 - たぶん、二つの別々のジャンゴ・ザッパの展開は、解決策になる可能性があります。 – tuoppimas

0

私はzappaのdb駆動型タスクキューを作成しました。 https://github.com/andytwoods/zappa-call-later。初期段階では、生産中に使用しています。

すべてのX分、Zappaイベントは、タスクをチェックする関数をpingします。タスクを遅らせたり、繰り返したりすることができます。

+0

私は最近、ザッパはまた、いずれかのSNSや直接ラムダの呼び出しを経由して、ネイティブの非同期タスクをサポートしていることに気づきました。 – tuoppimas

+0

絶対に、残念ながら私はあなたが打ち上げを遅らせることはできないと思います。 – andyw