LoginSignup
2
2

More than 5 years have passed since last update.

AWS Elastic Beanstalk を試す

Last updated at Posted at 2013-04-09

実際に使うには制限が多かったため、参考程度に。
調査も途中で打ち切った。

概要

  • 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
    • その他は未調査
2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2