Help us understand the problem. What is going on with this article?

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

概要

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

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は↓のルートテーブルで設定。
サブネットserver用.png
サブネットDB1.png
※DB用の2つ目のサブネットはスクショ省略。

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

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

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

  • EC2やRDSインスタンスに発信、着信の許可リスト(通信方法やポート番号など)を設定する。
  • webサーバー用インバウンドルール:SSH(ポート範囲22)、HTTP(80)、HTTPS(443)を許可
  • RDS用インバウンドルール:MySQL(ポート番号3306)を許可、ソースはWebサーバー用のセキュリティグループIDを選択
  • アウトバウンドは全てのトラフィックを許可 セキュリティグループ:サーバー用.png セキュリティグループ:DB用.png ※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接続その2.png

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
設定したパスワードを入力。
スクリーンショット 2020-09-03 13.14.43.png

参考

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

fftcy-sttkm
ITエンジニアではありませんが、素人なりに仕事や趣味を通して学んだことを記録していきます。→2020/10よりITエンジニアへ転職
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away