見出し画像

AWSのEC2とかRDSを使ってみる

お久しぶりです。
本日はEC2とRDSを使用してサーバーを構築する入門レベルの内容をお伝えします。
以前は主にサーバーレス環境で開発を行ってきましたが、今回はEC2を使用してサーバーを操作する基礎的な部分に触れていきたいと思います。
以下が今回の作業の概要です。

画像1

本日の作業の流れは以下の通りです。

1.VPS周りを設定する

1-1.まずはVPCを作成します

画像2

1-2.サブネットを作成する

EC2とRDSの2つが必要なので、合計で3つのリソースを作成します。

● 作成したサブネット一覧
①ec2-rds-app-subnet
②ec2-rds-db-subnet
③ec2-rds-db-sub-subnet

画像3

1-3.インターネットゲートウェイを作成

画像4

1-4.作成したインターネットゲートウェイをVPCにアタッチ

画像5

2.EC2にサーバーを立てる

EC2はAmazon Elastic Compute Cloud (Amazon EC2)の略称であり、クラウド上にサーバーを作ることができるサービスです。
サーバーのスペックを自由に決めて構成することができますし、さまざまなミドルウェアを簡単に組み合わせてサーバー環境を構築することも可能です。

まずはAWSのコンソールからEC2を選択し、AMIを作成します。
お試しの場合はどのAMIでも構いませんが、無料枠の適用されているAmazon Linux 2 AMIを選択しておくことをおすすめします。

画像6

選択後、次の画面に進みます。
そこで、無料枠の適用されているt2.microインスタンスタイプを選択します。
EC2の作成時には、先程作成したVPCとサブネットを選択するようにします。

画像7

セキュリティグループも一緒に作成してしまいましょう。

2-1.セキュリティグループの設定を行う。

そもそもセキュリティグループって何なのかという話ですが、セキュリティグループはAWSの標準的なファイアウォール機能です。
セキュリティグループでは、インバウンドグループとアウトバウンドグループという2つのグループがあります。

● インバウンド:デフォルトですべて拒否。
未設定の場合通信は全て遮断し、許可した通信のみを通過させます。

● アウトバウンド:デフォルトですべて許可
自動的にデフォルトのセキュリティグループが適用されます。 

画像8

● インバウンドルール
HTTP:0.0.0.0を設定(全公開)
クライアント側からアクセスするのでHTTPを設定。

SSH:自分のIPを設定
自分のPCからサーバーにSSH接続するのでSSHを設定。

● アウトバウンドルール
デフォルトのまま

その後も細かく色々な設定ができますが、今回はデフォルトのままでAMIの作成を進めます。
簡単ですがこれだけでEC2が作成されました。

SSH接続のためには、keypair.pemというキーペアファイルが必要になりますので、キーペアの作成とダウンロードを忘れずに行いましょう。

4.RDSでDBを作成

次にDBを作成します。

4-1.サブネットグループの作成

その前に、RDSの作成にはサブネットグループの作成が必要ですので、コンソールのサイドバーからサブネットグループの作成を行います。

画像9

RDSでは、アベイラビリティーゾーンが2つ必要ですので、2つを選択し、事前に作成しておいたRDS用のサブネットを2つ選択して作成します。

4-2.RDS用のセキュリティグループを追加

RDSへの直接アクセスを制限するため、セキュリティグループに設定を追加し、EC2からのみのアクセスを許可します。
ソースには作成したEC2のセキュリティグループを指定しましょう。
セキュリティグループの設定を行わないまま運用してしまうと、DBのパスワードなどが漏洩した場合に直接DBにアクセスできるインシデントが発生する可能性がありますので、EC2サーバーからの通信のみを許可しましょう。
アウトバウンドルールはデフォルトのままで問題ありません。

画像10

いよいよ、AWSのコンソールからRDSを選択し、データベースの作成に進みましょう。
今回はMySQLのデータベースを作成してみます。

画像11

DBのマスターユーザー名、マスターパスワード、DBインスタンスサイズ、およびストレージなどの設定を決めていきましょう。

画像12

注意点ですが、MySQLへの接続ができるようにするためには、パブリックアクセスを「あり」に設定する必要がありますので、そのように設定しましょう。

最初に作成したVPCと、先程作成したサブネットグループとセキュリティグループを設定します。
これにより、RDSインスタンスが正しくネットワーク内に配置され、必要な通信が許可されます。

画像13

ここで1点注意があります。
DB作成時に「Cannot create a publicly accessible DBInstance. The specified VPC does not support DNS resolution, DNS hostnames, or both. Update the VPC and then try again」というエラーメッセージが表示された場合、VPC側のDNSを有効にする必要があります。

VPC側のDNSを有効にしておかないとDBの作成が行えないため、事前にVPCでDNSを有効にしておく必要があります。

作成が完了したら、DBのエンドポイントをメモしておきましょう。

画像14

簡単ですが、これでRDSでのDB作成が完了しました。
準備が整ったので、まずはEC2へのSSH接続を試してみましょう。
SSH接続を行うために、事前にローカルPCのconfig設定を行います。

$ cd ~/.ssh

EC2作成時にDLしたec2_keypair.pemを配置する

$ vi config

```
Host ec2 // ssh ec2のように接続できる任意名を入れる。
  HostName // EC2のホスト名 → EC2インスタンスのパブリック IPv4 DNSが入る。
User ec2-user // デフォルトのユーザー。
IdentityFile ~/.ssh/ec2_keypair.pem // 配置したpemを参照。
```

これでSSH接続の準備ができました。

$ ssh ec2

sshコマンドを入力すると、EC2サーバーにSSH接続できるようになっています。
ec2-userでSSH接続した後、都度rootユーザーに切り替えることもできますが、毎回行うのが面倒です。
そのため、rootユーザーでのSSH接続を可能に修正します。

// EC2に入る
$ ssh ec2

// rootユーザーに切り替える
$ sudo su -

// rootのauthorized_keyをバックアップ
$ cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bk

// ec2-userのauthorized_keyをroot側のauthorized_keyに上書き
$ cp /home/ec2-user/.ssh/authorized_keys /root/.ssh/authorized_keys

// SSHサーバを再起動
$ sudo service sshd restart

$ exit;
$ cd ~/.ssh

$ vi config

```
Host ec2
  HostName // EC2のホスト名
User root // ← rootに変更する
IdentityFile ~/.ssh/ec2_keypair.pem
```

これにより、SSH接続時のデフォルトユーザーをrootユーザーとして接続できるようになりました。

5.EC2からRDSに接続する

$ sudo yum install mysql // MySQLをインストール
.
.
.
Complete!

mysqlのインストールが完了しました。

$ mysql -u 設定したユーザー名 -p -h 作成時にメモしていたRDSのエンドポイントを張り付け

Enter Passwordと表示されるので、RDSデータベース作成時に設定したパスワードを入力します。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 5323
Server version: 8.0.20 Source distribution

Copyright (c) 20002018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

これにより、EC2サーバーからMySQLへの接続が確立されました。
その後、このEC2サーバーにNginxやPHPをインストールし、クライアントからMySQLへのデータのCRUD処理を行うことで、Webアプリケーションを作成できます。
比較的簡単に環境を構築できたと思います。
最近のフロントエンドでは、サーバーについてあまり意識しないことが多いですが、こうした基本的なサーバー構築に触れることはエンジニアとして非常に重要です。

それでは。

いいなと思ったら応援しよう!