Otto
ほぼチュートリアルに沿ってひとまず通す。
環境など
- Otto 0.1.2
- OS X Yosemite
VirtualBoxのインストール
からOS X版をダウンロード・インストールする。
Ottoのインストール
からOS X版zipをダウンロード・解凍し、バイナリをパスの通ったところに置く。
チュートリアルのアプリケーションのダウンロード
$ git clone https://github.com/hashicorp/otto-getting-started.git
$ cd otto-getting-started/
中身はセッションを使う程度の単純なSinatraアプリ。
Appfileの作成
このファイルは必須ではない。またMongoDBへの依存を登録してあるが使わない。
$ vim Appfile
application {
name = "otto-getting-started"
type = "ruby"
dependency {
source = "github.com/hashicorp/otto/examples/mongodb"
}
}
project {
name = "otto-getting-started"
infrastructure = "otto-getting-started"
}
infrastructure "otto-getting-started" {
type = "aws"
flavor = "simple"
}
customization "ruby" {
ruby_version = "2.1"
}
コンパイル
$ otto compile
Appfileが参照されるが、なくてもRubyアプリケーションであることをOttoが検出する。
開発環境の作成
$ otto dev
Vagrantがなければインストールされる。
開発環境ログイン
$ otto dev ssh
vagrant@precise64:/vagrant$ ruby -v
ruby 2.1.7p400 (2015-08-18 revision 51632) [x86_64-linux-gnu]
設定した依存サービスを名前解決できることを確認する。
vagrant@precise64:/vagrant$ nslookup mongodb.service.consul
開発環境でのアプリケーション動作確認
vagrant@precise64:/vagrant$ bundle && rackup --host 0.0.0.0
アドレスを確認する。
$ otto dev address
9292番でアプリケーションが立ち上がっているのを確認。
本番インフラ設定
対応インフラは現在AWSのみ。公開鍵がなければ作り、また秘密鍵をssh-add
しておく。
$ ssh-keygen -y -f ~/.ssh/my.pem > ~/.ssh/my.pub
$ ssh-add ~/.ssh/my.pem
$ otto infra
access key,secret keyと公開鍵の場所を要求されるので入力する。passwordは適当に決める。
インフラ管理にTerraformを使うので、なければインストールされる。
passwordはこのあとずっと使う。環境変数に入れておけば入力しなくてよい。
$ export OTTO_CREDS_PASSWORD=XXXXX
結果を確認する。
$ otto status
..
Infra: READY
..
うまくいけば不要だが、otto infra
の設定を何回もミスったので以下でクレデンシャルのキャッシュを削除してやり直した。
$ rm -rf ~/.otto.d/cache/creds/otto-getting-started
EC2のリージョンはデフォルトでus-east-1になる。(main.tf
にリージョンを書いてみたが反映されなかった)
$ otto infra info
..
region = us-east-1
..
ビルド
結構時間がかかる。
$ otto build
イメージ管理にPackerを使うので、なければインストールされる。
t2.microインスタンスが作成され、インスタンスへのSSHログイン、Consulや各種ミドルウェアインストールが行われた後、AMIが作成される。
結果を確認する。
$ otto status
..
Build: BUILD READY
..
デプロイ
$ otto deploy
作ったAMIをもとにアプリケーションがデプロイされてURLが表示されるので動作確認する。