現在、絶賛バックエンドの学習をしているのですがアプリをデプロイする先をせっかくならAWSにやってみようということでAWS環境にEC2とRDSを構築してSpringBoot(バックエンド)とReact(フロントエンド)が起動するところまでなんとかできたのでまとめとして記事を書いていきます。
まだ知識が浅く間違っているところが多々あるかもしれないのですがご容赦ください。
- VPCの設定
- EC2の設定
- RDSの設定
- EC2からRDSへの接続を確認する
- Gitのダウンロード
- Spring BootをEC2に配置する
- ReactをEC2に配置する
- RDSに初期データを作成する
- アプリを起動して表示を確認する
後編はまだ執筆途中になります。公開できましたらまた共有致します。
VPCの設定

CIDRブロックは10.0.0.0/16
の範囲に設定します。

サブネットの作成
VPCという大きなネットワークの中に小さなネットワークの集まりを作ることができ、またネットワークの範囲を限定することによってセキュリティを向上します。
外部接続用にパブリックサブネットを1つと、データベース用にプライベートサブネットを2つ用意します。
RDSを使用するときには、異なるAZに属するサブネットを2つ用意する必要があるようです。
このあたりなぜなのかは分かりませんので、もしご存じの方いたら教えてほしい、、、。
パブリックサブネット


プライベートサブネット
この2つサブネットは1aと1cで異なるAZを指定します。
CIDRブロックも別のものを指定するようにします。


インターネットゲートウェイの作成
VPC内のサーバーがインターネットと接続するためのゲートウェイを設定します。


インターネットゲートウェイとVPCに紐付けます。

ルートテーブルの作成
デフォルトでは、同じVPCのものしかアクセスができません。
なので、インターネットと接続の有無をここで設定します。
インターネットと接続したい場合には、ルートテーブルをインターネットゲートウェイに向かう設定を行い、「パブリックサブネット化」します。
反対にインターネットとは接続しない場合には、ルートテーブルをインターネットゲートウェイに向かう設定を行わずに、目的に合わせた設定を行います。
ルートテーブルを作成するのですが、今回どういうわけかすでに作られていた。VPCの作成したときとかに作られるのかな?

もしルートテーブルに作成されていなければ、自作で作成します。
作成したVPCにを紐付けます。

次にルートの編集をします。

次に、サブネットの関連付けを行います。

セキュリティグループの作成
VPC上に構築されるEC2などのインスタンスに対して仮想ファイアウォールとしての機能をもたらします。
基本的には、必ずインスタンスとセットで利用されます。
今回は、EC2とRDS用の設定を行います。

EC2用

RDS用

DBサブネットグループの作成
DB サブネットグループは、選択した VPC で DB インスタンスが使用できるサブネットと IP 範囲を定義します。


EC2の作成

無料のものを選択する。

インスタンスタイプはt2.microでとりあえずOKです。

キーペアは新しく作成して、.ssh
フォルダに格納します。

ネットワーク設定には、作成したVPC及びサブネットを紐付けます。

これでEC2の作成は完了になります。
RDSの作成
RDSを作成します。

MySQLを選択。

無料利用枠を選択

認証情報の登録

VPCやDBサブネットグループ、セキュリティグループの設定をします。

これでRDSの設定は完了です。
EC2にSSHで接続
EC2インスタンスのパブリックIPv4アドレスをコピーします。

$ sudo chmod 700 ~/.ssh/aws-okalog.pem #権限の変更
Password: #自身のPCのパスワードを入力
$ ssh [email protected] -i ~/.ssh/aws-okalog.pem #EC2にSSHで接続
Last login: Tue Nov 8 04:39:24 2022 from pc18132.cac-net.ne.jp
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
13 package(s) needed for security, out of 16 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-0-94 ~]$
「$」はコピーしないでください。
設定が間違っていなければこれでログイン完了です。
EC2の中身。
[ec2-user@ip-10-0-0-94 ~]$ ls -la
合計 16
drwx------ 3 ec2-user ec2-user 95 11月 8 04:41 .
drwxr-xr-x 3 root root 22 11月 8 04:34 ..
-rw------- 1 ec2-user ec2-user 6 11月 8 04:41 .bash_history
-rw-r--r-- 1 ec2-user ec2-user 18 7月 15 2020 .bash_logout
-rw-r--r-- 1 ec2-user ec2-user 193 7月 15 2020 .bash_profile
-rw-r--r-- 1 ec2-user ec2-user 231 7月 15 2020 .bashrc
drwx------ 2 ec2-user ec2-user 29 11月 8 04:34 .ssh
EC2からのログアウトはexit
でいけます。
[ec2-user@ip-10-0-0-94 ~]$ exit
ログアウト
Connection to 35.74.233.111 closed.
$
EC2からRDSに接続
$ sudo yum update -y
.
. #もろもろアップデータされてます。
.
完了しました!
$ sudo yum install mysql -y #MySQLのインストール
.
. #インストールされてます。
.
完了しました!
コンソール画面に戻り、RDSのエンドポイントをコピーします。
[ec2-user@ip-10-0-0-94 ~]
$ mysql -h rds-okalog.cjbxdqb5nfbz.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password: #RDSのパスワードを入力
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
これでEC2からRDSへの接続は完了しました。
後編では、EC2上にSpringBootとReactのアプリをデプロイして、URLからアプリにアクセスできるところまでやりたいと思います。
まとめ
Qiitaの記事がめちゃくちゃ分かりやすくほぼほぼ同じ内容になってしまっていますが、改めて自分で設定をすることで少し理解が深まりました。
自分の知識が深まったタイミングで、記事にも肉付けしていけたらと思います!