つまりなにしたの?
AWS Cloud9からElasticBeanstalkにRailsアプリをデプロイしようとしたら、
・データベース設定
・nginxの設定
の2点でハマったのでその解決方法を書いておくことにした。
前編はどんな環境で何をやろうとしていたかについて。
Elastic Beanstalkってなに?
AWSにあるウェブアプリケーションやサービスをデプロイしたりスケーリングしてくれるサービス。
コードをアップロードすれば勝手にプロビジョニングしてくれたりロードバランスしてくれるって聞いて、
ヨッシャっと導入しようと思ったのが一番初め。
追加料金も必要なくて、基本的にはElasticBeanstalkから他のAWSサービスを使った分だけ(EC2とかRDBとか)
aws.amazon.com
どこからはじめて、どこまでやるの?
アプリを作って、ブラウザから表示して、環境を削除するまで
今回デプロイするアプリはDatabaseを使わないけど、普段はDatabaseを使うのでMySQLとの連携についても行う。
ensekitt.hatenablog.com
の続きから初めて、Production向けにHello worldを表示するだけのアプリをElasticBeanstalkにデプロイする。
Cloud9にElasticBeanstalkの環境を用意する
Cloud9のコンソールで作業する
awsebcliをインストールする
$ pip install awsebcli --upgrade --user $ eb --version EB CLI 3.13.0 (Python 2.7.1)
Rubyのバージョンを上げておく
$ rvmsudo rvm install 2.4.4 $ rvm use 2.4.4
Gemfile中のバージョンを書き換える
# 対象ファイル: /Gemfile # ruby '2.4.1' ruby '2.4.4'
書き換え後Bundlerをインストールして以下を実行する。
$ rvmsudo gem install bundler $ bundle install --without production
ここでrvmsudoを使わなきゃいけないっぽくて、なんかもにょる。
(Permissionおかしいよって怒られるので苦肉の策)
ElasticBeanstalkの準備を行う
Cloud9のコンソールで作業する
$ eb init
ElasticBeanstalkをデプロイしたい先を選ぶ。
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-south-1 : Asia Pacific (Mumbai) 7) ap-southeast-1 : Asia Pacific (Singapore) 8) ap-southeast-2 : Asia Pacific (Sydney) 9) ap-northeast-1 : Asia Pacific (Tokyo) 10) ap-northeast-2 : Asia Pacific (Seoul) 11) sa-east-1 : South America (Sao Paulo) 12) cn-north-1 : China (Beijing) 13) cn-northwest-1 : China (Ningxia) 14) us-east-2 : US East (Ohio) 15) ca-central-1 : Canada (Central) 16) eu-west-2 : EU (London) 17) eu-west-3 : EU (Paris) (default is 3): 1
今回はCloud9をus-east-1にしているので、1にした。Cloud9と同じにしておくと良いと思う。
アプリケーション名をつける
Enter Application Name (default is "sample_app"): Application sample_app has been created.
アプリケーション名はRailsのアプリケーション名がデフォルトとしてサジェストされるのでそのままにする。
何をデプロイしようとしているか
It appears you are using Ruby. Is this correct? (Y/n): Y
Rubyのプロジェクトで間違いないですよね?ってことでYesと答える。
プラットフォームのバージョンを選ぶ
Select a platform version. 1) Ruby 2.5 (Puma) 2) Ruby 2.5 (Passenger Standalone) 3) Ruby 2.4 (Puma) 4) Ruby 2.4 (Passenger Standalone) 5) Ruby 2.3 (Puma) 6) Ruby 2.3 (Passenger Standalone) 7) Ruby 2.2 (Puma) 8) Ruby 2.2 (Passenger Standalone) 9) Ruby 2.1 (Puma) 10) Ruby 2.1 (Passenger Standalone) 11) Ruby 2.0 (Puma) 12) Ruby 2.0 (Passenger Standalone) 13) Ruby 1.9.3 (default is 1): 3
Cloud9がRuby2.4.4(Ruby2.4.1をアップグレードするけどこれはあとでやる)のPumaなので3を選択した。
CodeCommitを使うか
Note: Elastic Beanstalk now supports AWS CodeCommit; a fully-managed source control service. To learn more, see Docs: https://aws.amazon.com/codecommit/ Do you wish to continue with CodeCommit? (y/N) (default is n): n
これまでもこれからもGithubを使うつもりなのでNo
Production用のアプリを作る
コードを書いていく
最初にコントローラでHelloWorldを返すだけの関数を作成する
# app/controllers/application_controller.rb class ApplicationController < ActionController::Base def hello render html: "hello, world!" end end
Rootアクセスが有った時に、先程のHello関数が呼ばれるようにする。
# config/routes.rb Rails.application.routes.draw do root 'application#hello' end
ProductionではMySQLを使うようにする。
# /Gemfile group :production do gem 'mysql2' end
# config/database.yml #production: # <<: *default # database: db/production.sqlite3 production: adapter: mysql2 encoding: utf8 database: <%= ENV['RDS_DB_NAME'] %> username: <%= ENV['RDS_USERNAME'] %> password: <%= ENV['RDS_PASSWORD'] %> host: <%= ENV['RDS_HOSTNAME'] %> port: <%= ENV['RDS_PORT'] %>
Cloud9で実行するとこうなる
$ rails server
これがElasticBeanstalkでも表示できれば良い。
これで一旦環境を作る。
#必要があればここでGithubと連携する # 今回はローカルでGit管理するのみとする。 $ git add -A $ git commit -am "init app"
ElasticBeanstalkの環境を作る
$ eb create # 環境名をいれる Enter Environment Name (default is sample-app-dev): sample-app-dev # アドレスの最初につくprefixをつける Enter DNS CNAME prefix (default is sample-app-dev): hogehoge-app #ロードバランサのタイプをデフォルトにする Select a load balancer type 1) classic 2) application 3) network (default is 1):
実行中にElasticBeanstalkを見に行くと実行している内容が表示されて、ワクワクしながら待つ。
終わったらこんな感じになって、当然何も表示されない。
え、これでできるんじゃないの?と思っていた自分は浅はかだった。
使ってみてどうだった?
Herokuってすごいんだなって感想をもった。
ensekitt.hatenablog.com
解決編になる後編は次回やる。
ensekitt.hatenablog.com
やった。