awsでwebサイト構築②

前回は、パブリック環境を構築

yukimat.hatenablog.jp

 

今回はプライベート環境構築

前回でプライベートサブネットは構築してあるので、インスタンス作成から

 

EC2

IPは192.168.2.10とした

セキュリティーグループで、ポート3306(sql)、ICMPを開けておく

ICMPとは

サーバー間での疎通確認(ping)に使用されるプロコトル

 

インスタンス作成後、パブリックIPが振られていないことを確認

 

疎通確認

パブリックサーバーから、pingをプライベートサーバーへ発行

$ ping 192.168.2.10

pingが通れば問題なし

 

プライベートサーバーへssh

プライベートサーバーは外部とネットワークを繋いでいないので、パブリックサーバーからプライベートサーバーへ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

f:id:yukimat:20200806140630p:plain

 

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;

f:id:yukimat:20200807092913p:plain

create table users(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL);

f:id:yukimat:20200807093155p:plain

insert into users (username) values ('uematsu');

f:id:yukimat:20200807093308p:plain

ユーザ作成

"testdbへの全てのアクセス権を持つユーザadministraorをパスワード!password0で作成"というクエリ"

grant all on testdb.* to administrator@"%" identified by '!password0';

 

設定即時反映

flush privileges;

 

パクリックサーバーから、接続試行。接続できればOK

$ mysql -h 192.168.2.10 -u administrator -p

 

テーブル情報を表示してみる

(テーブル定義を変更、レコードも追加した)

f:id:yukimat:20200810190223p:plain

phpファイル作成し、デプロイ

method名やclass名は適当に

f:id:yukimat:20200817200202p:plain

f:id:yukimat:20200817200319p:plain

f:id:yukimat:20200817200425p:plain

ブラウザで確認

f:id:yukimat:20200817200539p:plain

DBの中身を表示できた

f:id:yukimat:20200817200630p:plain






 

awsでwebサイト構築①

書籍でawsの使い方を学んだので、今回は復習も兼ねてメモしながら環境を構築してみる

 

構成:

リージョン・・東京

使用サービス・・VPC、EC2

EC2で立てるサーバーは2つ

APサーバー(Apache,php)・・パブリック

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つの仮想ネットワーク環境の土台を構築

 

インターネットゲートウェイの作成

次は、パブリックサブネットをインターネットと接続させる設定を行う

平たくいうと、外部のネットワークとパブリックサブネットを結ぶ道を作る感じ

awsでは、インターネットゲートウェイを利用する

インターネットゲートウェイを作成し、先ほど作成したパブリックサブネットにアタッチすれば良い

 

ルートテーブルの作成

続いて、ルート(ルーティング)テーブルの設定を行う

ルートテーブルとは、宛先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とは、仮想サーバーにアクセスするプロトコルのこと

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 yum -y install httpd

 

インスタンス起動時に自動でapacheが起動するように設定

$ sudo systemctl enable httpd.service

 

設定が有効になっているかは、以下のコマンドで確認

$ sudo systemctl list-unit-files -t service

f:id:yukimat:20200806104155p:plain

 

apache起動

$ sudo systemctl start httpd

 

状態確認

$ sudo systemctl status httpd

 

apacheが何番ポートを掴んでいるか確認

$ sudo lsof -i -n -P

80番を掴んでいた

 

FWの設定

今のままでは、22番ポートしか外部から接続許可されていないので、ポート80を開ける

セキュリティグループ→インバウンドルールを編集→TCPポート80を追加

 

ブラウザから接続試行

テストページが表示されればOK

f:id:yukimat:20200806105416p:plain

 DNSの設定

ブラウザにアクセスする際、覚えにくいIPを指定するより、分かりやすい名前でアクセス(yahoo.co.jpみたいなドメイン名で)する場合に使用

 

作成したVPCを選択し、DNSホスト名の編集→有効

インスタンスを確認すると、パブリックDNSが表示される

 

ec2-54-150-113-252.ap-northeast-1.compute.amazonaws.com

第5レベル ec2-54-150-113-252:インスタンス固有名称

第4レベル ap-northeast-1:東京リージョンのドメイン

第3レベル compute:EC2などのサービスドメイン

第2レベル amazonaws:awsドメイン

トップレベル com:comドメイン

 

パブリックドメインでアクセスすることができた

f:id:yukimat:20200806111434p:plain

 phpのインストール

$ sudo amazon-linux-extras install php7.3

mariadb関連のライブラリもインストール

$ sudo yum -y install php php-mbstring

$ sudo yum install mariadb-server

 

$ php -v で、phpのバージョンが出れば、OK

#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

f:id:yukimat:20200807091648p:plain

 

aws勉強

新しい職場では、awsを使用しているとのことだったので、今のうちにちょっとawsを触っておく。

 

参考書籍はこちら

www.amazon.co.jp

この書籍は、初心者向けにネットワーク用語の基本を抑えつつ、WordPress構築まで

作業として行っている。

知識だけではなく、目に見えて動くものを作れるのは、初心者には良いと思う。

 

awsとは:

Amazonが提供している、クラウドサービスのこと。

 

awsは世界中にデータセンター(リージョンと一般的に呼ばれている)を持っており、使用者は任意のリージョンを指定してサービスを使う。
日本にもリージョンは存在し、東京リージョンと呼ばれている。

リージョンの中では、さらにアベイラビリティーゾーン(AZ)と呼ばれる、区分けがされており、AZを指定してその中にサーバーを立てたりネットワーク環境を構築する。

AZはそれぞれ、異なるネットワーク環境を構築している。

そのため、高可用性、耐障害性を高めるために異なるAZに同じネットワーク環境を作ることで、万が一に備えることができる。

*設計や運用方法によってはMultiAZでの運用でも障害があったケースもあるので、異なるリージョンに同じネットワークを構築する場合もある。

この辺りは予算との兼ね合いに。

business.ntt-east.co.jp


 

この書籍で学べた知識:

awsVPCサービスとEC2サービスの使い方

基本的なネットワーク用語

MacでLAMP環境構築小ネタ

ホストPC⇄仮想環境で使用する共有フォルダを作成

手順:

1.プラグイン(vagrant-vbguest)のインストール

既にプラグインが入っているか確認

$ vagrant plugin list

どうやら入っていない模様

f:id:yukimat:20200711231853p:plain

インストール

$ vagrant plugin install vagrant-vbguest

f:id:yukimat:20200711232058p:plain

再起動

$ vagrant reload

プラグインが起動しているか確認

$ vagrant vbguest --status

f:id:yukimat:20200711232550p:plain

2.vagrantfileの設定

# config.vm.synced_folder "../data", "/vagrant_data"

config.vm.synced_folder "./share", "/home/vagrant/share"

3.ホスト側に共有フォルダ作成&サンプルファイルを作成し、vagrantを再起動。

f:id:yukimat:20200712001019p:plain

再起動後仮想環境へ入ると、自動的にフォルダが作成され、ファイル共有ができた

f:id:yukimat:20200712000753p:plain

f:id:yukimat:20200712000757p:plain

 

MacでLAMP環境構築その4

前回は、MySQLのインストールまで

 

yukimat.hatenablog.jp

今回は、PHPMySQLの連携を行う

 

手順:

1.DB作成

mysql> create database test_db;

 

DBが出来ているか確認するには

mysql> show databases;

f:id:yukimat:20200710082958p:plain

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 "ユーザ名");

作成したテーブルの確認

f:id:yukimat:20200710085358p:plain

テーブル構成の確認

mysql> desc users;

f:id:yukimat:20200710085534p:plain

3.レコード追加

mysql> insert into users (username) values ('uematsu');

テーブルの中身確認

f:id:yukimat:20200710091409p:plain

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');

登録確認

f:id:yukimat:20200710102853p:plain

5.PHPからSQLへ接続

$ sudo vim /var/www/html/php/getSql.php

vim慣れしてないので書くのが辛い。。

f:id:yukimat:20200710111033p:plain

ブラウザからアクセスすると、エラー。ドライバがないっぽい

f:id:yukimat:20200710105444p:plain

やっぱりなかった

f:id:yukimat:20200710105516p:plain

$ sudo php -m

ない

f:id:yukimat:20200710110259p:plain

入れる

$ sudo apt install php7.4-mysql

#phpは入っているものに合わせること

pdo_mysqlが入った

f:id:yukimat:20200710110352p:plain

$ sudo service apache2 restart

PHPinfoでもドライバが入ったことがわかる

f:id:yukimat:20200710110558p:plain

再度ブラウザでPHPファイルにアクセスすると、正常に接続できたことがわかった

f:id:yukimat:20200710111313p:plainこれで、一旦環境構築は終了

MacでLAMP環境構築その3

前回はApacheをインストールした

yukimat.hatenablog.jp

今回は、PHPMySQLをインストール

 

手順

1.リポジトリを追加するツールをインストール

$  sudo apt install software-properties-common

2.PHP用のリポジトリのインストール

$ sudo add-apt-repository ppa:ondrej/php

$ sudo apt-get update

3.PHPのインストール

$ sudo apt install php7.4

4.確認

$ php -v

f:id:yukimat:20200705091248p:plain

バージョンが表示されればOK

5.PHP実行

DocumentRootディレクトリにphpフォルダ作成

$ sudo mkdir /var/www/html/php

phpファイル作成

$sudo vim phpInfo.php

ファイルの中身↓

<?php

phpInfo();

?>

 ブラウザでアクセス。表示されればOK

f:id:yukimat:20200705095806p:plain

6.MySQLをインストール

$ sudo apt-get install mysql-server mysql-client

mysql-client:クライアントツール

こんな画面が出る。認証情報を作成する画面の模様

f:id:yukimat:20200705101147p:plain

任意のパスワードを入力し、Enter。再度入力を求められるので、入力し、Enter。

簡単すぎるとOKしてくれないらしい。

インストール後は、バージョン確認

$mysql --version

f:id:yukimat:20200705101447p:plain

mySQLにログイン

$ sudo mysql -u root -p

Enter passwordと出たら、先ほど登録したパスワードを入力する

f:id:yukimat:20200705101937p:plain

クエリ発行

select host, user from mysql.user;

f:id:yukimat:20200705103127p:plain

 

ログアウト

exit

コマンドを取り消したい時

¥c

他、いろんなコマンドは↓

 https://qiita.com/CyberMergina/items/f889519e6be19c46f5f4

 

次回はPHPMySQLの連携

MacでLAMP環境構築その2

前回はMacにvagrat入れるところまで

yukimat.hatenablog.jp

 

今回はApacheをインストール

 

手順

yumコマンドでapacheインストール

インストールできない。

f:id:yukimat:20200704150907p:plain

理由:ubuntuはaptを使え

f:id:yukimat:20200704151033p:plain

https://teratail.com/questions/100312 

 

aptの更新

$ sudo apt-get update

apacheのインストール

$ sudo apt-get install apache2

f:id:yukimat:20200704151648p:plain

インストール後はバージョン確認

$ apache2 -v

f:id:yukimat:20200704152727p:plain

apacheが起動しているか確認。activeになっていればOK

$ sudo service apache2 status

f:id:yukimat:20200704202020p:plain

実際にブラウザでアクセスしてみると、アクセスできない。。

f:id:yukimat:20200704200525p:plain

vagrantfileの設定ミスが原因

$ vim vagrantfile

以下の行のコメントアウトを解除し、ポートフォワード(仮想環境へホストPCから接続できるようにすること)を有効化。

# config.vm.network "forwarded_port", guest: 80, host: 8080

$ vagrant reloadでvagrantを再起動

アクセスできるようになった。

f:id:yukimat:20200704201734p:plain

  ポートフォワードについて詳しくは

https://maku77.github.io/vagrant/port-forward.html

 

Apacheのconfファイルの場所は↓ 

/etc/apache2/apache2.conf 

 

次はPHP入れる