【無料枠でやる】EC2からRDSのmysqlに接続

# EC2からRDSのmysqlにworkbenchで接続
予備知識はEC2、RDSが何をするかは知っててAWSでの構築は初めてというレベル
ゴールはクライアントGUIでDB操作できるまで
セキュアを意識してEC2を通さないとRDSにアクセスさせない
勉強かねてなので無料枠でやる

### やったこと
- [AWSのアカウントを作る](#awsアカウントを作る)
- [コンソールのショートカットを設定](#コンソールのショートカットを設定)
- [EC2でインスタンスを立てる](#ec2でインスタンスを立てる)
- [EC2にsshで接続できない（原因になったポイント）](#ec2にsshで接続できない原因になったポイント)
- [EC2にsshで接続](#ec2にsshで接続)
- [RDSでmysqlインスタンスを立てる](#rdsでmysqlインスタンスを立てる)
- [RDSのmysqlにEC2経由で接続できない（原因になったポイント）](#rdsのmysqlにec2経由で接続できない原因になったポイント)
- [RDSのmysqlにEC2経由で接続](#rdsのmysqlにec2経由で接続)
- [workbenchでRDSにアクセス](#workbenchでrdsにアクセス)
- [AWSの課金に関する失敗談](#awsの課金に関する失敗談)

## AWSアカウントを作る
リンク先の進行に沿って登録
[[awsアカウント作成]](https://portal.aws.amazon.com/billing/signup#/start)

## コンソールのショートカットを設定
よく使う機能をコンソールのヘッダーにセット
ヘッダーのピンのマークをクリックして必要なものをドラッグするだけ
~~毎回コンソールからはかったるい~~
先にやっとくと何だったっけの時にすぐに参照できる
<img width="572" alt="aws_setting.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258606/45e12546-6200-bd5b-a651-994c0846570d.png">

今回使うのは EC2 と RDS のみ

## EC2でインスタンスを立てる
まずはEC2

**インスタンスの作成**から**Amazon Linux AMI（無料利用枠の対象）**

**次のステップ**があるうちはポチポチ進める
*インスタンスの詳細*
　└*ストレージ*
　　└*タグ*
　　　└*セキュリティグループ*
　　　　└*確認と起動*

**無料利用枠の対象**とか**追加料金が適用されます**とか記載があるので
よくみて全部無料でいける範囲に収める

*セキュリティグループ*ではローカル検証したいだけなのでひとまず
　「タイプ」：SSH
　「ソース」：マイIP

*起動*で**キーペア**がないで！といわれるので*新しく作成*みたいなのを選ぶ
名前を適当（仮にaccesskey）に決めてダウンロード

サーバー起動

AWSがインスタンスを構成して起動してくれるのを待つあいだに次の手順を進める

## EC2にsshで接続できない（原因になったポイント）
pemをssh設定に移してpermissionを変更
```chmod```しておかないと接続時に制限甘くない？と注意される

    mv /Users/{username}/Downloads/{accesskey}.pem ~/.ssh/{accesskey}.pem
    chmod 600 /Users/{username}/.ssh/{accesskey}.pem

インスタンス作成時にセキュリティグループに自分の ip を入れてなかった場合は
インスタンスのインバウンドルールに追加しておく
　「タイプ」：SSH
　「ソース」：マイIP

## EC2にsshで接続
EC2エンドポイントは再起動すると変わることがある（つながらないときここもみる）

    ssh -i /Users/{username}/.ssh/{accesskey}.pem {EC2エンドポイント}

Amazon Linux AMIがでたら接続成功

## RDSでmysqlインスタンスを立てる
次はRDS

**データベースの作成**
「エンジン」：mysql
「バージョン」：5.7.22（202005時点の安定版）
「テンプレート」：無料利用枠
「インスタンスサイズ」：db.t2.micro（largeとかは課金枠なので注意）
「ストレージの自動スケーリングを有効にする」をオフ
（スケーリングされたら*追加料金*なので）

**認証情報の設定**
「マスターユーザー名」：（仮にroot）
パスワードの自動生成で作られるパスワードはインスタンス生成中に確認できる
自分で設定でもどちらでもいい

作成

## RDSのmysqlにEC2経由で接続できない（原因になったポイント）
EC2 のインスタンスの詳細から**プライベートIP**をコピー（すぐペーストすることになる）
EC2 左メニューにある*セキュリティグループ*で新しいグループを追加
　「グループの名前」：（仮にdbgroup）

**インバウンド**のルールを追加
　「タイプ」：MYSQL/Aurora（対象ポートが3306になる）
　「ソース」：EC2のプライベートIP（さっきコピーしたやつ）

EC2 に*mysqlクライアント*をいれる
素でたたくと80版がはいっちゃうので無効化して57を有効化する

    sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y
    sudo yum-config-manager --disable mysql80-community
    sudo yum-config-manager --enable mysql57-community
    sudo yum install mysql-community-client.x86_64

## RDSのmysqlにEC2経由で接続

    mysql -h {RDSエンドポイント} -u{root} -p

パスワードいれたら ```mysql>``` でOK

## workbenchでRDSにアクセス
[[workbenchダウンロード]](https://www.mysql.com/jp/products/workbench)

workbenchを起動したら Connections ＋

<img width="786" alt="aws_setting3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258606/2fdc03b4-03b8-aa85-3aec-5a460400225b.png">
　「Connection Name」：任意でなんでも
　「Connection Method」：```Standard TCP/IP over SSH```
　「SSH Hostname」：EC2のエンドポイント
　「SSH Usernme」：```ec2-user```（変えた記憶がなければコレ）
　「SSH Password」：*いれない*
　「SSH Key File」：EC2にssh接続するときのpem
　「MySQL Hostname」：RDSのエンドポイント
　「MySQL Server Port」：```3306```（変えた記憶がなければコレ）
　「Username」：mysqlのマスターユーザー名
　「Password」：mysqlのマスターパスワード（いれなくても聞かれるからどちらでも）
　「Default Schema」：デフォルトにしたいスキーマ（作った時点では空欄でいい）

Test Connection Successfuly!

接続して ```show databases;``` 通ったら成功

### AWSの課金に関する失敗談
セキュリティグループで EC2 からの 3306 を通してあげるのに到達できなくて迷走してたとき
　RDS 立てなおしてみよう
　→　Amazon Aurora ためしてみよう
　　→　インスタンスサイズ：```db.r5.large```（defaultでこれだった）
　　　→　上手くいかない…もういっかいmysqlで立てなおそう…
　　　→　翌日…あれ…課金発生してる…（Cost Explorerから何で課金発生したかわかりました…）

すぐ止めてたので微課金でしたが…無料だけでやりたい方は気をつけて…
<img width="371" alt="aws_setting4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258606/65d02ef4-ac72-6705-e8aa-77026dddd8b3.png">

#### 追記
書いてあるとおりにやっても上手くいかないことが多かったので記事にしようと思いました
qiitaの記事はもっと細切れにしてリンクでつなげていくのが主流なのかな
記事当たりの文字数減らして探したい情報に到達しやすくする感じか
次からそうしよう