見ながらやろう! AWSを始めよう -RDS編-

第一回目: -[事前準備編](https://qiita.com/nago3/items/76897a8ec6d1ab6121ce)-
第二回目: -[VPC構築編](https://qiita.com/nago3/items/f5badeb4f7e5c32b0540)-

# 追記
第二回目のVPCの環境と名称が違っておりました。
**3. EC2インスタンスの作成**
で使うサブネット名は
`test-public-subnet-a`
となっております。

後日改定投稿いたします。
@mitch0807 さん、ご指摘いただきありがとうございました。

------------

**はじめに...**

VPCを構築したら、[EC2]の接続先の[RDS]を構築して見ましょう。
前回作成したサブネット、セキュリティグループに適用していきます。
ぽちぽち進めていけばあっという間に終わってしまいますので、DBのメンテナンス用EC2構築までやって見ましょう。

**EC2メインの回は別途行います。**
____________

## **やること**

1. RDSの設計
2. セキュリティグループの作成、設定
3. EC2インスタンスの作成
4. Elastic IPの関連付け、EC2インスタンスにSSH接続
5. EC2インスタンスからRDSへ接続

<img width="853" alt="Screen Shot 2018-02-24 at 19.03.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/161922/980a899d-395a-4c22-5806-7776337e98bc.png">

まずは[RDS]を設計しましょう。今回は[MySQL]を使います。
次にEC２を設置するセキュリティグループの接続設定を行います。
最後にEC2インスタンスを立ち上げ、[SSH]通信でデータベースに接続できることを確認します。


## 1. **RDSの設計**

今回のタイトルにもなっている[RDS]です。[Relational Database Service]と言います。
webサービスを作るにあたって、
サービスをローカルで作成するとき同じパソコンの中にDBをインストールするように、
「EC2を建てればその中にDBをインストールしてそこで運用する」こともできます。

では、**RDSのメリット**とは何か？

* EC2から切り離されているので、耐障害性、冗長性、セキュリティが良い
* AWSがサポートしてくれるので、クラウド内でリレーショナルデータベース(RDB)を簡単に設定、運用、およびスケールできる
* バックアップやバージョンアップを自動化できる

などが挙げられると思います。
デメリットといえば、お金がかかることでしょうかね？

「自分でDB管理は全部できるし、管理する方が目的！」
ぐらいでないのであればRDSを使う一択でいいでしょう。

VPC:
https://aws.amazon.com/jp/rds/

ドキュメント:
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Welcome.html

-------------------

では始めていきましょう。
まずはサブネットグループの作成です。

![AWS マネジメントコンソール.png](https://qiita-image-store.s3.amazonaws.com/0/161922/56714cad-3c8d-258d-e573-1325eb4de7a6.png)

画面左上の[サービス]から[Reltional Database Service]をクリックします。

![RDS · AWS Console100.png](https://qiita-image-store.s3.amazonaws.com/0/161922/ecad00a2-e2ac-00ca-73e8-6ca9934722d6.png)

まずは前回作成したDBサブネットをサブネットグループとしてまとめます。

![RDS · AWS Console4.png](https://qiita-image-store.s3.amazonaws.com/0/161922/c91f8ee1-0c02-09e0-c362-07b83efd4f35.png)

サブネットグループについての基本情報を記述します。

![RDS · AWS Console5.png](https://qiita-image-store.s3.amazonaws.com/0/161922/0dd641b1-dbc8-d587-2320-c4996b10a596.png)

DBサブネットが表示されているので、確認できたら[作成]を押しましょう。
このときwebapp用などのDBサブネット以外のサブネットが入っていたら外しておきましょう。

![RDS · AWS Console6.png](https://qiita-image-store.s3.amazonaws.com/0/161922/286c4e87-ee7b-4d3d-67e1-d29fda0049b9.png)

画面が戻ってきて、作成したサブネットグループのステータスが[完了]になっていたら成功です。

![RDS · AWS Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/52ea2583-7cc3-3fb7-a58d-edf3aa3e65e2.png)

DBインスタンスを作成していきます。サイドバー[インスタンス]から、[DBインスタンスの起動]を選択します。

![RDS · AWS Console1.png](https://qiita-image-store.s3.amazonaws.com/0/161922/080419e0-cbe8-e887-0c4c-38c77ded55b4.png)

画面下部に[RDS無料利用枠の対象オプションのみを有効化]という項目をチェックし、[MySQL]を選択したら次に進みます。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/161922/8340f665-9276-80be-7717-969e07fe4c6d.png)

詳細設定では、インスタンスのバージョンやクラスを選択できます。RDSの無料利用枠は<font color='red'>[20GB]</font>なので、注意しましょう。

![RDS · AWS Console2.png](https://qiita-image-store.s3.amazonaws.com/0/161922/9e1b5ffe-9e22-d48e-1d50-d7625e283fad.png)

画面下部では、dbインスタンスに一意の命名をしたり、ユーザーやパスワードを設定します。
これは後ほどEC2からアクセスするときにも使いますので、しっかり考えて作りましょう。

**Tips:**
[DBインスタンス識別子]は<font color="red">_(アンダースコア)</font>が使えず、また[マスターユーザー]は<font color="red">-(ハイフン)</font>が使えません。注意しましょう。

![RDS · AWS Console7.png](https://qiita-image-store.s3.amazonaws.com/0/161922/139942c8-5a8b-441a-d28f-6c9f46294be4.png)

VPC、サブネットグループ共に作成したものを選びます。
パブリックアクセシビリティはそのままで、アベイラビリティゾーンは好みや値段で選んでください。
VPCセキュリティグループは[既存のVPCセキュリティグループの選択]にします。
<font color="red">そのままでは[default]が残っているので、削除してDBのセキュリティグループのみを選んでください。</font>

![RDS · AWS Console8.png](https://qiita-image-store.s3.amazonaws.com/0/161922/8a37a262-21ef-acc5-62ca-6dd3370b39e3.png)

データベースに名前を決めて、ポートの解放を設定します。
MySQLのポートである[3306]が自動で入力されているので特にいじらなくて大丈夫です。

![RDS · AWS Console9.png](https://qiita-image-store.s3.amazonaws.com/0/161922/70e2bafe-c785-d1d0-5c5a-043257d46591.png)

吐き出すログの種類を選択します。
とりあえず全部チェックしておくで最初はいいと思います。
以上を入力したら画面下部から[インスタンスの作成]を押してください。

![RDS · AWS Console10.png](https://qiita-image-store.s3.amazonaws.com/0/161922/f9cd9e29-8059-b282-c18a-2fb6efce1238.png)

これでインスタンスの部分に作成中と表示されましたね。完了するまでに5分ほどかかるので、先に進みましょう。


## **2. セキュリティグループの作成、設定**

VPCからこの後作成する[DBメンテナンス用EC2]を配置するセキュリティグループを作成します。

![セキュリティグループ   VPC Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/34058fc5-a941-a894-ab12-f3920235af57.png)

ここは前回と手順は同じですね。[サービス]からサイドバー[セキュリティグループ]を選択し、[セキュリティグループの作成]をクリックします。

![セキュリティグループ   VPC Management Console (1).png](https://qiita-image-store.s3.amazonaws.com/0/161922/d837dceb-110c-5391-db83-b7c1919e80d7.png)

はい、これでメンテナンス用のセキュリティグループの作成が完了しました。
このままMySQLのポート[3306]を通過できるように設定してしまいましょう。

![セキュリティグループ   VPC Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/1a1575f8-c2c4-c4dc-1ca2-08355c1fc8cb.png)

DBセキュリティグループに、作成したセキュリティグループからのアクセスを許可します。
DBセキュリティグループの[インバウンドのルール]から[編集]をクリックします。

![セキュリティグループ   VPC Management Console1.png](https://qiita-image-store.s3.amazonaws.com/0/161922/0ae994dc-f2da-5d27-cf4f-9273057e96ee.png)

この作業は「[DBセキュリティグループ]に、ソースセキュリティグループとしての[メンテナンス用のセキュリティグループ]から"3306/tcp"に対する通信を許可するルール」を設定します

字面だけではわかりにくいが、通信の穴を開けているだけです。

## **3. EC2インスタンスの作成**

では、ここからメンテナンス用EC2の立ち上げを行います。

![EC2 Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/d4aea45b-2278-8edc-3e0d-4f05cd5170db.png)

画面左上[サービス]から[EC2]を選択します。
サイドバー[インスタンス]から[インスタンス作成]を実行します。

![EC2 Management Console1.png](https://qiita-image-store.s3.amazonaws.com/0/161922/d6d969b7-def1-8cb7-aa75-19822d26e594.png)

クイックスタートの中にある[Amazon Linux 2]を選択します。
ここには[Red Hat]や[Windows]も含めて多くの<font color="red">マシンイメージ(AMI)</font>が揃っています。
自身の使いたい環境に合わせて構成してください。

![EC2 Management Console2.png](https://qiita-image-store.s3.amazonaws.com/0/161922/41c14ea4-de71-1645-ff8d-5c18404ddf0e.png)

次にインスタンスタイプの選択です。DBのメンテナンスに大掛かりなものは必要ないので、そのまま<font color="blue">無料枠の[t2.micro]</font>を使いましょう。

![aws-black-belt-online-seminar-2018-reinvent-recap-compute-container-and-network-15-1024.jpg](https://qiita-image-store.s3.amazonaws.com/0/161922/09fa5618-56db-c71f-58f3-6f512fe086e9.jpeg)

ちなみにインスタンスの種類についてはAWSが詳しく解説してくださっている資料があります。[コンピューティング最適化]だったり[メモリの最適化]、[FPGA]などと[HPC]の分野が好きな方はここだけでニヤニヤできますね。
私は大好きです。

一般的なWebappなどの配置に使う程度でしたら現行世代の[m3~m5]のあたりを使えば十分でしょう。
他は[機械学習]や[ビックデータ]などの分野で扱うことがあるでしょうね。

![EC2 Management Console3.png](https://qiita-image-store.s3.amazonaws.com/0/161922/28c02ce9-af7b-f2f3-7b4a-145845ae6bca.png)

次にインスタンス数を決めて、ネットワークとサブネットを前回作成したものを指定します。
この辺りの詳しい内容はEC2がメインの回で説明します。

![EC2 Management Console4.png](https://qiita-image-store.s3.amazonaws.com/0/161922/0928fb09-b584-23b8-f992-cd0e40572e70.png)

特に変更する箇所はありません。
<font color="red">無料利用枠は[30GB]まで</font>なので、数字を大きくしすぎると無料利用枠を超えてしまいますので注意してください。

![EC2 Management Console5.png](https://qiita-image-store.s3.amazonaws.com/0/161922/d6addc19-e083-1438-210b-4d69eabeaa0e.png)

タグを設定して次に進みます。

![EC2 Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/f6b0ec63-5bfc-eb12-cfab-0d5706441200.png)

セキュリティグループを設定します。
既存のセキュリティグループから、今回はメンテナンス用のEC2ですので[db-maintain-sg]を選択します。

![EC2 Management Console1.png](https://qiita-image-store.s3.amazonaws.com/0/161922/524b4f38-db8b-d0c4-3442-8b209da1b3eb.png)

まだセキュリティグループに穴を開けていないので「このままではアクセスできませんよ」と警告してもらえます。この後セキュリティグループをいじるので、このまま進みましょう。

![EC2 Management Console7.png](https://qiita-image-store.s3.amazonaws.com/0/161922/07340d74-7f7f-05f2-63b9-ec465d834900.png)

設定の確認が終わると、最後に[キーペア]の作成画面になります。
キーペアとは、サーバーのパソコンにアクセスして中身をいじる[SSH]通信で必要になるものです。
名前をつけてダウンロードしましょう。

![EC2 Management Console8.png](https://qiita-image-store.s3.amazonaws.com/0/161922/4d1721a5-c7ab-50a6-3aa5-4ba3d45b1831.png)

インスタンスの画面に戻り、表示に[running]があれば無事インスタンス作成完了です。

![セキュリティグループ   VPC Management Console10.png](https://qiita-image-store.s3.amazonaws.com/0/161922/6b133326-7260-82cd-16e5-ac0310ffa359.png)

先ほどのDBセキュリティグループと同じように、メンテナンス用のセキュリティグループに今度は"22/tcp"の穴を開けましょう。今度は自分で確認するために外部に解放する必要があるので、ソースは[0.0.0.0/0]という誰でも使える設定にしておきます。

## **4. EC2インスタンスにSSH接続**

まずは先ほど作ったEC2インスタンスに[Elastic IP]を関連付けます。
[Elastic IP]については別途解説しますのでここでは割愛させていただきます。

![EC2 Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/3d998abc-ffb3-0a11-7cd8-7ccd1663aa28.png)

まずはサイドバー[Elastic IP]から[新しいアドレスの割り当て]を実施します。

![EC2 Management Console (1).png](https://qiita-image-store.s3.amazonaws.com/0/161922/1d7a5f06-e1f0-10b7-aa79-6b1e7b563b07.png)

[割り当て]を押すだけで簡単に割り当てられてしまいます。

![EC2 Management Console (2).png](https://qiita-image-store.s3.amazonaws.com/0/161922/03c89f51-ab3b-975c-d725-17f2f1306ad8.png)

次は画面上部から[アドレスの関連付け]をクリックします。

![EC2 Management Console (3).png](https://qiita-image-store.s3.amazonaws.com/0/161922/d7bfb5b8-7f08-df9a-559d-902cca97e9f5.png)

インスタンスの項目をクリックすると、選択肢に先ほど建てたEC2インスタンスが出てきますので、選択して[関連付け]をクリックすれば完了です。

![EC2 Management Console (4).png](https://qiita-image-store.s3.amazonaws.com/0/161922/76300a66-87b1-19c0-c51d-61e401d52795.png)

インスタンスの項目を選択し、画面下部の[Elastic IP]に割り振られた数字が記載されていれば大丈夫です。

-----------------

今度は自分のパソコン上での操作になります。今回は初期設定の保存先である<font color="blue">[Download]上でそのままSSH接続を行います。</font>

<img width="460" alt="Screen Shot 2018-02-24 at 18.54.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/161922/bd88dfa9-3d84-8938-e3c3-e8b77d10885c.png">

ターミナル上から自身の[Downloadフォルダ]に移動します。

![EC2 Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/10dd5640-acfa-9ecf-d19c-ce356497b236.png)

次にEC2インスタンスから[接続]をクリックすることで、EC2インスタンスへアクセスするためのコードが出てきますので、これを上から順番にコピー&ペーストしてください。

<img width="761" alt="Screen Shot 2018-02-24 at 19.23.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/161922/9f2992fd-4122-7693-d26a-4ae7c8b9a554.png">

[ssh -i ~]の入力がされると(yes/no)の選択肢が出てきますので、[yes]と入力してください。

<img width="804" alt="Screen Shot 2018-02-24 at 19.25.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/161922/f64ca1dd-cf8b-ee6c-28dc-79fa57fe8639.png">

アスキーアートで[EC2]と表示され、無事作成したEC2インスタンスにSSh接続できました。

## **5. EC2インスタンスからRDSへ接続**

まずは接続先のRDSがわからないと困ります。なので接続先を確認しましょう。

![RDS · AWS Console (1).png](https://qiita-image-store.s3.amazonaws.com/0/161922/85f53aa4-8209-8079-25ac-b9891e0f1cde.png)

画面左上[サービス]から[Relational Database Service]を選択。
サイドバー[インスタンス]から作成したインスタンスをクリックします。
画面を下がっていくと中段ほどに[接続]という項目があります。

ここにある[エンドポイント]というのが接続先のことなので、控えておきましょう。

---------------

次はコンソール上でサーバーに必要な内容をインストールしていきます。

```
[ec2-user@ip-10-0-0-72 ~]$ sudo yum -y update
[ec2-user@ip-10-0-0-72 ~]$ sudo yum -y install mysql
```

これでシステムのアップデートと[MySQL]をインストールしました。このままRDSに接続してみましょう。

```
[ec2-user@ip-10-0-0-72 ~]$ mysql test_db -h <エンドポイント> -P 3306 -u test_user -p
Enter password: -> DB設定に使ったパスワードを記述

-h -> エンドポイント
-u -> ユーザー名
-p -> パスワードを要求する
```
![Screen Shot 2018-02-28 at 20.26.34.png](https://qiita-image-store.s3.amazonaws.com/0/161922/500ced60-cac3-e349-9f76-4e3d12146ae2.png)

はい、ということで先ほど作った[RDS]の[MySQL]にアクセスできましたね！
これでmysqlのコマンドをぽちぽちして楽しめます。

![RDS · AWS Console.png](https://qiita-image-store.s3.amazonaws.com/0/161922/6068733d-ab23-5dec-c388-c4496573af61.png)

RDSのインスタンス画面を確認すれば、しっかり接続数が1になっていますね。

##**最後に...**

ということで今回はRDS編でした。RDSとの接続方法が分かればEC2でDB環境が必要なときに簡単に接続できますね。EC2の中にDBを配置するのも良いですが、せっかく集めたデータが消し飛んじゃうのは嫌ですしね。

今回は触れませんでしたがRDSの設定の項目にバックアップの時間指定や、アップデートの管理、スナップショットの作成など、まだまだ奥深く面白い項目もあるので、今後触れていきたいと思います。

さて、もう2週間しないで[JAWS DAYS 2018]が開催ですね。今からワクワクしています！
皆さんも楽しいAWSライフをお過ごしください！