AWS Elastic Beanstalk Django アプリケーション環境を CentOS6.5 上に PyDevを使って構築する(1) Django起動まで
- (1) Django起動まで
- (2) (TIPS) SSH、RDSへの接続
- (3) (TIPS) ログの確認とデプロイ結果の確認
- (4) いくつかのトラブルシュート
- (5) アプリケーションの作成
- (6) createadmin スクリプトの実行のトラブルシュート
- (7) 静的IPアドレスの設定とドメインの取得とDNSの設定
- AWS Elastic Beanstalk RDS の文字コードをutf-8に設定しなおす
- Djangoでバッチ処理を行う(AWS Elasticbeanstalk)
基本的にチュートリアル、AWS Elastic Beanstalk への Django アプリケーションのデプロイ に従うが、CentOS6.5 に、Eclipse+PyDev を利用した環境を作成する。
チュートリアル で、Djangoの動作確認(It worked! のページが表示)が出来るところまで。
1.CentOS環境の構築
1.1.CentOS6.5 にPython2.7 をインストールする
まず、Elastic Beanstalk を使用する条件として、Python のバージョンが、2.7 もしくは 3.0 と指定されているため、Python2.7 を CentOS6.5 にインストールする。CentOS7 だと、Python2.7 が最初からインストールされているが、CentOS6.5では、Python2.6がデフォルト。
・Python2.7 をインストールして、PIPが利用出来るようにする手順
を実施し、ソースコードからコンパイル、インストールする。インストールするときには
、altinstall を行い、2.6と2.7 を共存させる。2.6を2.7で置き換えてしまうと、システム管理
ツールなど、Pythonを利用しているツールが動かなくなってしまう。
# make && make altinstall
あとは、コンパイル時にエラーになったら、不足しているライブラリなどを適宜インストールする。
Django のインストールはこの時点では不要。
1.2.Virtualenv のインストールと起動
https://virtualenv.pypa.io/en/latest/index.html
Pythonの複数バージョンを隔離することで、同一環境にインストール出来るVirtualenvをインストールする。
ホームディレクトリにvirtualenv ディレクトリ(名称任意)を作成し、python2.7の環境を作成する。
[piroto@localhost ~]$ mkdir virtualenv [piroto@localhost ~]$ virtualenv -p python2.7 ~/virtualenv Already using interpreter /usr/local/bin/python2.7 New python executable in /home/piroto/virtualenv/bin/python2.7 Also creating executable in /home/piroto/virtualenv/bin/python Installing setuptools, pip...done.
Virtualenv を起動(activate)する。(終了するときは、deactivate)
[piroto@localhost ~]$ . ~/virtualenv/bin/activate
1.3.Djangoとmysql-pythonのインストール
1.3.1 Djangoのインストール
Virtualenv 環境に、pip を使ってDjango1.7.1をインストール
(virtualenv)[piroto@localhost ~]$ pip install django==1.7.1 Collecting django==1.7.1 Using cached Django-1.7.1-py2.py3-none-any.whl Installing collected packages: django Successfully installed django-1.7.1
1.3.2 mysql-python のインストール
同様に、mysql-python1.2.5 をインストール
(virtualenv)[piroto@localhost ~]$ pip install mysql-python==1.2.5 Collecting mysql-python==1.2.5 Downloading MySQL-python-1.2.5.zip (108kB) 100% |################################| 110kB 2.8MB/s Installing collected packages: mysql-python :(略) Successfully installed mysql-python-1.2.5
1.3.3 MySQLをローカル環境に導入
チュートリアルにはないが、ローカル環境で実行させたいので、Elastic Beanstalk の MySQL バージョンに合わせて5.5 をローカルにインストールする。
http://dev.mysql.com/downloads/mysql/
Linux – Generic を選択し、Looking for previous GA versions? リンクをクリック
一式必要なものがバンドルされた、Linux – Generic 2.6 (x86, 32-bit), RPM Bundle のダウンロードボタンを押下
この画面で、No thanks, just start my download. のリンクに直接ダウンロードするパスがかかれているので、それを使って、wget する。上のボタンはサインインが必要で面倒。
解凍とインストール
# tar -xvf MySQL-5.5.41-1.linux2.6.i386.rpm-bundle.tar rpm -ivh MySQL-shared-5.5.41-1.linux2.6.i386.rpm rpm -ivh MySQL-shared-compat-5.5.41-1.linux2.6.i386.rpm rpm -ivh MySQL-server-5.5.41-1.linux2.6.i386.rpm rpm -ivh MySQL-client-5.5.41-1.linux2.6.i386.rpm rpm -ivh MySQL-devel-5.5.41-1.linux2.6.i386.rpm
root のパスワードを設定
/usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'
以下を実行
- root でログイン
- “phrase” という名前のデータベースを作成
- “phrase_app” というユーザーを作成
- “phrase_app” にDB管理権限を与える
$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.5.41 MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database phrase default character set utf8; Query OK, 1 row affected (0.03 sec) mysql> create user phrase_app@'%'; Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on *.* to phrase_app@'%' identified by '*****' with grant option;
1.4 AWS Elastic Beanstalk ツールのインストールと設定
1.4.1 AWS Elastic Beanstalk Command Line Tool のダウンロード
以下からダウンロードし、適当なディレクトリに解凍する
http://aws.amazon.com/code/6752709412171743
1.4.2 PATHを通し、エイリアスを設定
(virtualenv)[piroto@localhost phrase]$ export PATH=$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.6.4/eb/linux/python2.7/ (virtualenv)[piroto@localhost phrase]$ alias eb="python2.7 /opt/AWS-ElasticBeanstalk-CLI-2.6.4/eb/linux/python2.7/eb"
1.4.3 bashrc に設定を記述しておく
/etc/bashrc の末尾に以下を追記し、次回ログイン時にも再設定されるようにしておく
export PATH=$PATH:/opt/AWS-ElasticBeanstalk-CLI-2.6.4/eb/linux/python2.7/ alias eb="python2.7 /opt/AWS-ElasticBeanstalk-CLI-2.6.4/eb/linux/python2.7/eb"
2.Eclipse + PyDevのインストール
2.1 Eclipse をダウンロードして適当なディレクトリに展開
http://www.eclipse.org/downloads/?osType=linux&release=undefined
2.2 PyDevのインストール
http://pydev.org/download.html
help > Install new Software > Add ボタン押下
以下を入力し、OK、PyDevにチェックし、ウィザードに従いインストールを完了する。
Name: PyDev
Location : http://pydev.org/updates
3.プロジェクトの作成
3.1 Virtualenvをインタープリタとして設定
http://okdtsk.hateblo.jp/entry/20111221/1324415529
Widow > Preference で設定ウィンドウをひらき、PyDev > Interpreters > Python Interpreter で New ボタンを押下。
Interpreter Executeble のパスに、上記でインストールした Virtualenv のパス以下のpython2.7を指定する。
OKで、必要なライブラリのパスが自動で設定される。
3.2 PyDev Django プロジェクトの作成
Eclipse パッケージエクスプローラーの右クリック New > Other から ダイアログを開き、Pydev Django Projectを選択
プロジェクト名を入力。今回の例では、“phrase” とする。
以下、さまざまな設定で、”phrase” というキーワードが出てくるが、それぞれのアプリケーション名に読み替える。
以降、ウィザードに従い完了させる。
3.3 Git の設定
作成したプロジェクトの右クリックからTeam > Shre Project
Git を選択し次へ
「Use or create repository in parent folder of project」にチェックをいれ、下段の Create Repository ボタンを押下したのち、プロジェクトにチェックを入れて完了する。
プロジェクトを削除すると、リポジトリも併せて削除されてしまうためか、リポジトリをEclipseのワークスペースに作成するのは、非推奨とメッセ-が出るが、続行する。
3.4 プロジェクトの編集
最低限のプロジェクト編集を行う。
3.4.1 settings.py を編集する
チュートリアルの記述では、if ‘RDS_DB_NAME’ … ブロックの中だけだが、ローカルで実行したときには
、上記でインストールしたローカルのMySQLを参照するような記述にDATABASESを置き換える。
if 'RDS_DB_NAME' in os.environ: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': os.environ['RDS_DB_NAME'], 'USER': os.environ['RDS_USERNAME'], 'PASSWORD': os.environ['RDS_PASSWORD'], 'HOST': os.environ['RDS_HOSTNAME'], 'PORT': os.environ['RDS_PORT'], } } else: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'phrase', 'USER': 'phrase_app', 'PASSWORD': '*****', 'HOST': '127.0.0.1', 'PORT': '3306', } }
以下の記述を追記する
STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'static')
3.4.2 .ebextentions/config ファイルの作成
ルートディレクトリに.ebextentions ディレクトリを作成し、その中に、.config 拡張子 のファイルを作成する。config 拡張子であれば、名前は任意で、アルファベット順に実行される。
(virtualenv)[piroto@localhost phrase]$ ls -a . .. .git .project .pydevproject manage.py phrase phrase.config (virtualenv)[piroto@localhost phrase]$ mkdir .ebextensions (virtualenv)[piroto@localhost phrase]$ vi phrase.config
内容はチュートリアル通り。
チュートリアルでは、2回に分けて編集されるが、admin ユーザー作成のスクリプトなどを設定する2回目はうまく動かないので、1回目の状態で確認する。
container_commands: 01_syncdb: command: "django-admin.py syncdb --noinput" leader_only: true option_settings: - namespace: aws:elasticbeanstalk:container:python option_name: WSGIPath value: phrase/wsgi.py - option_name: DJANGO_SETTINGS_MODULE value: phrase.settings
3.4.3 requirements.txt の作成
ルートディレクトリに、requrements.txt を作成する。この記述にもとづいて、EC2のサーバが構成される。
pip freeze を使用すると以下のようなファイルが作成される。
(virtualenv)[piroto@localhost phrase]$ pip freeze > requirements.txt (virtualenv)[piroto@localhost phrase]$ cat requirements.txt boto==2.34.0 Django==1.7.1 MySQL-python==1.2.5
3.5 構成の全体とGit コミット
プロジェクトの右クリック から Team > Commt を実行
コミットすると、全体で以下の様な構成になる。
4. Elastic Beanstalk の初期化と開始
4.1 初期化
Virtualenv が開始された状態で、上記プロジェクトのルートフォルダから、eb init を実行する。
設定内容は、チュートリアル「AWS Elastic Beanstalk を構成するには」を参照
(virtualenv)[piroto@localhost phrase]$ eb init To get your AWS Access Key ID and Secret Access Key, visit "https://aws-portal.amazon.com/gp/aws/securityCredentials". Enter your AWS Access Key ID (current value is "AKIAJ*****DC3CQ"): ************************** Enter your AWS Secret Access Key (current value is "7StGV*****emLaR"): ************************** Select an AWS Elastic Beanstalk service region. Available service regions are: 1) US East (Virginia) 2) US West (Oregon) 3) US West (North California) 4) EU West (Ireland) 5) EU Central (Frankfurt) 6) Asia Pacific (Singapore) 7) Asia Pacific (Tokyo) 8) Asia Pacific (Sydney) 9) South America (Sao Paulo) Select (1 to 9): 7 Enter an AWS Elastic Beanstalk application name (auto-generated value is "phrase"): Enter an AWS Elastic Beanstalk environment name (auto-generated value is "phrase-env"): Select an environment tier. Available environment tiers are: 1) WebServer::Standard::1.0 2) Worker::SQS/HTTP::1.0 Select (1 to 2): 1 Select a solution stack. Available solution stacks are: 1) 64bit Amazon Linux 2014.09 v1.0.9 running PHP 5.5 2) 64bit Amazon Linux 2014.09 v1.0.9 running PHP 5.4 3) 64bit Amazon Linux 2014.03 v1.0.9 running PHP 5.5 4) 64bit Amazon Linux 2014.03 v1.0.9 running PHP 5.4 5) 32bit Amazon Linux 2014.03 v1.0.9 running PHP 5.5 6) 32bit Amazon Linux 2014.03 v1.0.9 running PHP 5.4 7) 32bit Amazon Linux running PHP 5.3 8) 64bit Amazon Linux running PHP 5.3 9) 64bit Amazon Linux 2014.09 v1.0.9 running Node.js 10) 64bit Amazon Linux 2014.03 v1.0.9 running Node.js 11) 32bit Amazon Linux 2014.03 v1.0.9 running Node.js 12) 64bit Windows Server 2008 R2 running IIS 7.5 13) 64bit Windows Server 2012 running IIS 8 14) 64bit Windows Server 2012 R2 running IIS 8.5 15) 64bit Windows Server Core 2012 R2 running IIS 8.5 16) 64bit Amazon Linux 2014.09 v1.0.0 running Tomcat 8 Java 8 17) 64bit Amazon Linux 2014.09 v1.0.9 running Tomcat 7 Java 7 18) 64bit Amazon Linux 2014.03 v1.0.9 running Tomcat 7 Java 7 19) 64bit Amazon Linux 2014.09 v1.0.9 running Tomcat 7 Java 6 20) 64bit Amazon Linux 2014.03 v1.0.9 running Tomcat 7 Java 6 21) 32bit Amazon Linux 2014.03 v1.0.9 running Tomcat 7 Java 7 22) 32bit Amazon Linux 2014.03 v1.0.9 running Tomcat 7 Java 6 23) 32bit Amazon Linux running Tomcat 7 24) 64bit Amazon Linux running Tomcat 7 25) 32bit Amazon Linux running Tomcat 6 26) 64bit Amazon Linux running Tomcat 6 27) 64bit Amazon Linux 2014.09 v1.0.9 running Python 2.7 28) 64bit Amazon Linux 2014.09 v1.0.9 running Python 29) 64bit Amazon Linux 2014.03 v1.0.9 running Python 2.7 30) 64bit Amazon Linux 2014.03 v1.0.9 running Python 31) 32bit Amazon Linux 2014.03 v1.0.9 running Python 2.7 32) 32bit Amazon Linux 2014.03 v1.0.9 running Python 33) 32bit Amazon Linux running Python 34) 64bit Amazon Linux running Python 35) 64bit Amazon Linux 2014.09 v1.0.9 running Ruby 2.1 (Puma) 36) 64bit Amazon Linux 2014.09 v1.0.9 running Ruby 2.1 (Passenger Standalone) 37) 64bit Amazon Linux 2014.09 v1.0.9 running Ruby 2.0 (Puma) 38) 64bit Amazon Linux 2014.09 v1.0.9 running Ruby 2.0 (Passenger Standalone) 39) 64bit Amazon Linux 2014.09 v1.0.9 running Ruby 1.9.3 40) 64bit Amazon Linux 2014.03 v1.0.9 running Ruby 2.1 (Puma) 41) 64bit Amazon Linux 2014.03 v1.0.9 running Ruby 2.1 (Passenger Standalone) 42) 64bit Amazon Linux 2014.03 v1.0.9 running Ruby 2.0 (Passenger Standalone) 43) 64bit Amazon Linux 2014.03 v1.0.9 running Ruby 2.0 (Puma) 44) 64bit Amazon Linux 2014.03 v1.0.9 running Ruby 1.9.3 45) 32bit Amazon Linux 2014.03 v1.0.9 running Ruby 1.9.3 46) 64bit Amazon Linux 2014.09 v1.0.11 running Docker 1.3.3 47) 64bit Debian jessie v1.0.2 running GlassFish 4.1 Java 8 (Preconfigured - Docker) 48) 64bit Debian jessie v1.0.2 running GlassFish 4.0 Java 7 (Preconfigured - Docker) 49) 64bit Debian jessie v1.0.2 running Python 3.4 (Preconfigured - Docker) Select (1 to 49): 27 Select an environment type. Available environment types are: 1) LoadBalanced 2) SingleInstance Select (1 to 2): 1 Create an RDS DB Instance? [y/n]: y Create an RDS BD Instance from (current value is "[No snapshot]"): 1) [No snapshot] 2) awseb-e-ptkmnhm3xx-stack-snapshot-awsebrdsdatabase-k9uebzidtrci 3) awseb-e-v93jmffmci-stack-snapshot-awsebrdsdatabase-19su3ax11n8uy 4) awseb-e-pzpnjjgrdb-stack-snapshot-awsebrdsdatabase-1ubni5tyda5lv 5) [Other snapshot] Select (1 to 5): 1 Enter an RDS DB master password: Retype password to confirm: If you terminate your environment, your RDS DB Instance will be deleted and you will lose your data. Create snapshot? [y/n]: y Attach an instance profile (current value is "[Create a default instance profile]"): 1) [Create a default instance profile] 2) aws-elasticbeanstalk-ec2-role 3) [Other instance profile] Select (1 to 3): 1 Updated AWS Credential file at "/home/piroto/.elasticbeanstalk/aws_credential_file".
4.2 開始
eb start でアプリケーションを開始する。上記でコミットしたプロジェクトも同時にデプロイする。
(virtualenv)[piroto@localhost phrase]$ eb start Starting application "phrase". Would you like to deploy the latest Git commit to your environment? [y/n]: y Waiting for environment "phrase-env" to launch. 2015-01-05 12:35:24 INFO createEnvironment is starting. 2015-01-05 12:35:26 INFO Using elasticbeanstalk-ap-northeast-1-964880067324 as Amazon S3 storage bucket for environment data. 2015-01-05 12:35:44 INFO Created load balancer named: awseb-e-t-AWSEBLoa-1HJDEDPG7Q729 2015-01-05 12:36:04 INFO Created security group named: awseb-e-t4mprz5myi-stack-AWSEBSecurityGroup-1XW8NESWTZ1JD 2015-01-05 12:36:08 INFO Created Auto Scaling launch configuration named: awseb-e-t4mprz5myi-stack-AWSEBAutoScalingLaunchConfiguration-KZQJAZH1APPM 2015-01-05 12:36:10 INFO Created RDS database security group named: awseb-e-t4mprz5myi-stack-awsebrdsdbsecuritygroup-1u0608gzw5cmf 2015-01-05 12:36:15 INFO Creating RDS database named: aammgm7f5g4f9w. This may take a few minutes. 2015-01-05 12:42:12 INFO Created RDS database named: aammgm7f5g4f9w 2015-01-05 12:43:10 INFO Waiting for EC2 instances to launch. This may take a few minutes. 2015-01-05 12:43:10 INFO Created Auto Scaling group named: awseb-e-t4mprz5myi-stack-AWSEBAutoScalingGroup-8DBFI9BK8XCZ 2015-01-05 12:43:14 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:964880067324:scalingPolicy:89b46226-0606-4ad5-ba8f-90a8ebb002cf:autoScalingGroupName/awseb-e-t4mprz5myi-stack-AWSEBAutoScalingGroup-8DBFI9BK8XCZ:policyName/awseb-e-t4mprz5myi-stack-AWSEBAutoScalingScaleUpPolicy-48SJ365D1WCH 2015-01-05 12:43:14 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:964880067324:scalingPolicy:e8e10fc4-0ae7-4b97-b82a-36a81d6762b7:autoScalingGroupName/awseb-e-t4mprz5myi-stack-AWSEBAutoScalingGroup-8DBFI9BK8XCZ:policyName/awseb-e-t4mprz5myi-stack-AWSEBAutoScalingScaleDownPolicy-11DKPNV04CMC3 2015-01-05 12:43:17 INFO Created CloudWatch alarm named: awseb-e-t4mprz5myi-stack-AWSEBCloudwatchAlarmLow-1QEX0DMHPZ6V1 2015-01-05 12:43:18 INFO Created CloudWatch alarm named: awseb-e-t4mprz5myi-stack-AWSEBCloudwatchAlarmHigh-Z7ZBL62RLUAN 2015-01-05 12:45:21 INFO Application available at phrase-env-33msmgzjpp.elasticbeanstalk.com. 2015-01-05 12:45:21 INFO Successfully launched environment: phrase-env Application is available at "phrase-env-33msmgzjpp.elasticbeanstalk.com".
開始中
開始完了
4.3 ステータスの確認
Health が Green になっていることを確認し、URLへアクセス
(virtualenv)[piroto@localhost phrase]$ eb status --verbose Retrieving status of environment "phrase-env". URL : phrase-env-33msmgzjpp.elasticbeanstalk.com Status : Ready Health : Green Environment Name: phrase-env Environment ID : e-t4mprz5myi Environment Tier: WebServer::Standard::1.0 Solution Stack : 64bit Amazon Linux 2014.09 v1.0.9 running Python 2.7 Version Label : git-5eaefd29ad55d349898717035dfb9dfdbd911363-1420428920184 Date Created : 2015-01-05 12:35:26 Date Updated : 2015-01-05 12:59:22 Description : RDS Database: AWSEBRDSDatabase | aammgm7f5g4f9w.cg2osea7qez8.ap-northeast-1.rds.amazonaws.com:3306 Database Engine: mysql 5.5.40 Allocated Storage: 5 Instance Class: db.t1.micro Multi AZ: False Master Username: ebroot Creation Time: 2015-01-05 12:39:30 DB Instance Status: available
4.4 Djangoが起動していることを確認
Elastic Beanstalk の操作には、その他に以下の様なコマンドがある
http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-aws-elastic-beanstalk
コマンド | 内容 |
eb init | 環境の初期設定 |
eb start | 環境の作成を開始 |
eb status | 環境のステータスを確認 |
eb update | 環境の設定更新 |
eb stop | 環境の停止 |
eb delete | 環境の削除 |
eb logs | 環境のログを表示 |
eb events | 環境に関連するイベントを表示 |
eb branch | git branchに環境をひも付け |
eb push | 新しいバージョンをデプロイ |
5.継続デプロイ
5.1 ローカル環境での実行
プロジェクトの右クリック Run As > PyDev Django を実行
コンソールにURLが表示されるので、ブラウザでLocal環境で起動していることを確認。
5.2 コミットとプッシュ
ローカルで変更し、プロジェクトの右クリックから、 Team > Commit を実行した後、git aws.push を実行することで、コミットされたリポジトリの内容をEC2のサーバーに反映出来る。
(virtualenv)[piroto@localhost phrase]$ git aws.push Updating the AWS Elastic Beanstalk environment phrase-env... Environment update initiated successfully.
… と、一応動くようにはなったが、結構大変かつ、まだ、Adminユーザーを作成するスクリプト部分のエラー(チュートリアルではオプションとなっている) が解決出来ない。
もっと、簡単にできると思っていたのだが…
結局冬休みの自由時間をこの設定に費やすことになってしまった。
はまりながら、いくつかのトラブルシュートや知見があるので、別途まとめることとする。
Windows で行う場合、pip install mysql-python==1.2.5 にて、
Microsoft Visual C++ Compiler for Python 2.7 のインストールが必要
https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
VC++コンパイラをインストールするだけでは足りない場合があります。
Windows、Python2.7、VirtualEnv で MySql-Python 1.2.5 をインストールする時のエラーの話
http://typea.info/blg/glob/2015/03/windowspython27virtualenv-mysql-python-125.html
.config ファイルの変更内容を反映させるには、eb update が必要