RailsアプリをAWSにあげるために必要な知識

# はじめに
プログラミング未経験の筆者がRailsアプリをAWSにあげるのに、必要となった最低限の知識をざっくりとまとめました。

まとめた内容は以下の通りです。
・AWS
・VPC
・EC2
・RDS


# AWSのネットワークサービス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603209/2cee2860-7307-1f51-6623-a37db169503a.png)
参照：[アベイラビリティゾーンとは](https://www.atmarkit.co.jp/ait/articles/1410/27/news013.html)

まずはじめにAWSのネットワークについてです。
AWSを使うときにはじめに触れるのが**リージョン**と**アベイラビリティーゾーン(AZ)**です。
### リージョン
**リージョン**はAWSがサービスを提供している拠点（国と地域）のことを指しています。
遠いリージョンをを使うとネットワーク遅延が発生してしまう可能性があるので、基本的には東京リージョンを使いましょう。

### アベイラビリティーゾーン(AZ)
**アベイラビリティーゾーン(AZ)**は[データセンター](https://www.kagoya.jp/howto/rentalserver/data-center/)(サーバー機などのIT機器を設置・収容する場所を提供し、安定的に運用できるようさまざまなサービスを提供する施設)とほぼ一緒です。
AZはリージョンごとに用意されていて、東京リージョンでは４つのAZが用意されています。

AWSでは複数のAZを利用すること（マルチAZ構成）が推奨されています。
マルチAZ構成であれば、もし一つのAZに障害が起きても、別のAZを利用することでネットワーク障害を回避できるからです。

続いてAWSのサービスについて説明していきます。

# VPC(Virtual Private Cloud)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603209/f6597e2f-4522-f0e5-36e6-c68d548bc57f.png)
> 参照：[VPC とサブネット](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Subnets.html)

VPCはネットワークを作成するサービスです。
上図の通りAWSのネットワークの中にVPCのネットワークを作成します。
そしてVPCはサブネットを作成することで分割できます。

ざっくり言うと
大きな箱（AWS）の中にそこそこ大きい箱(VPC)があって、その中に小さな箱（サブネット）があるイメージですね。

そして、この小さな箱（サブネット）の中にこれから説明するEC2やRDSが入っていきます。


# EC2(Elastic Compute Cloud)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603209/414e50a5-00cf-aed0-8bd6-8d599b1f392a.png)
> 参照：[インスタンスの開始方法](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html)


EC2は**仮想サーバ（インスタンス）**、**ファイアウォール（セキュリティグループ）**などを利用できるサービスです。

知らない単語が出てきましたね...

ざっくり説明していきます。

### インスタンス
インスタンスは従来の[オンプレミス環境上](https://www.kagoya.jp/howto/rentalserver/on-premises/)のサーバに相当します。

インスタンスはOS、CPU、メモリ等の情報を持っています。

つまり「インスタンスを作成する」というのは
**「OS、CPU、メモリ等の条件を選択し、自分が求めるサーバーを作成する」**ことです。


###セキュリティグループ
セキュリティグループはAWS標準のファイアウォール機能です。
EC2インスタンスへのアクセスを許可したり、トラフィックを制御することができます。

**デフォルトでは全ての通信が遮断してあります。(重要)**
そのため特定の通信を許可する必要があります。

アクセスの許可は通信の方向で分けられ、**インバウンド**と**アウトバウンド**に分けられています。
**インバウンド**： 外部からインスタンスへの通信を許可(外側→インスタンス)
**アウトバウンド**: インスタンスから外部への通信許可(インスタンス→外側)

初心者がAWSを扱う上で一番エラーが発生しやすい部分がこのセキュリティグループだと思います。

複数のサービスを紐づけるためにセキュリティグループは必須なのでよく理解しておきましょう。


# RDS(Relational Datebase Service)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603209/473751f3-ffc3-df0e-2158-973173e9bc2d.png)
> 参照：[VPC の DB インスタンスにアクセスするシナリオ（公式）](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html#USER_VPC.Scenario1)

RDSはクラウド上で[リレーショナルデータベース(RDBMS)](https://wa3.i-3-i.info/word11770.html)を利用できるサービスです。


AWS上でRDBMSを利用する方法は２種類あります。（**重要**）

**1. EC2インスタンスにRDBMSをインストールする方法**
**2. RDSを利用する方法**

RDSではデータベース用のインスタンス（仮想サーバー）が作成され、その上にOSやデータベースエンジンが構築されます。そのため、利用者はサーバやミドルウェアのメンテナンスが不要となります。

基本的にはRDSを利用した方が構築・運用のコスト削減できるため、RDBMSを運用する場合はRDSを選択されることが多いです。

# まとめ
かなりざっくりですがAWSに関する知識をまとめました。

以下の記事を参考にしながら実際にAWSを触れば、詳細についての理解も深まると思います。

### 参照
・[世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e)

・[【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法【その1〜ネットワーク,RDS環境設定編〜】](https://qiita.com/Yuki_Nagaoka/items/975b7598806d6ae0c0b2)