初AWSサーバー構築してみた（EC2+RDS for PostgreSQL）

## 背景
業務でAWSを使用したテスト環境の構築を試みており、知識が少ないなと思ったため
また、AWS系の資格を取るにあたって実際に触りたいと思ったので、
技術部のAWSの学習計画に沿って行いました

## 手順

### VPCの作成
サーバーを立てるにあたって、広大なネットワークの空間にサーバーを立てる用の場所（土地的なもの）を作らないといけないので、VPCと呼ばれる仮想プライベートネットワーク空間を作成します
![VPC1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/c4b6ca07-162b-817e-38b5-d566443b2b1a.png)
まずコンソールのホーム画面から検索するなりなんなりしてVPCのコンソールに入ります
![VPC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/ee4175aa-2c78-132f-3b6d-8cb6c6126e3d.png)
「VPCを作成」というボタンを押下して作成画面に移ります
名前は任意で、今回はIPv4ブロックのみを作成
IPアドレス周り理解が追いついていなかったので、下記の記事を参考にしたりしました

https://qiita.com/Nt_CeCZL/items/937ffc3d42c0025353e3

![VPC4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/2f86cacb-f105-80ec-6780-b28a2282e7f1.png)

#### サブネットの作成
次にサブネットを作成
VPCのコンソールの左端にあるサブネットという文字をクリックするとサブネットのコンソールに遷移し、「サブネットを作成」というボタンを押下すれば作成画面に移れます
![サブネット1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/654638a0-1c2a-6c7e-139a-a4a6127cd78f.png)

さきほど作成したVPCにサブネットを設定する、この設定したサブネットにサーバーを立てます
VPCが土地だとしたらサブネットは住所でしょうか
![サブネット2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/00f227dd-5c74-042a-8b7d-9d08283b2d38.png)

#### ルートテーブルの作成
次にルートテーブルを作成します
先程作成したサブネットなどからのネットワークトラフィックの経路の判断に使われるものです
左端のタブからルートテーブルの文字を押下し、ルートテーブルのコンソールに移動します
「ルートテーブルの作成」ボタンを押下して作成画面に移ります
適当に名前つけて作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/93baf479-d2d3-f0f2-ba37-685a9d3ac180.png)

#### インターネットゲートウェイの作成
インターネットゲートウェイも作成します
メインのEC2を立てるまで結構やることが多いです（~~めんどくさい~~）
これまでと同じように左端のタブからインターネットゲートウェイの文字を押下し、インターネットゲートウェイのコンソールに移動します
そして、「インターネットゲートウェイの作成」ボタンを押下し、作成画面で適当な名前をつけて作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/a0345f81-e813-4f72-249a-7a10e7b9c289.png)
成功すればリストに作成したインターネットゲートウェイが表示されていると思うので、
選択してアクションというボタンを押下します
そうするとVPCにアタッチという欄があるのでクリックして、さきほど作成したVPCをアタッチします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/9194d3fa-4503-62cb-4680-76f34e3dbe4c.png)
次に、ルートテーブルのコンソールに戻り、
さきほど作成したルートテーブルを選択し、同じようにアクションボタンを押下します
そしてルートの編集をクリックします
![ルートテーブル1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/f93a5ed5-7da7-d7c9-55f8-75389dbb5333.png)
ルートの追加をクリックし、送信先を```0.0.0.0/0```、ターゲットにインターネットゲートウェイを選択し、先程作成したインターネットゲートウェイを選択して、保存します
![ルートテーブル2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/458d5a28-d7c1-feb6-50b0-b9b78c8ac833.png)
サブネットにも同様にルートテーブルを紐づけます（~~やることおおいなあ~~）
サブネットのコンソールに行き、作成したサブネットを選択、アクションを押下してルートテーブルの関連付けを編集を押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/36418e1d-89fc-4d85-05c3-9f84436535db.png)

そこで先程のルートテーブルを選択して保存します
![スクリーンショット 2022-11-02 164125.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/49a91552-fd3b-dd77-251a-d19cb38274a8.png)

これでVPC周りの作成は完了です、ああ長かった

### EC2の構築
検索なりタブから探すなりしてEC2のコンソールに移動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/3cf74ab7-5308-abda-814f-5055fbf824b0.png)
オレンジの「インスタンスを起動」というボタンを押下すると作成画面に移ります
お財布と相談しながら好きな構成で作成します
私はインスタンスタイプがt2.microでAMIはRed Hatにしました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/7f1b038f-3ce4-a980-e418-f792563752f5.png)

セキュアにEC2にアクセスするためのキーペアを新しく作成するとファイルがDownloadされるのできちんと.ssh以下にしまっておきましょう
ネットワーク設定は編集ボタンをクリックして、先程作成したVPCとサブネットを設定します
![スクリーンショット 2022-11-02 170610.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/34ab615f-0132-576f-d877-8b0a7be10beb.png)

セキュリティグループはSSH接続のみ想定なのでタイプはSSH、Source typeを自分のデバイスのIPアドレスにしておきます
![スクリーンショット 2022-11-02 170730.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/0c13ddec-baa4-7217-108e-3963e78a11c2.png)

他はいい感じに設定して作成ボタンを押します
リストにある作成したインスタンスの状態が実行中になれば構築完了です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/0d0e472e-f392-4747-6fbe-8bed6f1047df.png)

早速SSH接続してみましょう、リストにある作成したインスタンスを選択し、接続ボタンを押下します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/90d9e9c2-df47-ce47-d39f-36250c4f2754.png)

SSH クライアントの欄をクリックし、手順に従いながら接続します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/4c433bca-da8a-9aed-3127-7cc2c05c3ee1.png)
PowerShellなりなんなりで以下のコマンドでSSH接続します、ヤー！
```
C:\Users\◯◯◯> ssh -i (先程Downloadしたキーのファイル) ec2-user@(インスタンスのパブリックIPアドレス)
```


#### だめでした
damedeshita
```
ssh: connect to host (インスタンスのパブリックIPアドレス) port 22: Connection timed out
```
なんどやってもSSH接続できないのでググる
どうやらパブリックIPアドレスの設定を無効化してEC2を構築してしまったようです
既に構築したインスタンスに後から付与することはできなそうなので、設定を有効にして改めて構築…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/7d0a9db9-f4bd-b4ba-eab3-288b29cc0373.png)
そしたら入れました、やったね
```
[ec2-user@ip-◯◯◯ ~]$
```

### RDSの構築
#### DB用セキュリティグループの作成
RDSを構築する前にDBサーバー用のセキュリティグループを作ります
EC2のコンソールからセキュリティグループのコンソールに移動して、セキュリティグループの作成ボタンを押下し、作成画面に行きます
VPCは作成したもので、アウトバウンド（サーバー内から外）のルールは、タイプがPostgreSQL（任意のDB）、送信先はEC2の作成時に作成したセキュリティグループに設定して作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/2d600d39-8504-a504-c25a-727d6a4d3df8.png)

#### サブネットグループの作成
次にDB用のサブネットグループを作成します
簡単に言うとそのDBを置くサブネットの集合を定義することをします
マルチAZにするので、一番最初に作成したサブネットのAZとは違うAZのサブネットをもう一つ作成しておきましょう
検索なり何なりしてRDSのコンソールに移動します
左端のサブネットグループを選択し、DBサブネットグループの作成を押下すると作成画面に移ります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/04373847-dbe7-5817-1ebb-d092e766e1c0.png)
最初に作成したVPCを設定し、違うAZのサブネットを2つ以上選択して作成します
（2つ以上選択しないと怒られます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/de5fce4b-2e43-0cc2-c720-4be28caaa7da.png)

#### DBの作成
RDSのコンソールのトップ画面からデータベースの作成をクリックすると作成画面に移ります
Postgresを選択し、その他いい感じに設定します　AWSの学習用なので、構成は最小限です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/154c4fd1-595b-554f-df33-b04158e8469c.png)
接続の箇所はEC2コンピューティングリソースに接続を選択し、先程作成したEC2インスタンスを設定します
VPCや、一つ前に作成したDBのサブネットグループも設定して作成ボタンを押します
データベースのリストに実行中とあれば構築完了です（結構実行中になるまで時間かかりました）
![スクリーンショット 2022-11-02 180222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626031/35302d81-57ff-7f4e-d626-b85d8a17f6b6.png)
EC2から接続してみましょう
EC2にpsqlをインストールします
```
sudo yum search postgresql
sudo yum -y install postgresql.x86_64
```
RDSに接続します
エンドポイントはリストの作成したDBをクリックすると見ることができます

どうやら成功したようです
（EC2からはわからなかったのですが、RDSの様子をコンソールから見ると接続数1になっているのでOKでしょう（適当））
```
psql -h (エンドポイント) -U (ユーザ名)
```
```
postgres=#
```

## おわりに
ほぼボタンをポチポチ押していくだけのように見えて、知識が相当量要求されるなあという感想
業務などに絡めていくにはより知識を蓄積していかないといけないと痛感しました
特にIPアドレス周りは全く知識がなく、それが多く要求されるのが一番最初のVPC周りの構築で、最初の最初で躓くわけにはいかないので、より意識した学習が必要だと思いました　また、AWSの資格の存在意義を理解しました

学習計画では、ここからELBやS3も構成に入れてLv.1達成となっているので、引き続き実際に触りながら学習していきたいです
（構築したらまた記事にしようと思っております）

## 余談
ググりながら構築してましたがAWSのUI変わりすぎてネットにあるhow to全然参考になりませんでした