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!