AWS Elastic Beanstalk Django アプリケーション環境を CentOS6.5 上に PyDevを使って構築する(6) createadmin スクリプトの実行のトラブルシュート
- (1) Django起動まで
- (2) (TIPS) SSH、RDSへの接続
- (3) (TIPS) ログの確認とデプロイ結果の確認
- (4) いくつかのトラブルシュート
- (5) アプリケーションの作成
- (6) createadmin スクリプトの実行のトラブルシュート
- (7) 静的IPアドレスの設定とドメインの取得とDNSの設定
- AWS Elastic Beanstalk RDS の文字コードをutf-8に設定しなおす
- Djangoでバッチ処理を行う(AWS Elasticbeanstalk)
ここまで、
を行った。
チュートリアルにある、コマンドを動かす箇所(ローカルコンピュータで、createadmin.py という名前のファイルを作成し、最上位ディレクトリ(/root/mysite/)の scripts という名前のディレクトリに保存します のくだり)はなかなか難関で先送りしてきたので、最後にトラブルシュートする。
1.Error occurred during build: Command 02_createadmin failed が発生
1.1 経緯
チュートリアル通りに、.ebextensions/xxx.config を記述して、scripts/createadmin.py に実行権限を付与して、デプロイしても、、、
container_commands: 01_syncdb: command: "django-admin.py syncdb --noinput" leader_only: true 02_createadmin: command: "scripts/createadmin.py" leader_only: true 03_collectstatic: command: "django-admin.py collectstatic --noinput" option_settings: - namespace: aws:elasticbeanstalk:container:python option_name: WSGIPath value: mysite/wsgi.py - namespace: aws:elasticbeanstalk:container:python:staticfiles option_name: /static/ value: static/ - option_name: DJANGO_SETTINGS_MODULE value: mysite.settings - option_name: AWS_SECRET_KEY value: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY - option_name: AWS_ACCESS_KEY_ID value: AKIAIOSFODNN7EXAMPLE
以下のようなエラーが出続ける
[2015-01-03T15:20:42.709Z] INFO [1575] - [CMD-Startup/StartupStage0/EbExtensionPostBuild] : Activity execution failed, because: command failed with error code 1: Error occurred during build: Command 02_createadmin failed (Executor::NonZeroExitStatus) at /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor/exec.rb:81:in `sh' from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor/exec.rb:24:in `sh' from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/cfn-wrapper.rb:51:in `call_cfn_script' from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/cfn-wrapper.rb:2 :
ググって、設定ファイルに実行権限を付与するスクリプトを追記してもエラー
container_commands: 00_make_executable: command: "chmod +x scripts/createadmin.py" leader_only: true
http://www.grigory.ca/2012/09/getting-started-with-django-on-aws-elastic-beanstalk/
leader_only: true is an important flag, it tells Beanstalk to run the commend once per deployment only on the “leader” instance, and not once per EC2 instance.
ちなみに、leader_only: true の記述は、重要なフラグで、EC2インスタンスの起動時ではなく、デプロイ時にのみ一度実行される “leader” インスタンスで実行されるようにするものらしい。
1.2 原因
サーバーにSSHでログインし、ログ(/var/log)をcreateadmin.pyでサーチしてみたところ、cfn-init.log の最初に、Permission denied となっている。次に、エラーが、from: command not found に変わっている。
最初は実行権限がなかったが、上記、chmod +x を スクリプトに追記することにより、createadmin.py をシェルスクリプトとして実行使用として、from django.contrib.auth.models import User をコマンドとして実行しようとしてエラーになっているっぽい。
[ec2-user@ip-172-31-0-73 log]$ sudo grep "createadmin.py" ./* ./cfn-init.log:2015-01-05 13:47:39,855 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed ./cfn-init.log:2015-01-05 13:47:39,855 [DEBUG] Command 02_createadmin output: /bin/sh: scripts/createadmin.py: Permission denied ./cfn-init.log:2015-01-05 13:50:37,793 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed ./cfn-init.log:2015-01-05 13:50:37,793 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `==' ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:' ./cfn-init.log:2015-01-05 13:53:39,184 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed ./cfn-init.log:2015-01-05 13:53:39,185 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `==' ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:' ./cfn-init.log:2015-01-05 13:56:57,543 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed ./cfn-init.log:2015-01-05 13:56:57,544 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `==' ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:' ./cfn-init.log:2015-01-05 14:03:05,157 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed ./cfn-init.log:2015-01-05 14:03:05,158 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `==' ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:' ./cfn-init.log:2015-01-05 14:14:31,009 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed ./cfn-init.log: File "scripts/createadmin.py", line 7, in./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py ./eb-activity.log: inflating: /opt/python/ondeck/app/phrase/scripts/createadmin.py ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py ./eb-activity.log: inflating: /opt/python/ondeck/app/phrase/scripts/createadmin.py ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py ./secure:Jan 5 14:15:54 ip-172-31-0-73 sudo: ec2-user : TTY=pts/0 ; PWD=/var/log ; USER=root ; COMMAND=/bin/grep createadmin.py ./boot.log ./cfn-hup.log ./cfn-init.log ./cfn-wire.log ./cloud-init-output.log ./cloud-init.log ./cron ./dmesg ./eb-activity.log ./eb-cfn-init-call.log ./eb-cfn-init.log ./eb-commandprocessor.log ./eb-publish-logs.log ./eb-tools.log ./eb-version-deployment.log ./httpd ./maillog ./messages ./secure ./spooler ./wtmp ./yum.log
1.3 対策
ということで、単純に、.ebextensions/xxx.config の該当箇所を以下のようにpython を呼び出すように書き換え、コミットしてプッシュ(git aws.push)
02_createadmin: command: "python scripts/createadmin.py" leader_only: true
1.4 成功!
MySQL WorkbenchからRDSに接続して、admin ユーザーが作成されたことを確認!
admin サイトに接続成功
1.5 構成
最終的な構成
. └── phrase ├── manage.py ├── phrase │ ├── __init__.py │ ├── __init__.pyc │ ├── settings.py │ ├── settings.pyc │ ├── templates │ │ └── phrase.html │ ├── urls.py │ ├── urls.pyc │ ├── views.py │ ├── views.pyc │ ├── wsgi.py │ └── wsgi.pyc ├── requirements.txt └── scripts └── createadmin.py
また、createadmin.py は、
https://docs.djangoproject.com/en/1.7/topics/auth/default/
に従い、チュートリアルの記述から変更してある。
#!/usr/bin/env python from django.contrib.auth.models import User if User.objects.count() == 0: admin = User.objects.create_superuser('admin', 'pppiroto@gmail.com', 'xxxxxx') admin.save()
なんとか、冬休み内にめどがついた。。。
もうすこし、チュートリアルが親切だとよいのだが。。。
まぁ日本語になっているだけましか。