実際に使うには制限が多かったため、参考程度に。
調査も途中で打ち切った。
概要
- Elastic Beanstalkを使用したデプロイについて記述する。
環境
- AWSが提供しているコマンドラインツールを使用してデプロイする。
- OpenCVやその他パッケージをインストールする
- Railsアプリを起動する
制限
- S3の設定等
- コマンドラインツールはproxyを超えられない(2012/12時点)
- デプロイインスタンスはAmazon Linux
- デプロイ対象のコードはscpでec2に転送(コードの自動取得不可)
- Ubuntuではeb initコマンド途中で失敗した(未調査)
- パッケージのソースからのインストールは不可
結果
できたこと
- Railsアプリのデプロイと起動
- RDSの起動
- yumによるパッケージインストール
- パッケージのソースの取得・解凍
- パッケージのソースからのインストール(途中まで)
できなかったこと
- OpenCVのインストール
- 実行したい手順はOpenCVのインストール手順の通り
- gmake途中で失敗
- 途中でプロセスが終了する
- 原因不明(タイムアウトが考えられるが、ログが出ないため調査断念)
- EC2インスタンスにログインして手動インストールは可能
やること
- デプロイ用の環境を構築する
- AWSが提供しているコマンドラインツールの利用環境の構築
- アプリ動作環境の設定・構築
- コマンドラインツールでのデプロイ
デプロイ用環境構築
EC2インスタンス上にコマンドラインツールを使用できる環境を準備する。
以下の環境を構築した。
- OS : Amazon Linux
- パッケージ : openssl-devel, python (2.7 or 3.0)
構築手順
デプロイ作業用のEC2インスタンスを作成する
-
Management Consoleで作成する
-
22番ポートだけ開けておく
-
作成したEC2インスタンスにsshでログインして作業する
-
Python インストール
-
デプロイ用コマンドラインツールに必要
## EC2 : Amazon Linux
$ sudo yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel gcc make openssl openssl-devel
$ mkdir -p src/python
$ cd src/python
$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar xvfz Python-2.7.3.tgz
$ cd Python-2.7.3
$ ./configure --prefix=/usr/local
$ make
$ sudo make altinstall
$ python2.7 #=> Python 2.7.3
- コマンドラインツールをインストールする
$ mkdir -p src/aws
$ cd src/aws/
$ wget https://s3.amazonaws.com/elasticbeanstalk/cli/AWS-ElasticBeanstalk-CLI-2.2.zip
$ unzip AWS-ElasticBeanstalk-CLI-2.2.zip
$ mkdir ~/.aws
$ vi ~/.aws/credentials
---------------------------------------------------------------------------------------
# 以下を記載
AWSAccessKeyId=***************
AWSSecretKey=*************
---------------------------------------------------------------------------------------
$ vi ~/.bash_profile
---------------------------------------------------------------------------------------
# 以下を記載
export PATH=$PATH:/home/ubuntu/src/aws/AWS-ElasticBeanstalk-CLI-2.2/eb/linux/python2.7
export AWS_CREDENTIAL_FILE=/home/ubuntu/.aws/credentials
---------------------------------------------------------------------------------------
$ source ~/.bash_profile
$ eb --version
# Pythonを2.7に切り替える
$ sudo mv /usr/bin/python{,.bak}
$ sudo ln /usr/local/bin/python2.7 /usr/bin/python
$ python --version #=> Python 2.7.3
アプリ動作環境の設定・構築
- アプリコードを取得する
- 作業はデプロイ用EC2インスタンスで行う
- 配置・転送は省略(/home/ec2-user/worksapce下に配置済みとする)
Elastic Beanstalkにアプリ・環境情報を登録する
$ cd ~/workspace/app-test
$ eb init
Enter your AWS Access Key ID (current value is "AKIAI*****NVDVA"):
Enter your AWS Secret Access Key (current value is "hMJAT*****GhhXB"):
...
Select: (1 to 8): 6
Enter an AWS Elastic Beanstalk application name (auto-generated value is "sample"): hello
Enter an AWS Elastic Beanstalk environment name (auto-generated value is "hello-env"):
...
Select: (1 to 16): 16
Create an RDS DB Instance? [y/n]: y
...
Enter an RDS DB master password: ******
...
Retype password to confirm: ******
-
RDSは以下のように作成される(後でManagement Consoleから変更可能。コマンドラインツールでの詳細設定は未調査)
-
Database engine — MySQL
-
Default version: — 5.5
-
Database name: — ebdb
-
Allocated storage — 5 GB
-
Instance class — db.t1.micro
-
Deletion policy — delete
-
Master username — ebroot
-
アプリ動作環境を作成する
-
RDSのインスタンス名をメモする(デプロイ時にconfig/database.ymlを修正する)
-
以下では"aa128zo655y85tn"になる
$ cd ~/workspace/app-test
$ eb start
Starting application "app-test".
Waiting for environment "app-test-env" to launch.
2012-12-25 23:51:53 INFO createEnvironment is starting.
2012-12-25 23:52:00 INFO Using elasticbeanstalk-ap-northeast-1-619341967903 as Amazon S3 storage bucket for environment data.
2012-12-25 23:52:30 INFO Created load balancer named: awseb-e-w-AWSEBLoa-1BOFG1F6123VP
2012-12-25 23:52:35 INFO Created security group named: awseb-e-wpgesqicai-stack-AWSEBSecurityGroup-18IDGFQDF2L8T
2012-12-25 23:52:38 INFO Creating RDS database named: aa128zo655y85tn. This may take a few minutes.
2012-12-25 23:57:31 INFO Created RDS database named: aa128zo655y85tn
2012-12-25 23:57:38 INFO Created Auto Scaling launch configuration named: awseb-e-wpgesqicai-stack-AWSEBAutoScalingLaunchConfiguration-1BUTQV8X66YQD
2012-12-25 23:58:38 INFO Waiting for EC2 instances to launch. This may take a few minutes.
2012-12-25 23:58:38 INFO Created Auto Scaling group named: awseb-e-wpgesqicai-stack-AWSEBAutoScalingGroup-1CUCIE9KUNCHD
2012-12-25 23:58:40 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:619341967903:scalingPolicy:14349546-ad28-4469-a256-1c3000154215:autoScalingGroupName/awseb-e-wpgesqicai-stack-AWSEBAutoScalingGroup-1CUCIE9KUNCHD:policyName/awseb-e-wpgesqicai-stack-AWSEBAutoScalingScaleDownPolicy-QQBXVZOQ0XTV
2012-12-25 23:58:42 INFO Created CloudWatch alarm named: awseb-e-wpgesqicai-stack-AWSEBCloudwatchAlarmLow-Q4UTHFA2AS1J
2012-12-25 23:58:45 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:619341967903:scalingPolicy:a608a646-b20a-43ad-a135-de913f12ee15:autoScalingGroupName/awseb-e-wpgesqicai-stack-AWSEBAutoScalingGroup-1CUCIE9KUNCHD:policyName/awseb-e-wpgesqicai-stack-AWSEBAutoScalingScaleUpPolicy-AWR4XHK7XXL1
2012-12-25 23:58:47 INFO Created CloudWatch alarm named: awseb-e-wpgesqicai-stack-AWSEBCloudwatchAlarmHigh-1BJZLOUEJGV54
2012-12-26 00:03:07 INFO Application available at app-test-env-z3kprnuw6j.elasticbeanstalk.com.
Application is available at "app-test-env-z3kprnuw6j.elasticbeanstalk.com".
- デプロイ設定をする
- RDSのホスト名の修正
- インストールするパッケージを指定
- .ebextensions/*.configの設定によるOpenCVのインストールは不可(make途中で失敗してしまう)
- 手動でインストールする
- インストールするパッケージを指定
$ cd ~/workspace/app-test
## RDSのホスト名修正
$ vi config/database.yml
---------------------------------------------------------------------------------------
production
...
-- host: app-testdb.cupahpaushqm.ap-northeast-1.rds.amazonaws.com
++ host: ***************.cupahpaushqm.ap-northeast-1.rds.amazonaws.com
---------------------------------------------------------------------------------------
## インストールパッケージ指定
$ vi .ebextensions
---------------------------------------------------------------------------------------
packages:
yum:
ImageMagick: []
ImageMagick-devel: []
jasper-devel: []
libpng-devel: []
cmake: []
python: []
---------------------------------------------------------------------------------------
$ git add .
$ git commit -m "fixed deploy setting"
- デプロイする
$ git aws.push
-
OpenCVをインストールする
-
.ebextensions/*.configでのインストールだとmake途中で失敗するので暫定的に手動で行う
-
インストール方法は省略(後日別記事に記載する)
-
コードを修正・変更してデプロイする
-
app-test下に .elasticbeanstalk/config, .elasticbeanstalk/optionsettingsを配置しておく
-
Elastic Beanstalkの設定を引き継がせる
-
GitHubからpullできればアプリコードの転送・配置は不要(git pullでok)
## Elastic Beanstalkの設定をバックアップする
$ cd ~/workspace/app-test
$ cp -r ~/workspace/app-test/.elasticbeanstalk /tmp/
$ rm -rf ~/workspace/app-test
アプリコードをデプロイ用EC2インスタンスに転送する
省略
デプロイする
$ cd ~/workspace/app-test
$ cp -r /tmp/.elasticbeanstalk ~/workspace/app-test/
$ git aws.push
* 起動確認 OK
* その他は未調査