AWS Elastic Beanstalk Django アプリケーション環境を CentOS6.5 上に PyDevを使って構築する(6) createadmin スクリプトの実行のトラブルシュート

ここまで、

を行った。

チュートリアルにある、コマンドを動かす箇所(ローカルコンピュータで、createadmin.py という名前のファイルを作成し、最上位ディレクトリ(/root/mysite/)の scripts という名前のディレクトリに保存します のくだり)はなかなか難関で先送りしてきたので、最後にトラブルシュートする。

1.Error occurred during build: Command 02_createadmin failed が発生

1.1 経緯

チュートリアル通りに、.ebextensions/xxx.config を記述して、scripts/createadmin.py に実行権限を付与して、デプロイしても、、、

  1. container_commands:
  2. 01_syncdb:
  3. command: "django-admin.py syncdb --noinput"
  4. leader_only: true
  5. 02_createadmin:
  6. command: "scripts/createadmin.py"
  7. leader_only: true
  8. 03_collectstatic:
  9. command: "django-admin.py collectstatic --noinput"
  10. option_settings:
  11. - namespace: aws:elasticbeanstalk:container:python
  12. option_name: WSGIPath
  13. value: mysite/wsgi.py
  14. - namespace: aws:elasticbeanstalk:container:python:staticfiles
  15. option_name: /static/
  16. value: static/
  17. - option_name: DJANGO_SETTINGS_MODULE
  18. value: mysite.settings
  19. - option_name: AWS_SECRET_KEY
  20. value: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  21. - option_name: AWS_ACCESS_KEY_ID
  22. value: AKIAIOSFODNN7EXAMPLE

以下のようなエラーが出続ける

  1. [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)
  2. at /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor/exec.rb:81:in `sh'
  3. from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor/exec.rb:24:in `sh'
  4. 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'
  5. from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/cfn-wrapper.rb:2
  6. :

ググって、設定ファイルに実行権限を付与するスクリプトを追記してもエラー

http://stackoverflow.com/questions/21686439/django-on-aws-elasticbeanstalk-command-02-createadmin-failed

  1. container_commands:
  2. 00_make_executable:
  3. command: "chmod +x scripts/createadmin.py"
  4. 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 をコマンドとして実行しようとしてエラーになっているっぽい。

  1. [ec2-user@ip-172-31-0-73 log]$ sudo grep "createadmin.py" ./*
  2. ./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
  3. ./cfn-init.log:2015-01-05 13:50:37,793 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed
  4. ./cfn-init.log:2015-01-05 13:50:37,793 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found
  5. ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `=='
  6. ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:'
  7. ./cfn-init.log:2015-01-05 13:53:39,184 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed
  8. ./cfn-init.log:2015-01-05 13:53:39,185 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found
  9. ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `=='
  10. ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:'
  11. ./cfn-init.log:2015-01-05 13:56:57,543 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed
  12. ./cfn-init.log:2015-01-05 13:56:57,544 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found
  13. ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `=='
  14. ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:'
  15. ./cfn-init.log:2015-01-05 14:03:05,157 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed
  16. ./cfn-init.log:2015-01-05 14:03:05,158 [DEBUG] Command 02_createadmin output: scripts/createadmin.py: line 1: from: command not found
  17. ./cfn-init.log:scripts/createadmin.py: line 2: syntax error near unexpected token `=='
  18. ./cfn-init.log:scripts/createadmin.py: line 2: `if User.objects.count() == 0:'
  19. ./cfn-init.log:2015-01-05 14:14:31,009 [ERROR] Command 02_createadmin (scripts/createadmin.py) failed
  20. ./cfn-init.log: File "scripts/createadmin.py", line 7, in
  21. ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py
  22. ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py
  23. ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py
  24. ./eb-activity.log: inflating: /opt/python/ondeck/app/phrase/scripts/createadmin.py
  25. ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py
  26. ./eb-activity.log: inflating: /opt/python/ondeck/app/phrase/scripts/createadmin.py
  27. ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py
  28. ./eb-activity.log: inflating: /opt/python/ondeck/app/scripts/createadmin.py
  29. ./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)

  1. 02_createadmin:
  2. command: "python scripts/createadmin.py"
  3. leader_only: true

1.4 成功!

MySQL WorkbenchからRDSに接続して、admin ユーザーが作成されたことを確認!

create_admin_success

admin サイトに接続成功

admin_created01

admin_created02

1.5 構成

admin_created02

最終的な構成

  1. .
  2. └── phrase
  3. ├── manage.py
  4. ├── phrase
  5. ├── __init__.py
  6. ├── __init__.pyc
  7. ├── settings.py
  8. ├── settings.pyc
  9. ├── templates
  10. └── phrase.html
  11. ├── urls.py
  12. ├── urls.pyc
  13. ├── views.py
  14. ├── views.pyc
  15. ├── wsgi.py
  16. └── wsgi.pyc
  17. ├── requirements.txt
  18. └── scripts
  19. └── createadmin.py

また、createadmin.py は、

https://docs.djangoproject.com/en/1.7/topics/auth/default/

に従い、チュートリアルの記述から変更してある。

  1. #!/usr/bin/env python
  2.  
  3. from django.contrib.auth.models import User
  4.  
  5. if User.objects.count() == 0:
  6. admin = User.objects.create_superuser('admin', 'pppiroto@gmail.com', 'xxxxxx')
  7. admin.save()

なんとか、冬休み内にめどがついた。。。

もうすこし、チュートリアルが親切だとよいのだが。。。

まぁ日本語になっているだけましか。


Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です