前回の記事
https://qiita.com/shinichi_yoshioka/items/7226b9ebaad06c569c80
前回の続きをやっていく。
APサーバとDBサーバはプライベートサブネットに構築する。
プライベートサブネット配置のEC2インスタンス作成にあたって、
"パブリックIP自動割り当てを無効"にしたが
TomcatやMySQLをインストールするのに一時的にインターネットに繋ぎたい。
そもそもプライベートサブネット配置のEC2インスタンスにssh接続できなくて詰んでいる。
対処法を調べたところ、3通りぐらい把握した。
①ElasticIP(EIP)を割り当て+サブネットのルートテーブルにInternet-GWへのルーティング追加
→これは実質パブリックサブネットと変わらない。
②前回構築したWEBサーバを踏み台としてアクセスする。
→SSH接続はできるが、TomcatやMySQLをインストールするのにWEBサーバから移動するのが面倒。
③NATゲートウェイをパブリックサブネットに配置する。
→これが一番良いやり方。
ちなみにNATゲートウェイの料金は、東京リージョンで1hあたり0.062USDらしい。
https://aws.amazon.com/jp/vpc/pricing/
施行錯誤の環境構築で時間がかかると思ったので、今回は①を選んだ。
(2台目のDBサーバを構築する際は、NATゲートウェイを使おうと思う)
EIPはAWSアドレスプールから払い出される固定のパブリックIPのこと。
セキュリティグループも一時的に開けないとダメだ。
構築が落ち着いたら、封鎖するので許してほしい。
◆EIPの作成とアタッチ
サービス[VPC]のElasticIPから[Elastic IPアドレスの割り当て]から、
AmazonのIPv4アドレスプールから割り当てを行う。
割り当てられたアドレスをクリックすると、EC2インスタンスに関連付けできる。
ちなみにEIPはEC2インスタンスにアタッチ中は課金されないが、
EIPの払い出しだけしていてEC2にアタッチされていないと課金されるらしい。
ここでは、APサーバとDBサーバそれぞれにEIPを割り当てる。
こんな感じ。
とりあえず、各EC2インスタンスにSSH接続できることは確認した。
AP/DBサーバの構築後処理は以下。
①ルートテーブルからインターネットゲートウェイを削除し、最低限に絞る
②セキュリティグループを必要なプロトコルのみに絞る
◆Nginxのインストール
対象:WEBサーバ
sudo su -
yum update -y
yum install nginx -y
ここでエラーが。
どうやら、AmazonLinuxはインストール方法が違うらしい。
以下コマンドでインストールが開始されたことを確認した。
amazon-linux-extras install nginx1 -y
新しくサービスをインストールしたときの3点セット
systemctl enable nginx.service ・・・サービスの自動起動の有効化(再起動後もサービスを起動する)
systemctl start nginx.service ・・・サービスの起動
systemctl status nginx.service ・・・サービスのステータス確認
ステータスがactive(running)になっていることを確認した。
ブラウザに以下のように入力し、Nginxのテストページが表示されることを確認した。
http://WEBサーバのパブリックIPアドレス
◆Tomcatのインストール
対象:APサーバ
同様にtomcatのインストールと起動をする。
sudo su -
yum update -y
yum install tomcat -y
systemctl enable tomcat.service
systemctl start tomcat.service
systemctl status tomcat.service
tomcatのサービスは正常に動いているが、Web App Containerとしての正常性確認のやり方が不明。
JDBCドライバーをインストール後に再度、正常性を確認することにした。
過去に自宅VirtualBoxにTomcatを入れて正常性確認をしたが、これはApache Tomcat(WEBサーバ)であって
上記のWeb App Containerとは違う認識。
◆MySQLのインストール
対象:DBサーバ
同様にMySQLをインストールする。
sudo su -
yum update -y
yum install mysql -y
Mysqlをインストールしようとしたら、MariaDBが入ったのだが・・・。
他のEC2インスタンスを確認したところ、Amazon Linuxにはデフォルトでmariadb-libs-5.5.68-1.amzn2.x86_64が入っていて
MySQL互換のMariaDBをインストールしてしまった。
MySQLとMariaDBで競合をおこさないようにアンインストールしておく。
yum remove mariadb-libs -y
rpm -qa | grep -i maria
何も表示されないことを確認した。
次にMySQLをyumでインストールするため、MySQL公式のリポジトリを追加した。
yum localinstall http\://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm -y
yum info mysql-community-server ・・・MySQLのyumリポジトリ追加を確認
yum -y install mysql-community-server ・・・mysqldのインストール
mysqld --version
他のサービスと同様にmysqld.serviceが正常に動いていることを確認した。
systemctl enable mysqld.service
systemctl start mysqld.service
systemctl status mysqld.service
MySQLのrootユーザの初期パスワードは、/var/log/mysqld.logに記載されている。
cat /var/log/mysqld.log | grep temporary
一時的なパスワードなので、rootユーザにログイン後に任意のパスワードに変える。
mysql -u root -p
コロンの後ろの白塗り部分に一時パスワードが記載されているので、rootユーザにログイン。
set password for root@localhost=password('ここに新しいパスワード');
Query OKと出れば変更完了だが、初期のパスワードポリシーが結構厳しめで
パスワードは大文字・小文字・数字・記号とかにしないとはじかれると思う。
パスワード変更後はいったんMySQLから抜けて、新パスワードでログインできることを確認した。
長くなってしまったので、第2回はここまで。
久々に有意義な休日を過ごせたと思う。(いつもはゲームして、YouTube見て、見てるうちに寝ちゃって1日終わる)
次回は、APサーバにMySQLドライバーを入れて、WEBサーバとAPサーバとDBサーバを連携したい。
イメージでは、WEBサーバのnginx.confにリバースプロキシの設定を入れて、
Tomcatのserver.xmlにDBサーバのアドレスを記載すれば
連携できるのではないかと思っている。
正直ここから先は何もわかっていないので、次回の記事は結構先になりそうだ。
つづく
https://qiita.com/shinichi_yoshioka/items/5253fd442376c6f222b2