1ヵ月で取得するAWSソリューションアーキテクト (10日目)

#概要
いよいよ、10日目にして色々使っていくぞ～！と言いたいところですが、
日付上は11日目になってしまいました。

何か追いついたら、追い抜かされてみたいな感じになってます。
というわけで10日目の今回はAWS上にRuby on Railsを使ったサイトを作成したいと思います。

結局、テーマを決めて実践形式で学習を行っていかないと追いつかないと思いますので…
ちょっとペースを上げていきます！

##[2] EC2インスタンスの作成

まずはベースとなるEC2インスタンスを作成していきたいと思います。

(1)AWS管理コンソールのメニューから[EC2]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/356ba477-1c6c-240f-80cd-8c164c59ff9a.png)

(2)[インスタンス]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/f4441e5b-c123-1a03-a403-1a3f3898d88d.png)

(3)[インスタンスの作成]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/c276fcfa-381b-790f-9f36-c9302078d8bc.png)

(4)[Amazon Linux AMI]の[選択(赤枠箇所)]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/9c67b965-178f-9f32-7f02-2f9b2c17c7d2.png)

(5)[確認と作成]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/21084a29-08dc-323e-24eb-9d8d3f80d145.png)

※無料利用枠の対象となっているt2.microのインスタンスを選択します
  とりあえず、今回はAWSの勉強なので動けばなんでもいいので…

(6)画面を下のほうにスライドさせて[セキュリティグループ]の[SSH]が
　 デフォルトで設定されていることを確認し、[作成]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/2f37f2ed-7fd8-f391-435c-761d954dd528.png)

(7)[新しいキーペアの作成]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/58a13e47-89f8-b76f-6d78-b27c92213e3c.png)

(8)[キーペア名]のところに任意の名前を入力して[キーペアのダウンロード]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/609d422a-a3e1-978e-45cc-9c1d089d4e59.png)

※このキーペアは後でサーバに接続する際に必要となるので大事に保管しておきます。

(9)[インスタンスの作成]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/72c1fe5a-a20c-a209-fc83-84f2186907fd.png)

(10)とりあえず、以下の画面が表示されればインスタンスは作成されている状況です

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/219136ad-dd50-b899-6a05-15ef7bd2f06e.png)

(11)再び、EC2のインスタンス一覧画面に戻ってみると
　　一覧に作成したインスタンスが追加されていることを確認できます

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/223725b9-d6ad-2dc7-3e20-ac1b2034cf75.png)

ここまででとりあえずEC2インスタンスの作成は完了しました。
続いて、このインスタンスにSSHで接続してみます。

※とりあえず、セキュリティグループは何ぞ？みたいなツッコミは後々、まとめていきます！

##[3] EC2インスタンスへのアクセス

TeraTermなどのターミナルエミュレータソフトを使って、
作成したインスタンスへSSH接続を試みます。

(1)EC2のインスタンス一覧画面よりパブリックDNS、パブリックIPを確認します

※赤枠箇所のDNS名、IPアドレスです。

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/8c394ec3-143c-a0a2-b0e3-9ba30a08653b.png)

(2)[ホスト]に先ほど確認したDNS名もしくはIPアドレスを入力し、
　 [TCPポート]が22番になっていることを確認して[OK]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/b2d270c5-cb68-7200-66dc-e2a0f1b4952b.png)

※TeraTermを使う前提で手順書いてます。

(3)以下の内容を実施します

①[ユーザ名]にはec2-userを入力します
②[秘密鍵]にインスタンス作成時にダウンロードしてきたキーペアファイルを選択します
③[OK]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/3ec26935-d27d-5d35-04d5-0cba65877960.png)

(4)Amazon Linux AMI のログイン画面が表示されます

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/ecfa3c1b-82b0-e40d-b60e-8bbe60ef3019.png)

インスタンス名をつけるのを忘れていることに
ここまで書いててちょっと気づいたので補足します。

##[補足]インスタンス名の変更

(1)インタンスの一覧画面で赤枠箇所をクリックします
![image](https://qiita-image-store.s3.amazonaws.com/0/138274/af71e521-75b8-7536-2d84-4ae905f926b3.png)

(2)入力欄が表示されるので任意のインスタンス名を入力します

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/e6ae53e9-b861-97e8-7425-df6fcf49090f.png)

##[4] Railsのインストール

EC2インスタンスに接続できたので続いてRuby on Railsをインストールしていきます。

色々とインストールの仕方があるようですが、今回は主題ではないので、
サクッとインストールしていきます。

内容はgit → rbenv + ruby-build(プラグイン)の順にインストールし、
続いて、ruby → Railsの順にインストールします。

(1)gitのインストール

```
$ sudo yum install git
$ git --version
```

(2)rbenvのインストール

```
(0)前提条件となるパッケージのインストール
$ sudo yum install gcc
$ sudo yum install gcc-c++
$ sudo yum install openssl-devel
$ sudo yum install readline-devel
$ sudo yum install sqlite-devel

(1)rbenvのインストール
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

(2)rbenvコマンドでのrubyインストール
$ cd .rbenv/bin
$ rbenv install 2.3.1(現時点の最新安定バージョン)

(3)rubyがインストール確認用のプログラムを作成
$ vi hello.rb

[hello.rb]
puts "Hello World!"

(4)rubyのインストール確認
ruby hello.rb

[結果]
Hello World!

(5)Railsのインストール
$ gem install rails --no-ri --no-rdoc

※ところがここでエラー発生。(もう主題じゃないのに…めんどう…)

Fetching: activesupport-5.0.0.1.gem (100%)
ERROR:  Error installing rails:
        activesupport requires Ruby version >= 2.2.2.

Rails(バージョン5.0.0.1)がサポートしているRubyのバージョンは2.2.2だそうです。
というわけで気を取り直して、2.2.2をインストールします。

(6)rubyバージョン切り替え
$ rbenv global 2.2.2

バージョンが切り替わったことを確認
$ rbenv versions

[結果]
  system
* 2.2.2 (set by /home/ec2-user/.rbenv/version)
  2.3.1

(7)Rails再インストール
$ gem install rails --no-ri --no-rdoc

[結果]
…
Successfully installed rails-5.0.0.1
37 gems installed

(8)Railsアプリケーションの作成と起動

[1]アプリ用フォルダの作成
$ cd
$ mkdir myapp
$ cd myapp

[2]バンドル ※1の起動とGemfileの設定変更
$ bundle init
$ vi Gemfile

[Gemfile]
1 source 'https://rubygems.org'
2
3 gem 'rails' → コメントアウト(#)を外します

[3]アプリケーションの作成および起動 ※2
$ bundle exec rails new . --skip-test-unit

Overwrite /home/ec2-user/myapp/Gemfile? (enter "h" for help) [Ynaqdh]
が表示されたら"y"を入力。

[4]Gemfileの編集

vi Gemfile

[Gemfile]
16 # See https://github.com/rails/execjs#readme for more supported runtimes
17 gem 'therubyracer', platforms: :ruby → コメントアウト(#)を外します

[5]bundleの再実行
$ bundle install

[6]Railsサーバーの起動
$ rails server -b 0.0.0.0

※1 Bundler(バンドル)：各アプリケーション内で使うRubygemsを管理する仕組み
※2 Ruby本体と一緒に配布されている簡易WebアプリケーションサーバWEBrickが起動します

```

ところで何気なく使っているこのyumコマンドですが、なぜ使用することができるのかというと…
Amazon様独自のリポジトリを構えているからなんですね。

[参考]リポジトリの追加
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/add-repositories.html

```
デフォルトで、Amazon Linux インスタンスは、
amzn-main と amzn-updates 
の2つのリポジトリを有効にして起動します。
```
##[5]httpsアクセスの許可

httpsでのアクセスを行うには以下のファイルを編集します。
このサーバには証明書が入っていないのでhttpsでのアクセスは出来ないですが…
有効にする場合は以下のファイルを編集するようです。

```
[ファイル]
config/environments/production.rb

39   # config.action_cable.url = 'wss://example.com/cable'
41
43   config.force_ssl = true → コメントアウト(#)を外します

```

##[6] サイトにアクセス
…というわけでRailsがインストールされましたので早速、アクセスしてみます。
なんですが、アクセスするにはセキュリティグループの設定を変更してあげる必要があります。

(1)EC2インスタンス一覧の中から対象のインスタンスを選択します

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/bac43ff3-c13d-50c2-bfac-15955f3345ef.png)

(2)画面右下に表示されている[セキュリティグループ]欄の
　 青字で表示されている[ルール名]をクリックします
※青で塗りつぶすのめんどくさいので、今後は基本的にピンポイントに項目を貼り付けます

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/d1ef7cda-8783-3109-23d8-dd2181ebd18c.png)

(3)セキュリティグループの一覧画面で[インバウンドルールの編集]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/94786008-2e26-66f5-71e6-37c44722ac47.png)

(4)[ルールの追加]をクリックします

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/9df26ced-e7ec-1c47-5028-516597382f7e.png)

(5)以下、内容のルールを追加し、[保存]をクリックします

タイプ：HTTP
プロトコル：TCP
ポート範囲：80
送信元：0.0.0.0/0

タイプ：HTTPS
プロトコル：TCP
ポート範囲：443
送信元：0.0.0.0/0

タイプ：カスタムTCPルール
プロトコル：TCP
ポート範囲：3000
送信元：0.0.0.0/0

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/238db5df-4ad0-2b98-28bd-ee5d2daa6cd0.png)

ここまででサイトにアクセスできるようになったのでWebブラウザで以下のURLにアクセスします。

接続先URL：
http://EC2で作成したパブリックDNS(もしくはIP):3000

ブラウザにサイトが表示されてアクセスできることを確認します。

![image](https://qiita-image-store.s3.amazonaws.com/0/138274/efb26d2a-e831-1003-687d-298d7b44cdc2.png)


これでEC2の使い方の確認は終了ですね。

##総括
どうやら、この実機を使っての演習というのは、
使うことを目的として基本的な動作を理解する意味では良いのですが、
試験勉強という観点からするとあまり有効的ではないようです。
次回からはまた、趣向を変えて学習を進めていこうと思います。