#概要
忘れないように、EC2、RDSによるサーバー環境構築の手順をアウトプット。下記の構成にする。
#VPC(Virtual Private Cloud)の作成
VPCは仮想的なネットワークで、大きな箱のイメージ。後々、この中にEC2やRDSインスタンスを配置。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F250449%2Fb5d28641-e011-155d-9c06-9dff5c31e7c4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c8150732f974336d5e5b34c91171b295)
#IGWの作成とアタッチ
インターネットの玄関口をVPCにアタッチ。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F250449%2Fba7e4a8a-0a72-5ad4-2bbd-68ae15f84f68.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=534148e118eb6d497f9a50d6e24c4f20)
#サブネットの作成
##用途別(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
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F250449%2F20ec79c7-aa4e-956e-1178-d57d1b34a9f3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e17e75ffa62e4be6d7e96782699a08e3)
##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/