LoginSignup
51
49

More than 5 years have passed since last update.

Rails on AWS OpsWorks

Last updated at Posted at 2014-06-25

What is OpsWorks?

  • OpsWorksを用いると、短時間で手軽にアプリケーションを動かす環境一式を自動構築することができ、要件に応じて柔軟に構成を変更できる
    • プラットフォームの自動構築:ブラウザからポチポチするだけ
    • アプリケーションの簡単デプロイ:ブラウザからボタン一発

特徴

  • Chefというツールを内部で利用して環境構築やアプリケーションのデプロイを自動化していること
    • Chefによる自動構築を行うためには、まずChefが動作する環境を構築する必要がある
    • OpsWorksではEC2インスタンスを作成してChefを動かす環境を構築し、必要なChefレシピを実行するまでの処理を全て自動で行ってくれる
    • 利用者はChefの実行環境構築に関して特に意識することなくChefの恩恵を受けることができる

Rails on AWS OpsWorks

Stackの構築

  • Stackはアプリケーションのプラットフォーム全体

設定

  • 設定は、基本的にデフォルトでOK

ハマリポイント

  • Custom JSONに、secret.ymlのsecret_key_baseをJSONで指定
{
  "hogexhoge_data": {
    "hogexhoge": {
      "SECRET_KEY_BASE": “xxxxx"
    }
  }
}

Layersの構築

  • Layerは、Railsアプリケーションや、Node.jsなどのアプリケーションのホスティング

設定

  • Rails App Serverを選択し、適切なruby versionを選択

ハマリポイント

  • Gemfileのruby versionの指定は削除しておく
  • .ruby-versionはあっても問題ない
  • OS Packegeに、db用のパッケージを追加
    • sqlite3なら、sqlite-devel
    • mysqlなら、mysql-devel

Instancesの構築

  • Instanceは、EC2のインスタンス
    • ここでインスタンスを立ち上げると、EC2の一覧にも表示される

設定

  • 基本的にデフォルトでOK

Instanceの起動

  • smallなら、起動に十数分かかる
    • microは、さらにかかるのでsmall以上がよいかと
  • Global IPが割り当てられるので、Route 53からルーティング設定

Appsの構築

設定

  • デプロイするアプリケーションを指定する
  • ソースコードは、リポジトリ管理されていることが前提
    • Gitリポジトリを設定
      • URLは、git@bitbucket.org:jwako/hogexhoge.git など
      • SSH Keyは、ssh-keygenで鍵を生成し、そのprivate keyを貼り付ける. public keyをBitbucketに登録

Deployments

設定

  • Appを選択して、デプロイ
    • Migrate database:Yes
    • Custom Chef JSONは以下を指定
{
  "deploy": {
    "hogexhoge": {
      "database": {
        "adapter": "sqlite3",
        "database": "db/production.sqlite3",
        "host": "localhost"
      }
    }
  }
}

  • この設定をすることで、以下にdatabase.ymlを生成する(Railsのdatabase.ymlはこのファイルへのsymlink) /srv/www/hogexhoge/shared/config

ハマリポイント

  • database.ymlは、JSONで指定してやらないといけない
    • “hogexhoge”は、App名を指定
    • hostオプションを指定しないと、database.ymlをdeployしてくれない
    • databaseオプションを指定しないと、dbがないと怒られる

see: https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.4/rails/recipes/configure.rb

その他

複数アプリケーションの構築(ステージング環境など)

  • Railsのenvにstagingを追加。ローカルでstagingとして起動できるようにアプリを構築
  • Appsにstaging用のappを追加
    • Rails env : staging
    • GitリポジトリのBranchオプション : staging
    • domain name : sp_staging.hogexhoge.com
      • 同時にproduction環境のdomain nameも指定する
  • デプロイ時のCustom Chef JSONは以下を指定
{
  "deploy": {
    "hogexhoge_staging": {
      "database": {
        "adapter": "sqlite3",
        "database": “db/staging.sqlite3",
        "host": "localhost"
      }
    }
  }
}

ハマリポイント

  • Domain nameの指定を忘れずに
    • 複数アプリを立ち上げた場合、同一IP+このdomain nameでアプリケーションを判定している

サーバーへのSSHログイン

  • EC2のKey Pairsメニューから鍵を作成
  • xxx.pem を.ssh以下に置く
  • chmod 400 xxx.pem
  • 生成した鍵xxxをOpsWorksのinstanceのSSH keyで指定する
  • 下記のコマンドでアクセス
$ssh -i ~/.ssh/hogexhoge_sp.pem ec2-user@xxx.xxx.xxx.xxx
  • デプロイされたディレクトリは以下. deployユーザーに変更
$ cd /srv/www/hogexhoge/current
$ sudo su deploy

ログの確認

  • Apache/Passengerのログ
$cd /etc/httpd/logs

  • Railsのログ
$cd /srv/www/hogexhoge/current/log/production.log

Refs.

Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]
20140315 JAWS Days OpsWorks
Rails App Server AWS OpsWorks Layer - AWS OpsWorks
AWS OpsWorksを使ってみた (概要編) - Tech-Sketch
OpsWorksでRailsな環境作ってみた。 - Develop with pleasure!
OpsWorksでRailsアプリを動かす際に注意しておきたいデータベース接続の設定 - よかろうもん!
AWS OpsWorksアプリケーション運用の勘所(1):AWS OpsWorksって何? から、運用しやすくなる下準備のポイントまで (1/5) - @IT
Chef(Server)と AWS OpsWorks(tm)の比較

51
49
0

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
51
49