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 に実行権限を付与して、デプロイしても、、、

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
:

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

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

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 ユーザーが作成されたことを確認!

create_admin_success

admin サイトに接続成功

admin_created01

admin_created02

1.5 構成

admin_created02

最終的な構成

.
└── 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()

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

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

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


Follow me!

コメントを残す

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