Server Build Exercises on AWS (Amazon Web Services) 2022 edition

EC2上にシステム一式を構築

【補足】 yumコマンドを使って新しいソフトを入れる方法や systemctlコマンドとは何か? については付録を参照してください。 nginxの設定方法はこちらを参照

いままでに構築したものを連動させます。 すでにインストール済みのかたは先へすすんでください まだインストールしていない方は、以下の3つをインストールしてください。

  1. nginxをインストール
  2. mysqlをインストール
  3. www.pyをインストール

各インストールでは単体の動作確認だけをしました。 連携には、もう少し追加の設定が必要です。 それを本節で行います。

連携のための変更点 nginx

リバースプロキシ(nginx が 80/tcp で受け 8080/tcp の www.py へ転送する)の設定を /etc/nginx/conf.d/ingress.conf ファイルに書きます(ingress.conf ファイルを作成します)

次のスクリプトが実行してくれます

cd 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts

sh install.sh

このスクリプトは次の2つの処理をしています ( nginxの設定方法はこちらを参照 )

  • リバースプロキシーの設定を投入
  • nginx を再起動

連携のための変更点 mysql

  • mysql サーバ自体の設定変更はありません
  • 次の www.py 変更後、データの投入(データベースとテーブルの作成)を行います

連携のための変更点 www.py

/var/www/libexec/www.py ファイルで、次の二箇所を変更し、 www.pyを再起動してください

(1)

MYSQL_PASSWORD  = '1qaz2wsx!X'

EC2上にmysqlをインストールする節で再設定したパスワードに変更してください

(2)

MYSQL_HOST      = 'mysql'

MYSQL_HOST      = '127.0.0.1'

に変更してください。

変更後 systemctl で www.py を再起動してください

sudo systemctl restart www.py

データベースの作成

mysql クライアントを起動し、データベース test を作成してください

mysql -u root -h 127.0.0.1 -p
Enter Password:

    ... 省略 ...

mysql> create database test;

    ... 省略 ...

mysql> quit

テーブルの初期化

install.shを実行したディレクトリに db-init.sh があります。これを実行してください

ねんのため最初から書くと、 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/ ディレクトリで db-init.sh を実行です

cd 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/

sh db-init.sh

実行すると

(debug) connected ? = True

とデバッグ情報が表示されるとおもいますが無視してください

作成したテーブルの確認

作成したテーブルの内容を確認するには、 同じく 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/ ディレクトリで db-dump.sh を実行してください

cd 03_ec2/03-04_ec2-nginx-web.py-mysql/scripts/

sh db-dump.sh

実行すると

(debug) connected ? = True
(debug) SELECT * FROM shop_menu

id:1 name:beer price:200
id:2 name:water price:100
id:3 name:水 price:100
id:4 name:お茶 price:100
id:5 name:お菓子 price:100
id:6 name:アイス price:30

とデバッグ情報つきでテーブルが表示されるはずです

ローカルで www.py + mysql を動作確認

では、検索をかけてみましょう

curl -X POST -d key=water http://127.0.0.1:8080/shop.html

これは「ブラウザの検索窓で入力」と同じ動作を、 curl コマンドを使いコマンドラインから実行しています。 実行内容は次のとおりです

  • 通信する先はアドレス 127.0.0.1 ポートが 8080/tcp
  • HTTP プロトコルで POST メソッド
  • POSTで送るデータは変数 key、その値が water

次のような表示が出るはずです

<p>(debug) [POST response] search key = water

<p>商品 <br>water の価格は 100 円です
<hr>ご来店おまちしております

ローカルで nginx + www.py + mysql を動作確認

curl -X POST -d key=water http://127.0.0.1:80/shop.html

も実行していましょう。 これは3つのプロセスが連携している状態の確認です。 次のように問い合わせています

curl -> nginx -> www.py -> mysql

上と同じ表示... water の価格は 100 円です ...が出ましたか?

ブラウザからの動作確認

では、いよいよ手元のPC(つまりインターネット)からブラウザで動作確認してみましょう

2ステップ必要です

  1. セキュリティグループの設定を変更し、 世界中どこからでも HTTP を許可してください (HTTP つまり 80/tcp をソースIPアドレス = 0.0.0.0/0 から許可)。 AWS用語ではセキュリティグループの設定と呼びますが、 ようするにフィルタです
  2. ブラウザでの動作確認

セキュリティグループを設定したら、 EC2のパブリックIP(の 80/tcp)に対し、手元のPCのブラウザでアクセスしてみましょう

http://パブリックIP/

へアクセスすると

Welcome to our server exercise program !

と表示されたでしょうか? (注: この画面を返しているのは www.py です。 nginx -> www.py 部分はOKと確認できましたが、 この段階では mysql と連携できているかは不明)

最後に

http://パブリックIP/shop.html

にアクセスしてください。 前回の演習でつかった検索画面がでるはずです。 なにか検索してみてください、答えが返りましたか? (注: この画面は mysql にクエリをした結果を www.py が返し、それをさらに nginx が返しています。 これが動けば nginx + www.py + mysql の3つが連携できています)

Last updated on 5 Dec 2021
Published on 5 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.