2021年版 画像付き AWS ERROR 2003 (HY000): Can't connect to MySQL server

#はじめに
今回AWSで2つ目のインスタンスを作成してEC2にてMySQLに接続すると`ERROR 2003 (HY000): Can't connect to MySQL server on`下記のエラーが出た。

```
$ mysql -h RDSのエンドポイント.ap-northeast-1.rds.amazonaws.com -P 3306 -u username -p
Enter password: ************
ERROR 2003 (HY000): Can't connect to MySQL server on
```
MySQLが繋がらないというエラーに遭遇しこれの解決を備忘録として投稿します。

#投稿者の環境
MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)
macOS Big Sur バージョン11.0.1
PHP 7.3.23
Laravel Framework 6.20.7

#考えられる原因
インスタンスとRDSのセキュリティグループが関連づけられていないのが今回の原因

#RDSのセキュリティグループを確認
### VPC セキュリティグループを確認
1. AWSコンソール > [RDS] > [データベース] > 対象のDB識別子リンクで確認したい詳細画面表示
2.[接続とセキュリティ]タブ > [VPC セキュリティグループ]のリンクで`VPC セキュリティグループ`をクリックして中身を確認

![“スクリーンショット” 2021-03-27 12.05.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/981c0238-5115-a0d8-063d-09d8047d6289.jpeg)

### インバウンドルールを編集
インバウンドルールを編集をクリック

![“スクリーンショット” 2021-03-27 12.22.02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/1916295c-aa6b-ef27-9d23-61563d9e549c.jpeg)


### インバウンドルールの中身を確認
`ここからが重要です!!`
`RDSのセキュリティグループにあるインバウンドルールが結びつけたいインスタンスのセキュリティグループと関連づけているのかを確認してください!`
私の場合はインスタンスのセキュリティグループの名前にEC2-of-study-postsiteと名付けています。今回はこちらがちゃんと関連づけているのが確認できます。
![“スクリーンショット” 2021-03-27 12.15.18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/d413a809-b848-2f27-8d92-985679b59b5f.jpeg)

#インスタンスのセキュリティグループを確認
###インスタンス確認
次に問題のあるインスタンスを確認して下さい。
インスタンス > 問題があるインスタンスをクリック > セキュリティタブをクリック >　セキュリティグループを確認して下さい。今回はlanch-wizard-4がEC２のセキュリティグループに関連づけられています。
RDSのセキュリティグループは`EC2-of-study-postsite`
インスタンスのセキュリティグループは`lanch-wizard-4`
これらが矛盾しているためMySQLを探すことができないです。

![“スクリーンショット” 2021-03-27 12.34.00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/f17f2b28-3678-efbb-d9e8-aa9c139a4c5b.jpeg)

###セキュリティグループを確認
問題のあるインスタンスレ点を入れる　> アクション > セキュリティ > セキュリティグループを変更の順に進める。
![“スクリーンショット” 2021-03-27 12.44.48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/263dbde6-d14c-5684-533c-248293814c05.jpeg)

###問題のあるセキュリティグループを変更
1. 問題のあるセキュリティグループを`削除`(セキュリティグループのデータは残ります)
2. セキュリティグループを編集をクリック。
3. クリックすると今まで保存されたセキュリティグループの一覧が表示されます。
4. RDSに結びつけられたセキュリティグループを選択
5. セキュリティグループを追加をすると下に反映されます
5. 最後に`保存`をクリック


![“スクリーンショット” 2021-03-27 12.48.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/20530f00-3409-0392-0303-4e13591eb6a3.jpeg)
![“スクリーンショット” 2021-03-27 12.57.31.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/38e5dc92-f6b8-4b5f-43ba-51981ab9a268.jpeg)

###EC2を立ち上げてMySQLの接続を確認

最後にMySQLの接続ができるかを確認しましょう!

```
//EC2ターミナルにて
 mysql -h RDSのエンドポイント.ap-northeast-1.rds.amazonaws.com -P ポート番号 -u admin -p
```
上記のターミナルの意味ですが纏めたサイトがあるので一部を抜粋しました。
![“スクリーンショット” 2021-03-27 13.01.16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/b2923ee8-0929-e40e-5d73-50c7721c261f.jpeg)

下記の画像の様に接続は完了されましたか?
![“スクリーンショット” 2021-03-27 13.01.30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/5b1424a7-fbb1-fa54-554b-cd44160d23a0.jpeg)

#最後に
今回はセキュリティグループが原因だったので解決できて良かったです。
AWSは概念なのでイマイチ分からないことが多いです。デプロイができたとしてもどこかが反映されていないことがこれからも増えると思います。

#参考文献
[思考の葉](https://noumenon-th.net/programming/2020/04/10/ec2-rds-laravel/)
[RDSでMySQLをつくる](https://ponsuke-tarou.hatenablog.com/entry/2020/02/19/204649#MySQL%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%BE%E3%81%99)
[@ponsuke0531さんのQiita](https://qiita.com/ponsuke0531/items/1cd76d53c1672fd81d03)