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に登録
- Gitリポジトリを設定
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)の比較