Help us understand the problem. What is going on with this article?

ElasticBeanstalkでらくらくRails環境構築

More than 5 years have passed since last update.

「Iwate Developers Advent Calendar 2014」の18日目を担当します。
チイキットのmanagerです!!

AWSって便利ですが、EC2とかRDSとかセキュリティグループの設定とかその他いろいろ環境構築するには面倒くさいこと多くないでしょうか?

そんなときはElasticBeanstalkを使うのをオススメします!
最近使い初めましたが、かなり便利だと思いました。
今回はElasticBeanstalkを使ってRails環境の構築をしてみたいと思います。

ElasticBeanstalkとは?

elastic_beanstalk.png

AWSが提供するPaasになります。
AWS版のHerokuと思って頂ければと思います。
内部的にはEC2、RDS等のAWSの既存サービスが使われます。

今回はAWS上の構成はELB+EC2の構成で環境を作ります。

awsebcliのインストール

AWSマネジメントコンソール画面からも設定はできますが、
コマンドラインで設定出来たほうが便利ですよね!

今回はawsebcliを使ってElasticBeanstalkを使っていきます。

pyenvのインストール

rbenvのpython版です。
pythonのバージョン管理をしてくれます。

$ brew install pyenv
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ pyenv install 2.7.8
$ pyenv global 2.7.8

pyenvのインストール

pyenvでpythonのインストールが終わるとpipコマンドが使えますので、
pipでawsebcliをインストールしていきます。

$ pip install awsebcli
$ pyenv rehash

Railsプロジェクトの準備

プロジェクトの作成

$ rails new myapp
$ cd myapp/
$ bundle install
$ git init
$ git add --all
$ git commit -m "init"

myappの起動

$ rails s

ブラウザに以下のURLを入力し、画面が表示されればOKです。

http://localhost:3000

スクリーンショット 2014-12-18 22.46.18.png

Scaffoldでユーザ管理画面を作る

$ rails generate scaffold User name:string score:integer
$ rake db:migrate
$ vim config/routes.rb


#以下を追加します
   root 'users#index'

$ rails s

シンプルですね

スクリーンショット 2014-12-19 0.36.18.png

最後にgitコミットしておきましょう

$ git add --all
$ git commit -m "add scaffold user"

ElasticBeanstalkのプロジェクト初期化

最初にリージョンが聞かれるので、8) Tokyoを選びましょう!

$ eb init

Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-southeast-1 : Asia Pacific (Singapore)
7) ap-southeast-2 : Asia Pacific (Sydney)
8) ap-northeast-1 : Asia Pacific (Tokyo)
9) sa-east-1 : South America (Sao Paulo)

(default is 3): 8

次にアクセスキー、シークレットキーが聞かれるので、
IAMユーザでeb用のユーザを作成し、アクセスキー、シークレットキーを取得しておきましょう。

You have not yet set up your credentials or your credentials are incorrect 
You must provide your credentials.
(aws-access-id): XXXXXXXXXXXX
(aws-secret-key): XXXXXXXXXXXXXX

あとはほとんどがデフォルトで大丈夫ですが、
keypairはEC2の画面から用意しておいた方がいいかもしれません。

Enter Application Name
(default is "myapp"): 
Application myapp has been created.

It appears you are using Ruby. Is this correct?
(y/n): y

Select a platform version.
1) Ruby 2.1 (Puma)
2) Ruby 2.1 (Passenger Standalone)
3) Ruby 2.0 (Puma)
4) Ruby 2.0 (Passenger Standalone)
5) Ruby 1.9.3
(default is 1): 1
Do you want to set up SSH for your instances?
(y/n): y

Select a keypair.
1) html5_iwate
2) [ Create new KeyPair ]
(default is 7): 1

最後に.gitignoreに追加されている行があるので、
コミットしましょう

$ git add --all
$ git commit -m "Add Elastic Beanstalk files to .gitignore"

Elastic Beanstalk 環境作成

DNSは空きがない場合があるので、
今回は「myapp-dev2」にしました!
--sampleでサンプル画面を表示してくれます。

また、RDSを使用したい場合は、
--database をつけます。

$ eb create --sample
Enter Environment Name
(default is myapp-dev): 
Enter DNS CNAME prefix
(default is myapp-dev): myapp-dev2
Environment details for: myapp-dev
  Application name: myapp
  Region: ap-northeast-1
  Deployed Version: None
  Environment ID: e-knj49kgphu
  Platform: 64bit Amazon Linux 2014.09 v1.0.9 running Ruby 2.1 (Puma)
  Tier: WebServer-Standard-1.0
  CNAME: myapp-dev2.elasticbeanstalk.com
  Updated: 2014-12-18 14:02:05.410000+00:00
Printing Status:
INFO: createEnvironment is starting.
INFO: Using elasticbeanstalk-ap-northeast-1-433739316714 as Amazon S3 storage bucket for environment data.
INFO: Created load balancer named: awseb-e-k-AWSEBLoa-13KLV52G3KI44
INFO: Created security group named: awseb-e-knj49kgphu-stack-AWSEBSecurityGroup-XR9M858Y54AI
INFO: Created Auto Scaling launch configuration named: awseb-e-knj49kgphu-stack-AWSEBAutoScalingLaunchConfiguration-1Y0SZJD0YVADE
INFO: Waiting for EC2 instances to launch. This may take a few minutes.
INFO: Created Auto Scaling group named: awseb-e-knj49kgphu-stack-AWSEBAutoScalingGroup-17GB1XU0YEY3L
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:433739316714:scalingPolicy:6e1a8460-521f-45f7-928b-f79d3bbd57d2:autoScalingGroupName/awseb-e-knj49kgphu-stack-AWSEBAutoScalingGroup-17GB1XU0YEY3L:policyName/awseb-e-knj49kgphu-stack-AWSEBAutoScalingScaleUpPolicy-1FPR9I3UMZ4DG
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:ap-northeast-1:433739316714:scalingPolicy:47f83451-d7ae-4c69-9437-5a11088f2250:autoScalingGroupName/awseb-e-knj49kgphu-stack-AWSEBAutoScalingGroup-17GB1XU0YEY3L:policyName/awseb-e-knj49kgphu-stack-AWSEBAutoScalingScaleDownPolicy-QVF31VE0UOR3
INFO: Created CloudWatch alarm named: awseb-e-knj49kgphu-stack-AWSEBCloudwatchAlarmHigh-56M3QY8E2KGY
INFO: Created CloudWatch alarm named: awseb-e-knj49kgphu-stack-AWSEBCloudwatchAlarmLow-MDDKYC14HWPT
INFO: Added EC2 instance 'i-0bd4e012' to Auto Scaling Group 'awseb-e-knj49kgphu-stack-AWSEBAutoScalingGroup-17GB1XU0YEY3L'.

しばらくして、最後にSuccessfullyと表示されればおkです!

INFO: Application available at myapp-dev2.elasticbeanstalk.com.
INFO: Successfully launched environment: myapp-dev

サンプルを見てみる

以下のコマンドを叩くとブラウザが起動します。

eb open myapp-dev

スクリーンショット 2014-12-18 23.09.26.png

ソースコードをデプロイ

$ eb setenv -e myapp-dev SECRET_KEY_BASE=`bin/rake secret`
$ eb deploy myapp-dev
$ eb open myapp-dev

さきほどローカルで試した通りに表示されれば完了です。
これでAWS上にデプロイできました。

スクリーンショット 2014-12-19 0.36.18.png

プロジェクトを削除

AWSは少々お高いので、遊んだあとはちゃんと削除しましょう

eb terminate myapp-dev 

まとめ

コマンドラインからElasticBeanstalkでらくらく環境構築できましたね!
今回は触れていませんが、デフォルトでauto scalingの設定もできているので、簡単にスケールにも対応できるというかなりのすぐれものです。
さらにセキュリティグループもできています。

ElasticBeanstalkはドキュメントが少ないのが悲しいですが、
これだけ簡単なので試みる価値はあると思います。

cheekit
〜 Make Local Happiness 〜 クラウドソーシング受託を通じて地域のワクワクを増やすベンチャー
http://cheekit.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away