EC2、RDSによるアプリケーションサーバー環境構築


概要

忘れないように、EC2、RDSによるサーバー環境構築の手順をアウトプット。下記の構成にする。

VPC(Virtual Private Cloud)の作成

VPCは仮想的なネットワークで、大きな箱のイメージ。後々、この中にEC2やRDSインスタンスを配置。

IGWの作成とアタッチ

インターネットの玄関口をVPCにアタッチ。

サブネットの作成

用途別(EC2・RDS)サブネットの作成

VPCは大きな箱であるのに対し、サブネットはその中にある小さい箱のイメージ。今回は下記のサブネットを作成。
今回、シングルAZ配置としてRDSインスタンスは1つのみ作成。しかし、なぜか2つの異なったサブネット(しかも異なったAZのもの)が後のRDSの設定で必要になる(マルチAZ配置を見据えた構成?)。

※:Availability Zone:データセンター群

  • WEBサーバー用(Publicになる予定):AZ→ap-notrheast-a
  • RDS用①(Privateになる予定):AZ→ap-notrheast-a
  • RDS用②(Privateになる予定):AZ→ap-notrheast-c

※PublicかPrivateは↓のルートテーブルで設定。


※DB用の2つ目のサブネットはスクショ省略。

ルートテーブル(サブネット毎の通信先)の作成

  • rtbはサブネット毎にどこに通信ができるかを定めたもの。
  • VPC→サブネットを作ったらルートテーブルが自動でできる。今回自動作成されたルートテーブルには合計3つのサブネットが割り当てられている。
  • IGWがrtbに関連づけられていないので、このままではすべてPrivateサブネットになる(上の画像)。
  • そのため、EC2用にrtbを新たに作成。IGWをルートに追加する。これでEC2用サブネットはPublicサブネットになる(下の画像)。

セキュリティグループの作成

  • EC2やRDSインスタンスに発信、着信の許可リスト(通信方法やポート番号など)を設定する。
  • webサーバー用インバウンドルール:SSH(ポート範囲22)、HTTP(80)、HTTPS(443)を許可
  • RDS用インバウンドルール:MySQL(ポート番号3306)を許可、ソースはWebサーバー用のセキュリティグループIDを選択
  • アウトバウンドは全てのトラフィックを許可 ※webサーバーのスクショではTomcatのために8080ポートも許可してある。

サーバー用EC2インスタンスの作成

ssh接続に必要なキーペアの作成

ローカルの任意の場所に保存しておく。自分のPCからsshでEC2インスタンスに接続するのに必要。

EC2インスタンスの作成(詳細)

  • AmazonLinux2
  • t2.micro
  • 作成したEC2用のセキュリティグループを設定
  • あとは適当

ElasticIPの作成と割り当て

  • EC2インスタンスに割り当てられるパブリックIPアドレスは、デフォルトでは動的のため、起動しなおすと値が変わってしまう。
  • そのため、Elastic IPアドレスを設定すると固定のパブリックIPアドレスとすることができる。

今回の場合、EIPを割り当てたEC2が起動中は無料だが、逆にこのEC2を止めるとお金が発生するらしい。。。
https://dev.classmethod.jp/articles/cost-of-eip/

RDSインスタンスの作成

RDS用のサブネットグループを作成

VPCの中でどのサブネットたちがDB用なのかを設定する必要があるらしい。設定画面で、作成したVPCと下記のサブネットを選択しグループを作成。
このグループは後のRDSインスタンス作成で必要になる。

  • RDS用①(Private):AZ→ap-notrheast-a
  • RDS用②(Private):AZ→ap-notrheast-c

RDSインスタンス作成(詳細)

・MySQL(8.0.19:自分の場合)
・無料利用枠、マルチAZ配置にしない。
・DB用のサブネットグループを指定
・DB用に作成したセキュリティグループ選択
・作成したVPC選択
・パブリックアクセス可能→なし
・データベースポート:3306
・バックアップ保存期間:1日
・アベイラビリティーゾーン:指定無し(今回はap-northeastのaかcどっちかになるっぽい。指定しても良い)
・ユーザー名、パスワードは忘れないように(接続で必要)。

EC2へSSHで接続確認

自分のPCのキーペアがあるディレクトリに移動。あとはターミナルでEC2コンソール画面通りにコマンドを実行。

EC2からRDSインスタンスへ接続確認

EC2へMySQLをインストール

こちらの記事の「インストール」の項目を参考にさせていただきました(こちらの記事はMySQL5.7ですが、今回は8.0なので適宜読み替え)。インストール、自動起動設定まで終わらせておく。
AmazonLinux2に標準で入っているmariaDBは自動でMySQLと入れ替わるとのこと。

$ yum info mysql
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
エラー: 表示するパッケージはありません

#mysql8.0リポジトリの追加(このリポジトリに5.7も含まれています)
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

#mysqlインストール
$ sudo yum install mysql-community-server -y
$ mysqld --version
mysqld  Ver 5.7.22 for Linux on x86_64 (MySQL Community Server (GPL))

#自動起動設定
$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service
$ systemctl status mysqld.service

接続確認

mysql -h {RDSのエンドポイント} -P 3306 -u {RDSインスタンスのユーザー名} -p
設定したパスワードを入力。

参考

大きな流れはこちらを参考にさせていただきました。ありがとうございました。
https://tech.recruit-mp.co.jp/infrastructure/retry-aws-minimum-vpc-server-environment/