Djangoでバッチ処理を行う(AWS Elasticbeanstalk)
- (1) Django起動まで
- (2) (TIPS) SSH、RDSへの接続
- (3) (TIPS) ログの確認とデプロイ結果の確認
- (4) いくつかのトラブルシュート
- (5) アプリケーションの作成
- (6) createadmin スクリプトの実行のトラブルシュート
- (7) 静的IPアドレスの設定とドメインの取得とDNSの設定
- AWS Elastic Beanstalk RDS の文字コードをutf-8に設定しなおす
- Djangoでバッチ処理を行う(AWS Elasticbeanstalk)
1.Djangoでバッチを動かす
django-kronos を使って極めて簡単に実現できた。
https://github.com/jgorset/django-kronos
プロジェクトルートもしくはアプリケーションにある、cron モジュールを自動で読み込んでくれる。
試しに1時間毎にメールを送るモジュールを書いてみる。
import kronos from phraseit.service import mail @kronos.register('0 * * * *') def my_method(): message = r'this is kronos test mail' mail.send_mail('Hiroto Yagi', 'pppiroto@gmail.com', 'krons test', message)
よくわからないが、Django management commands でも同様に使えるらしい。
さて、動作原理としては、cron に モジュールの実行を登録するものみたいなので、Windows ではそのまま動かない。
一度 AWS Elasticbeanstalk にデプロイしてみる。
2.登録タスクのリスト
2.1 VirtualEnv の開始
EC2にSSHでログインし、rootになった上で、VirtualEnv を起動。
Last login: Tue Jun 30 13:27:52 2015 from 14-132-74-50.aichieast1.commufa.jp _____ _ _ _ ____ _ _ _ | ____| | __ _ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __ | _| | |/ _` / __| __| |/ __| _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ / | |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | < |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\ Amazon Linux AMI This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH WILL BE LOST if the instance is replaced by auto-scaling. For more information on customizing your Elastic Beanstalk environment, see our documentation here: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html [ec2-user@ip-172-31-30-53 ~]$ cd /opt/python/run/venv/bin [ec2-user@ip-172-31-30-53 bin]$ sudo su [root@ip-172-31-30-53 bin]# . activate (venv)[root@ip-172-31-30-53 bin]#
アプリケーションのデプロイディレクトリに移動し、python manage.py showtasks
(venv)[root@ip-172-31-30-53 bin]# cd /opt/python/current/app (venv)[root@ip-172-31-30-53 app]# python manage.py showtasks * List of tasks registered in Kronos * >> Kronos tasks >> my_method >> Django tasks
タスクが登録されているのがわかる。
2.2 cron に登録
これだけでは、動いてくれないので、cronに登録する。
(venv)[root@ip-172-31-30-53 app]# python manage.py installtasks Installed 1 tasks.
確認
(venv)[root@ip-172-31-30-53 app]# crontab -l 0 * * * * /opt/python/run/venv/bin/python /opt/python/bundle/47/app/manage.py runtask my_method --settings=phraseit.settings $KRONOS_BREAD_CRUMB
root で登録するのが妥当かどうかわからないが、root でやらないと、エラーが出るので安易な方法を選ぶ。
2.3 メールが一時間毎に届く
仕事中にもきっちり毎時0分にメールが届いた。OKOK。
2.4 cronタスクの解除
動作確認はとれた。このままだとかなりうっとおしいので、cronタスクを解除しておく。
(venv)[root@ip-172-31-30-53 app]# crontab -r (venv)[root@ip-172-31-30-53 app]# crontab -l no crontab for root
メール飛ばなくなった。OK!