[Rails+Unicorn+Nginx]AWSでアプリをデプロイする - vol.1

Ruby on Railsで作成したアプリをAWSのサービスを利用しデプロイしましたので、
その工程を書いて行こうと思います。
webサーバーにNginx、アプリケーションサーバーにUnicornを使用しました。
データーベースにはMySQLを使用しています。

プログラミング初学者のため、至らない部分も多々あるかとは思いますが
参考になれば幸いです。

今回はTodolistという名前のアプリをデプロイするという設定で進めていきます。
それでは初めましょう。

#使用環境

MacbookPro
Ruby 2.7.2
Rails 6.0.3.5
Nginx 1.12.2
Unicorn 5.8.0
MySQL 8.0

#前提条件

この記事はRailsを用いてアプリケーションを作成されている方に向けて書いていきます。
そのためRailsやRubyに関しては詳しくは書いていません。
それとAWSの会員登録も済ませてある前提で進めていきます。

そして、ネットワークの基礎知識も必要になってきます。
読み進めていてわからない部分があれば適宜調べて進めるか、
それでもわからない場合は基本情報技術者の教材などで学習していただけると
スムーズに読み進められるかと思います。

尚、AWSは登録から１年は無料で利用できる枠がありますが、
この記事の通りの手順で進めていくとその枠の上限を超えるため料金が発生すると思われます。
**お金をかけたくない方は参考にしないでください。**

#VPCを作成する

VPCはAWS内の自分の個人のネットワーク領域を作成するときに一番外側の箱になる部分です。
この中に後に作成するwebサーバーやDBサーバーを入れるサブネットと呼ばれる箱を設置していきます。

まずAWSのコンソールにログインします。
ログインすると一番上に検索欄がありますのでそこに「VPC」と入力してVPCのコンソール画面に移動してください。

VPCのダッシュボードからVPCを選択してください。
そして「VPCを作成」のボタンをクリック新規作成画面に移動しましょう。

それぞれ以下のように入力してください。
"todolist"の部分はそれぞれのアプリの名前に変更してください。
![スクリーンショット 2021-03-22 18.32.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/efa10e73-b31d-f955-7476-ef7bf830335a.png)
![スクリーンショット 2021-03-22 18.34.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/2671630c-bb64-fe97-8078-7c6ddcbe8f04.png)

IPv4のCIDRは１６でなくとも構いませんが、ホスト部を狭くする必要性はないのかなと
考えましたので余裕を思って広めに取りました。

##サブネットの作成
サブネットはVPCの中に部屋を作るようなイメージですね。
ネットワークに個別の部屋を作って役割分担させていきます。

具体的にはパブリックサブネットとプライベートサブネットを作成していきます。
パブリックサブネットにはwebサーバーを、
プライベートサブネットにはDBサーバーを設置していきます。
まずは空のサブネットを作っていきましょう。

###パブリックサブネットの作成

VPCのダッシュボードからサブネットを選択して作成していきます。
![スクリーンショット 2021-03-23 17.25.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/72a5b7a4-17c7-16fb-3b24-aa29b81c308e.png)
![スクリーンショット 2021-03-23 17.26.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/9239c0e9-5605-3f66-6fcd-e30633139c0c.png)

VPCは先ほど作成したtodolist-vpcを選択します。

サブネット名はパブリックとプライベートのサブネットの違いがわかりやすいように
todolist-publicとしておきました。

次にアベイラビリティーゾーンとはAWSのサーバーたちが実際に配置してある拠点になります。
これがより近い場所にあるほどレスポンスが早くなります。
そのため東京のアベイラビリティーゾーンを選択します。

余談ですが1a,1c,1dが選択できますが、複数の選択肢があるのはどこかが災害などで使用不能になってもAWSの全システムがダウンすることのないようにリスクヘッジしているためだそうです。

以上の設定に問題がなければサブネットの作成を完了しましょう。

###プライベートサブネットの作成

プライベートサブネットはパブリックサブネットと違い２つ作成します。
プライベートサブネットにはDBサーバーを設置するので、もしも何かトラブルが発生して片方のサブネットが使用不能になった場合でもサービスが問題なく稼働するよう冗長性を高めることがAWSで推奨されています。

作成手順に関してはパブリックサブネットと同様です。

![スクリーンショット 2021-03-23 17.35.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/c5ca4093-ad5b-3647-a8e5-df96dfbe348e.png)
![スクリーンショット 2021-03-23 17.35.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/83f68693-9ffb-7a00-6941-1cde3cc919d0.png)

パブリックサブネットと違うところはサブネット名にアベイラビリティーゾーンの番号を追加しているところです。
２つ作成するので見分けがつくようにtodolist-private-1a,todolist-private-１cと命名しておきましょう。

IPアドレスの部分は1aが10.0.20.0/16、
1cが10.0.21.0/16にしておきましょう。

以上でサブネットの作成は完了です。

##インターネットゲートウェイの作成
今の状態ではVPCは言わば密室状態です。
外のネットワークとやりとりするための扉がありません。
それでは使い物にならないのでインターネットゲートウェイという外との出入り口を作りましょう。

VPCのダッシュボードからインターネットゲートウェイを選択して作成していきます。
以下のように入力しましょう。

![スクリーンショット 2021-03-23 18.06.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/fb008a8a-9659-e22e-8aab-fadb430909ba.png)

インターネットゲートウェイを作成すると以下のような緑色の欄にアタッチ設定の案内が出るのでVPCへアタッチをクリックしてください。
![スクリーンショット 2021-03-23 18.07.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/7796395e-9fc4-60bc-357d-18e99e970ed1.png)

アクセスするとVPCを選択する欄がありますので、そちらから最初に作ったVPCを選択しましょう。
VPCにアタッチするというのは作成したインターネットゲートウェイの扉をVPCの部屋に取り付けるイメージです。
アタッチが完了したら扉の取り付けは完了です。


##ルートテーブルの作成
続いてルーティングを設定するためのルートテーブルを作成していきます。
先ほどインターネットゲートウェイを作成したことで外へと通じる扉を設置することには成功しました。
しかしいまはまだ扉があるだけで使えるようにはなっていません。
扉を使って外とやりとりできるように設定するのがルートテーブルです。

VPCダッシュボードのルートテーブルを開いて作成をクリックしましょう。
以下のように入力してください。

![スクリーンショット 2021-03-23 17.48.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/9b96dae3-cb93-e8fa-9318-26334b26a068.png)

今度はルートテーブルの一覧からtodolist-routeを選択して、
画面の下の方に出るルートタブを選択して'ルートの編集'を選択してください。

デフォルトのルートテーブルではIPアドレス内のプライベートなネットワーク空間でしかデータのやりとりができないようになっているので、外のネットワークに行き来できるようにルーティングを編集していきます。
![スクリーンショット 2021-03-23 17.52.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/8c604e7a-9eb2-d084-1c0d-445e2a24c061.png)

編集画面に移動したらルートの追加をクリックします。
すると空のルートが出てくるので、IPアドレスを0.0.0.0/0と入力してください。
ターゲットの欄をクリックすると予測一覧のようなものが表示されるので'Internet Gateway'を洗濯してください。すると予測一覧のところに先ほど作成したインターネットゲートウェイが表示されると思いますのでそれをクリックしてください。

以下の画像のように入力できたらルートの保存をクリックしましょう。

![スクリーンショット 2021-03-23 18.17.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/4d09db6d-b310-e8e6-c8a6-c9389ef133d3.png)

次にルートテーブルをサブネットに関連付けしていきます。
関連付けをしないと外のネットワークとサブネットが繋がりません。
以下の画面に移動しましょう。

![スクリーンショット 2021-03-24 18.49.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769439/6bfb59eb-7139-1378-32cb-545d8cdc4d7b.png)

'サブネットの関連付けの編集'をクリックしてパブリックサブネットが選択できるはずなので選択して保存します。

以上でルートテーブルの設定はOK。
これでVPCの作成手順は全て完了です。
とりあえず空の部屋に扉をつけて大枠はできあがったので、以降の章から中身を作っていこうと思います。

#vol.2へ続く

切りがいいので続きはvol.2にて！！

ーーーーーーーーーーーーーーーーーーーーーーーーー

###ここまでの内容で参考にした記事

https://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e

https://qiita.com/7sgg_m/items/dc483baf38ea90de5ada

ーーーーーーーーーーーーーーーーーーーーーーーーー

プログラミング初学者が書いている記事ですので間違っている箇所がもしかするとあるかもしれません。
もしお気づきの点ございましたらコメントで指摘していただけると幸いでm(__)m
他にもうまく動かない場合や説明不足で理解できなかった点などございましたらお気軽に質問どうそ！