awsでwebサイト構築②
前回は、パブリック環境を構築
今回はプライベート環境構築
前回でプライベートサブネットは構築してあるので、インスタンス作成から
EC2
IPは192.168.2.10とした
セキュリティーグループで、ポート3306(sql)、ICMPを開けておく
ICMPとは
サーバー間での疎通確認(ping)に使用されるプロコトル
インスタンス作成後、パブリックIPが振られていないことを確認
疎通確認
パブリックサーバーから、pingをプライベートサーバーへ発行
$ ping 192.168.2.10
pingが通れば問題なし
プライベートサーバーへssh
プライベートサーバーは外部とネットワークを繋いでいないので、パブリックサーバーからプライベートサーバーへssh接続
$ scp -i my-key.pem my-key.pem ec2-user@54.150.113.252:~/
コピーされたかはパブリックサーバーの中を確認
my-key.pemがあればOK
鍵ファイルのパーミッションを変更(外部から読み取られるのを防ぐ)
$ chmod 400 my-key.pem
ssh接続試行
$ ssh -i my-key.pem ec2-user@192.168.2.10
接続できればOK
NAT構築
プライベートサーバーにSQL(mariadb)を構築したいが、外部とのネットワークを遮断しているので、yumコマンドでのインストールが今のままではできない
そこで、NAT(network address translation)を使って、プライベート→インターネットへの通信のみ許可する
NATは2つのIFを持っている
1つは外部との接続可能なパブリックIPアドレス
もう1つは、プライベートIPアドレス
プライベートIPアドレスに先ほど構築したプライベートサブネットを設定しておくことで、プライベートサブネット内の外部への通信は、NATのパブリックIPアドレスに変換され、外部と通信することが可能
逆に、外部からはNATが変換したパブリックIPアドレスしか分からないため、プライベート環境へアクセスされることがない利点がある
awsでNATを実現する手段は2パターンある
・NATインスタンス:AMI選定の時点で、NAT機能付きのインスタンスを生成する
・NATゲートウェイ:後付けで指定したサブネットにNAT機能を付加できるが、負荷に応じて利用料金が変わる
今回はNATゲートウェイを使用する
NATゲートウェイの作成
割り当てるサブネットは、パブリックサブネット
新しいElastic IPアドレスを取得
ルートテーブルの編集
VPCIDがパブリックサーバー、かつ、メインが"はい"になっているルートテーブルが変更対象
新しい送信先(0.0.0.0/0)を追加
ターゲットは、先ほど作成したNATゲートウェイIDを指定
疎通確認
プライベートサーバーへsshし、curlコマンドで外部へアクセスできるか確認
レスポンスにhtmlが含まれていればOK
mariaDBインストール
$ sudo yum -y install mariadb-server
サーバー起動時、自動起動するように変更
$ sudo systemctl enable mariadb
サーバー起動
$ sudo systemctl start mariadb
rootユーザパスワードの設定
$ mysqladmin -u root password
ログイン
$ mysql -u root -p
DB/テーブル作成
create database testdb;
create table users(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL);
insert into users (username) values ('uematsu');
ユーザ作成
"testdbへの全てのアクセス権を持つユーザadministraorをパスワード!password0で作成"というクエリ"
grant all on testdb.* to administrator@"%" identified by '!password0';
設定即時反映
flush privileges;
パクリックサーバーから、接続試行。接続できればOK
$ mysql -h 192.168.2.10 -u administrator -p
テーブル情報を表示してみる
(テーブル定義を変更、レコードも追加した)
phpファイル作成し、デプロイ
method名やclass名は適当に
ブラウザで確認
DBの中身を表示できた
awsでwebサイト構築①
書籍でawsの使い方を学んだので、今回は復習も兼ねてメモしながら環境を構築してみる
構成:
リージョン・・東京
使用サービス・・VPC、EC2
EC2で立てるサーバーは2つ
DBサーバー(mariadb)・・プライベート(外部とネットワークを繋げない)
VPCの作成
VPCを利用することで、仮想上にネットワーク環境を構築することができる
VPCは、本番環境のVPC、テスト環境のVPCなどの粒度で作成する
IPv4CIDRは192.168.0.0/16を採用
なので、このVPC環境で使用できるプライベートIPは、192.168.0.0~192.168.255.255までとなる
CIDR表記とは、IPアドレスを2進数で表した時、ネットワーク部のビット長(プレフィックス)を /ビット長 で示す表記
例えば、10.0.0.0~10.255.255.255の場合、10.0.0.0/8(この8がネットワーク部のビット長を示す)となる
サブネットの作成
作成したVPCをさらに分割した名前のことで、複数のネットワーク環境を構築できる。
部署毎にネットワークを構成したい場合や、1Fと2Fでネットワークを別にしたい、一方は外部とネットワークを繋げたくないetc...で使用
割り振るIPは、先ほどのVPCに当てたIPの一部から
パブリック
IPv4CIDR 192.168.1.0/24(192.168.1.0~192.168.1.255)
プライベート
IPv4CIDR 192.168.2.0/24(192.168.2.0~192.168.2.255)
ここまでで、一つのVPCに2つの仮想ネットワーク環境の土台を構築
インターネットゲートウェイの作成
次は、パブリックサブネットをインターネットと接続させる設定を行う
平たくいうと、外部のネットワークとパブリックサブネットを結ぶ道を作る感じ
インターネットゲートウェイを作成し、先ほど作成したパブリックサブネットにアタッチすれば良い
ルートテーブルの作成
続いて、ルート(ルーティング)テーブルの設定を行う
ルートテーブルとは、宛先IPアドレスがXXXの時に、どのネットワークにデータを流せば良いかを定義したテーブルのこと
TCP/IPでは、データをいくつかに分割したパケットという単位で送受信する
パケットの中には送受信したいデータの他に、宛先IPアドレスや、送信元IPアドレス情報などのヘッダーも付加されており、ルーターはヘッダーを見て、送信先を区別する
ルートテーブルの設定がされていないと、どこにデータを送信すればいいのかがルーターが判断できない
awsでは、デフォルトでVPC作成時に設定したIP(今回では192.168.0.0/16)が設定されており、これ以外のIPアドレスは破棄されるようになっているので、デフォルトゲートウェイ(0.0.0.0/0)をインターネットゲートウェイに設定する
これにより、192.168.0.0/16以外のIPアドレスも全て送受信することができる
仮想サーバーの作成
パブリックサブネット内に仮想サーバーを構築する
awsでは、EC2サービスを使用することで、様々なサーバーを構築することができる
インスタンス作成時に設定する項目は以下
- リージョン:東京
- AMI: Amazon Linux AMIなどVMイメージを指定
- インスタンスタイプ: 仮想マシンのスペックを設定
- VPCとサブネット: パブリックサブネットを指定
- パブリックIPアドレス: 外部からのアクセスのために必要
- プライベートIPアドレス: VPC内での通信に使用(今回は192.168.1.10を採用)
- ストレージ: デフォルトのまま
- インスタンスの名前:分かりやすい名前を
- セキュリティグループ:パケットフィルタリングの設定が可能
- キーペアの作成:作成したキーは無くさないように
インスタンスに割り当てられるパブリックIPアドレスは、デフォルトでは起動・停止するたびに別のIPアドレスが割り当てられる(動的IPアドレス)
固定化したい場合にはElastic IPを使用
ssh接続試行
SSHは秘密鍵と公開鍵によって接続する方法であるが、先ほど作成したキー「my-key.pem」は秘密鍵に相当する
ssh -i my-key.pem ec2-user@インスタンスに割り振られたIP
AWSのインスタンスでは「セキュリティグループ」でパケットフィルタリングを設定できる
デフォルトでは「ポート22に対して、すべての通信(0.0.0.0/0)を許可する」という設定となっている(ポート22はウェルノウンポートで、SSH(厳密にはsshdサービス)のこと)
デフォルトの設定ではWebサーバーソフトをインストールしようとしても、阻まれて通信できない(ポート22以外の通信が許可されていない)ので、必要に応じてセキュリティグループを変更する
インターネットは無数のルーターで接続されており、ルーター同士はルートテーブルの情報をやりとりする
ネットワークの情報は刻一刻と変更されるため、ルーター同士は情報をやり取りして自動的に更新する
そのための代表的な方法がEGPとIGP
EGPは大きなネットワークでネットワークを管理する「AS番号」を使ってやりとりに使われ、IGPはEGP内部のルーター同士でのやりとりに使われる
Apacheのインストール
$ sudo yum update
$ sudo systemctl enable httpd.service
設定が有効になっているかは、以下のコマンドで確認
$ sudo systemctl list-unit-files -t service
apache起動
$ sudo systemctl start httpd
状態確認
$ sudo systemctl status httpd
apacheが何番ポートを掴んでいるか確認
$ sudo lsof -i -n -P
80番を掴んでいた
FWの設定
今のままでは、22番ポートしか外部から接続許可されていないので、ポート80を開ける
セキュリティグループ→インバウンドルールを編集→TCPポート80を追加
ブラウザから接続試行
テストページが表示されればOK
DNSの設定
ブラウザにアクセスする際、覚えにくいIPを指定するより、分かりやすい名前でアクセス(yahoo.co.jpみたいなドメイン名で)する場合に使用
ec2-54-150-113-252.ap-northeast-1.compute.amazonaws.com
第5レベル ec2-54-150-113-252:インスタンス固有名称
第4レベル ap-northeast-1:東京リージョンのドメイン
第3レベル compute:EC2などのサービスドメイン
パブリックドメインでアクセスすることができた
phpのインストール
$ sudo amazon-linux-extras install php7.3
mariadb関連のライブラリもインストール
$ sudo yum -y install php php-mbstring
$ sudo yum install mariadb-server
#php.iniは以下。適宜修正する
$ /etc/php.ini
続いてphpフォルダを作成し、phpinfo確認
$ sudo mkdir /var/www/html/php
$ sudo touch /var/www/html/php/phpinfo.php
ファイルの中身↓
<?php
phpInfo();
?>
phpファイル作成後、apacheを再起動し、ブラウザでアクセスできればOK
aws勉強
新しい職場では、awsを使用しているとのことだったので、今のうちにちょっとawsを触っておく。
参考書籍はこちら
この書籍は、初心者向けにネットワーク用語の基本を抑えつつ、WordPress構築まで
作業として行っている。
知識だけではなく、目に見えて動くものを作れるのは、初心者には良いと思う。
awsとは:
awsは世界中にデータセンター(リージョンと一般的に呼ばれている)を持っており、使用者は任意のリージョンを指定してサービスを使う。
日本にもリージョンは存在し、東京リージョンと呼ばれている。
リージョンの中では、さらにアベイラビリティーゾーン(AZ)と呼ばれる、区分けがされており、AZを指定してその中にサーバーを立てたりネットワーク環境を構築する。
AZはそれぞれ、異なるネットワーク環境を構築している。
そのため、高可用性、耐障害性を高めるために異なるAZに同じネットワーク環境を作ることで、万が一に備えることができる。
*設計や運用方法によってはMultiAZでの運用でも障害があったケースもあるので、異なるリージョンに同じネットワークを構築する場合もある。
この辺りは予算との兼ね合いに。
この書籍で学べた知識:
基本的なネットワーク用語
MacでLAMP環境構築小ネタ
ホストPC⇄仮想環境で使用する共有フォルダを作成
手順:
1.プラグイン(vagrant-vbguest)のインストール
既にプラグインが入っているか確認
$ vagrant plugin list
どうやら入っていない模様
インストール
$ vagrant plugin install vagrant-vbguest
再起動
$ vagrant reload
プラグインが起動しているか確認
$ vagrant vbguest --status
2.vagrantfileの設定
# config.vm.synced_folder "../data", "/vagrant_data"
↓
config.vm.synced_folder "./share", "/home/vagrant/share"
3.ホスト側に共有フォルダ作成&サンプルファイルを作成し、vagrantを再起動。
再起動後仮想環境へ入ると、自動的にフォルダが作成され、ファイル共有ができた
MacでLAMP環境構築その4
前回は、MySQLのインストールまで
手順:
1.DB作成
mysql> create database test_db;
DBが出来ているか確認するには
mysql> show databases;
2.テーブル作成
mysql> use test_db
mysql> create table users(id int NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT "ID", username VARCHAR(100) NOT NULL COMMENT "ユーザ名");
作成したテーブルの確認
テーブル構成の確認
mysql> desc users;
3.レコード追加
mysql> insert into users (username) values ('uematsu');
テーブルの中身確認
4.DB操作権限を付与したユーザーを作成
mysql> create user adminuser@localhost identified by 'password';
mysql> grant all privileges on test_db.* to adminuser@localhost identified by 'password';
mysql> set password for adminuser@localhost = password('!password0');
登録確認
$ sudo vim /var/www/html/php/getSql.php
vim慣れしてないので書くのが辛い。。
ブラウザからアクセスすると、エラー。ドライバがないっぽい
やっぱりなかった
$ sudo php -m
ない
入れる
$ sudo apt install php7.4-mysql
#phpは入っているものに合わせること
pdo_mysqlが入った
$ sudo service apache2 restart
PHPinfoでもドライバが入ったことがわかる
再度ブラウザでPHPファイルにアクセスすると、正常に接続できたことがわかった
これで、一旦環境構築は終了
MacでLAMP環境構築その3
前回はApacheをインストールした
手順
1.リポジトリを追加するツールをインストール
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
3.PHPのインストール
$ sudo apt install php7.4
4.確認
$ php -v
バージョンが表示されればOK
5.PHP実行
$ sudo mkdir /var/www/html/php
phpファイル作成
ファイルの中身↓
<?php
phpInfo();
?>
ブラウザでアクセス。表示されればOK
6.MySQLをインストール
$ sudo apt-get install mysql-server mysql-client
mysql-client:クライアントツール
こんな画面が出る。認証情報を作成する画面の模様
任意のパスワードを入力し、Enter。再度入力を求められるので、入力し、Enter。
簡単すぎるとOKしてくれないらしい。
インストール後は、バージョン確認
$mysql --version
mySQLにログイン
$ sudo mysql -u root -p
Enter passwordと出たら、先ほど登録したパスワードを入力する
クエリ発行
select host, user from mysql.user;
ログアウト
exit
コマンドを取り消したい時
¥c
他、いろんなコマンドは↓
https://qiita.com/CyberMergina/items/f889519e6be19c46f5f4
MacでLAMP環境構築その2
前回はMacにvagrat入れるところまで
今回はApacheをインストール
手順
インストールできない。
理由:ubuntuはaptを使え
https://teratail.com/questions/100312
aptの更新
$ sudo apt-get update
apacheのインストール
$ sudo apt-get install apache2
インストール後はバージョン確認
$ apache2 -v
apacheが起動しているか確認。activeになっていればOK
$ sudo service apache2 status
実際にブラウザでアクセスしてみると、アクセスできない。。
vagrantfileの設定ミスが原因
$ vim vagrantfile
以下の行のコメントアウトを解除し、ポートフォワード(仮想環境へホストPCから接続できるようにすること)を有効化。
# config.vm.network "forwarded_port", guest: 80, host: 8080
アクセスできるようになった。
ポートフォワードについて詳しくは
→https://maku77.github.io/vagrant/port-forward.html
Apacheのconfファイルの場所は↓
/etc/apache2/apache2.conf
次はPHP入れる