AWSのインスタンスを立ち上げるなんて毎日やるわけでもないので、やるたびに忘れてしまいますよね。ちなみに今のいままでほぼ完全に忘れていました。以前一回やったことがあったのですが、数ヶ月前だし、一回しかやったことないし。
そこで、備忘録的にメモしておこうかと。
登場人物
- ruby on Rails
- capistrano
- AWS
- itamae
手順をば
大まかには以下の通り。
- インスタンスをつくる
- itamaeを新たに作成したインスタンスに向けて実行する
- capデプロイコマンドを実行する
- EC2インスタンスのドメインを変更する(Route 53)
1. インスタンスをつくる
詳細なインスタンスの各種設定は他のQiita記事やドキュメントに譲ります。だいたいは既存のインスタンスを複製する(「同様のものを作成」っていうボタン)パターンが多いのかなと。
が、新規でインスタンスをつくる際にいくつか注意すべき点があるのでそれらを特記しておきます。
pemファイルをダウンロードする
既存のキーペアを使う場合でもそうですが、AWSで保存しているパブリックキーとの照合を行うために、必要なのでこれは絶対にとっておく必要があります。チームで共有しておいた方が良いです。これ無くした場合、インスタンス作ったものの入れないよーん…ということになります。
コレはあとでEC2インスタンスにssh接続するときに必要なので、消さないように作業ディレクトリにでも一時的に保管しておきます。が、itamaeなどで管理している場合は必要ないかもしれません。下記に記載の通り、GitHubで公開鍵を設定しておけば、それ経由でssh接続できるためです。
公開鍵を用意しておく
詳細は以下のリンクなどを参照してください。EC2インスタンスにパスなしでコマンド入力して入れるようにするために必要です。プロジェクトメンバー全員で共有するなら、シートか何かにまとめておくと良いかも。
4.3 Git サーバー - SSH 公開鍵の作成
新たにインスタンスを作成することができたら、pemファイルと共にssh接続で入っていきます。
$ ssh ec2-user@11.222.333 -i ~/.ssh/hogehoge.pem
入ってから、.ssh
ディレクトリを見てみると/authorized_keys
というファイルがあるので、ここに自分の公開鍵を入れておきます。こうすることであとで行うitamaeで「指定したIPに入れないよー」と怒られることはなくなります。
2. 新たに作成したインスタンスに向けてitamaeを実行する
itamaeの作り方は他の記事に譲ります。
おのおのenv環境のnode/以下に環境ごとの設定ファイル(production.yml
やstaging.yml
など)があると思うので、-yオプションを指定して実行します(いちいちyesと答えていくのは辛い)。
// --dry-runで問題なく通るかをまず確認する
$ bundle exec itamae ssh -u ec2-user -h your_ip_address -y node/staging.yml --dry-run sabaku.rb
// 問題ないことを確認したら実行する
$ bundle exec itamae ssh -u ec2-user -h your_ip_address -y node/staging.yml sabaku.rb
3. capのデプロイコマンドを実行する
インスタンスにitamaeを流し込んでもろもろ環境が出来たら、今度はGitHubの作業ブランチを指定してデプロイします。
作業ディレクトリ/deploy/以下に環境ごとの設定ファイル(下記コマンドを叩く場合はfugafuga.rb
が必要)があるので、下記コマンド実行時に指定するのを忘れずに。
// この場合はfugafuga.rbを元にデプロイ
$ BRANCH=hogehoge bundle exec cap fugafuga deploy
4. EC2インスタンスのドメインを変更する(Route 53)
デプロイが終わったら、パブリックIPを直打ちしてサイトに行くことはできますが、なんだがいちいちIP書くのめんどくさい。
そこでAWSコンソールに行ってRoute 53というサービスを使います。
ここで、取得したドメインを登録しておけば、そのサブドメインなんかを気軽に登録することができるようになります。
下記に簡単な手順(といっても2点しかないですが)を記載しておきます。
Create Record Set
ボタンで新しいレコードセットを作成する
レコードセットの設定を行う
Nameの部分の任意のサブドメイン名を入力します。TypeにはDNSレコードの種類を選択します。
Aliasの部分なんですが、Aliasを張らない場合はValueに直にインスタンスのパブリックIPを記入してしまうのが、一番手っ取り早くて簡単かと思います。
よし、これで一件落着。
自分で設定したhoge.mydomain.comみたいなURLを叩けば、IP直打ちしたときみたいにサイトにアクセスできるようになります。
これで、次回インスタンスを立てることになっても、大体大丈夫でしょう。