LoginSignup
2
1

AWS学習ステップを使用した構築のお勉強④

Last updated at Posted at 2023-04-27

はじめに

そういえば基本的なサーバの仕組みとか構築って知識だけあってやったことないなあと思いました。。(上の方に言うと驚かれますがマジでオンプレ触ったことないです)

そこで見つけたル〇コンさん。(Twitterこちら
直接お会いしたことないので名前はお伏せしますが、おそらく素晴らしいお方。
しかもなんと、AWS学習ステップ大全 AWS構成図集というのを無料で配布しているではありませんか!!
これは活用するしかない!!ということでAWS構成図集をお借りしてお勉強していきます!!

AWS学習ステップ大全 AWS構成図集とは

こんな方にオススメだそうです。今の僕にピッタリ。

  • AWSを勉強したいので、オススメの学習ステップを教えて欲しい
  • AWSはEC2/RDS/ELBなど多すぎて、どれを組み合わせたらいいか分からない
  • 簡単な構成から難しい構成まで、難易度別に構成図を知りたい
  • HTTPSや独自ドメインなどは実装しつつ、なるべくお金がかからない構成が知りたい
  • 転職応募時に「未経験なのにレベル高い」と刺さるレベルの構成を知りたい
  • ポートフォリオと一緒に提出する構成図の参考例が知りたい
  • 学んだスキルが現場で通用するのか=実際の現場ではどういう構成が多いのか知りたい

今回は④をやるよ

前回構築したものにデータベースを追加します!
いよいよいい感じになってきた笑笑
ただ、今回苦労したのはPHPのインストールとか、DBの情報取得とか、、、
やっぱり実際に構築してみてわかることって多いんだね笑笑

アーキテクチャはAWS構成図④を参考に!!

PHPのインストール

前回構築したWebサーバにPHPをインストールします!
DBを使用して動的なWebサイトを作成するためにPHPが必要なんですね。

yum install php

インストールが始まらない

なぜだ、、

そんなときは

セキュリティグループやACLを見直そう!!
自分の場合0byteからインストールが進まなかったから、おそらくネットワークに原因があると見た。

これだ

Webサーバを構築したサブネットのインバウンドを自分のPCからのみにしていたのを忘れていた、、
12.PNG
一時的にインバウンド許可しておきます。
1.PNG

再インストール

# yum install php
Last metadata expiration check: 12:34:21 ago on Sun Apr 16 14:02:02 2023.
Dependencies resolved.
...
Complete!

動作確認

/var/www/html配下にindex.phpを作成します。

index.php
<?php phpinfo() ?>

{ドメイン名}/index.phpで検索!
4.PNG

RDS(MySQL)の構築

RDSを構築していきます。
使用するDBはMySQLです。ここは別に好みで良いかと思います。

Privateサブネット追加

DBは基本的にPrivateサブネットに構築します。ネットワークにさらけ出されると何されるかわからないですからね笑笑
後でサブネットグループを組まないといけないので2つのAZに作成します。
5.PNG
10.PNG

ルートテーブルの設定

Privateサブネットなのでインターネットゲートウェイにはつながりません。
6.PNG

ACLの設定

DBを構築するので前回とは少し異なります。
インバウンドにはポート3306を許可します。送信元はできるならWebサーバと管理用サーバに絞った方が理想ですね。
7.PNG

セキュリティグループの設定

これ忘れるとWebサーバからRDSに接続できないですよ笑笑
RDSに設定するセキュリティグループのインバウンドにWebサーバからの許可を入れましょう。
8.PNG

サブネットグループの設定

RDSを構築する際に、可用性とかの関係で2つのAZ以上のサブネットが必要になります。
先ほど作成したサブネットを設定しましょう。
11.PNG

RDS構築

MySQLを選択しました。
12.PNG

後はセキュリティグループとサブネットグループをさっき設定した奴にして、他は無料で済むように最小構成で構築します。
13.PNG
14.PNG

RDSでDB作成

他に管理用のサーバ立てるの面倒なので、WebサーバからRDSに接続してDB作成していきます。

MySQL Clientのインストール

EC2からMySQLサーバに接続するために必要になりますね。

#yum install -y mysql

インストールできない

なん、、、だと、、、
ここ結構長くつまずきました。
対処したのは以下2点です。

  1. キャッシュのクリア
  2. リポジトリの指定

キャッシュのクリア

結局どの機械もこれなんですね笑笑

#yum clean all

リポジトリの指定

これに関してはよくわかんないんですけど、僕はこれで直りました。
参照してほしいリポジトリを参照してくれていないようです。

yum --enablerepo=mysql57-community install mysql-community-server

RDSに接続

接続してみます。
RDSのエンドポイントはダッシュボードで確認しましょう。

$ mysql -h {RDSエンドポイント} -u {DBユーザ名} -p {パスワード}

繋がらない

またか。
Privateサブネットのアウトバウンドが無かったようです。
15.PNG

再接続

キタ

$ mysql -h {RDSエンドポイント} -u {DBユーザ名} -p {パスワード}
mysql>

テーブル作成

簡単なDB作成しておきます。

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> use test;
Database changed

mysql> create table temp(id int, name varchar(10));

mysql> insert into temp values(100, "bakuchiku")

Webサーバ⇔DBで動的サイト作成

phpを利用してDBの情報を取得し、Webサイトに表示します。

DB情報取得ページ作成

ちょーー簡単なものをphpで作成しました。
DBから情報取得して表示するだけです。

index.php
<?php

try{
        $pdo = new PDO(
                "mysql:{RDSエンドポイント};dbname={DB名}",
                "{ユーザ名}",
                "{パスワード}",
                [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
        );

        $stmt = $pdo->prepare("select * from temp");

        $stmt->execute();

        foreach($stmt as $row){
                var_dump($row);
        }
}catch(PDOException $e){
        echo $e->getMessage();
}

Webサーバに接続

Webサーバに接続してみて、先ほど作成したテーブルの情報が取得できれば完了ですが、、
なんと、、
18.PNG

could not find driverの解決

PHPでDBに接続するにはPDO driverというドライバが必要だそうです。(知らんがな)
インストールしていきます。あ、インストールエラー起きたらとりあえずキャッシュのクリアしましょう。

#yum -y install php-pdo
#yum -y install php-mysql

再接続

次はなんだ、
19.PNG

コードの見直し

DBにちゃんと接続できていないようです。
以下2点追記します。5行目のみ変更です。

  1. RDSエンドポイントの前に"host="を追記
  2. 文字コード指定
index.php
<?php

try{
        $pdo = new PDO(
                "mysql:host={RDSエンドポイント};dbname={DB名};charset=utf8",
                "{ユーザ名}",
                "{パスワード}",
                [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
        );

        $stmt = $pdo->prepare("select * from temp");

        $stmt->execute();

        foreach($stmt as $row){
                var_dump($row);
        }
}catch(PDOException $e){
        echo $e->getMessage();
}

再再接続

キタ
20.PNG

課金対策

次回以降はサーバはコンテナに代わり、Cloud FrontとS3でWeb画面表示したりするので、今回までに作成したものは消してしまいます。
特にALBとかRoute53はほっとくといかれる可能性があるので即刻消してしまいます笑笑
個人の環境なので、
21.PNG

おわり

DB周りは初めて触る内容が多くてだいぶ手こずりました。。
やっぱり実際に触らないとわからいことが多いですね。笑笑
RDS自体の構築は5分もあれば終わるのに、その他の作業で数時間いかれました。。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1