手を動かしながら2週間で学ぶ AWS 基本から応用まで Day3 Day4

Day3 AWSにおけるネットワーク

f:id:kyamashiro:20190105141347p:plain

1. VPCの作成

「1個のパブリックサブネットを持つ VPC」を選択
IPv4 CIDR ブロック:デフォルト
IPv6 CIDR ブロック:なし
VPC名を入力 public-subnet-1a パブリックサブネットの IPv4 CIDR:10.0.11.0/24
アベイラビリティーゾーン:ap-northeast-1a
VPCの作成

2. サブネットの追加

サブネットの作成
名前タグ:public-subnet-1c
VPC:今作ったやつを選択
アベイラビリティーゾーン:ap-northeast-1c
IPv4 CIDR ブロック:10.0.12.0/24
作成する
ルートテーブルでインターネットゲートウェイの設定がないので、1aのルーティングテーブルと同じものにする
ルートテーブル→変更→保存

3. パブリックサブネット上でEC2インスタンスを起動する

EC2インスタンスを作成→インスタンスの詳細の設定 ネットワーク:作成したVPCを選択 サブネット:1aを選択 自動割当パブリックIP:有効化 セキュリティグループ:HTTPを追加

4. インスタンスApache,PHPをインストールする

sudo vim /etc/sysconfig/network
//HOSTNAME=localhost.localdomainを変更
sudo vim /etc/hosts
//127.0.0.1 に今変更したHOSTNAMEを追加

言語設定

sudo vim /etc/sysconfig/i18n
LANG=ja_JP.UTF-8

時刻設定

sudo cp /usr/share/zoneinfo/Japan /etc/localtime
sudo vim /etc/sysconfig/clock
//ZONE="Asis/Tokyo"に変更

再起動

sudo reboot

インストール

sudo yum update
sudo yum install -y httpd24
sudo yum install -y php70 php70-mbstring php70-pdo php70-mysqlnd
sudo yum install -y mysql
sudo yum install -y git

Apacheの設定

sudo vim /etc/httpd/conf/httpd.conf

//index.phpを追加
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

//ServerNameを変更
ServerName www.example.com:80

//configntest
sudo /etc/init.d/httpd configtest

//Apache 自動起動設定
sudo chkconfig httpd on

PHPの設定

sudo vim /etc/php.ini

//Dynamic Extension
extension=mbstring

//mbstring.language
mbstring.language = Japanese
//mbstring.internal_encoding
mbstring.internal_encoding = UTF-8

サンプルプログラムを動かす

git clone https://github.com/ketancho/udemy-aws-14days.git
//Day3をコピー
sudo cp index.php /var/www/html
sudo cp -r img /var/www/html

作成したEC2インスタンスIPアドレスにアクセス

f:id:kyamashiro:20190105141352p:plain

Day4 AWSにおけるネットワーク

1. プライベートサブネットの構築

VPC→サブネットの作成
名前タグ:private-subnet-1a
VPC:作ったやつ
アベイラビリティーゾーン:ap-northeast-1a
IPv4 CIDR ブロック: 10.0.21.0/24

名前タグ:private-subnet-1c
VPC:作ったやつ
アベイラビリティーゾーン:ap-northeast-1c
IPv4 CIDR ブロック: 10.0.22.0/24

ルートテーブル作成 名前タグ入力→VPCを選択

Public VPC内の通信はローカルで処理 それ以外はインターネットゲートウェイに流す

2. プライベートサブネットにDBサーバ用EC2インスタンスを用意する

セキュリティグループで接続を制限する
EC2→セキュリティグループ→アクション→セキュリティグループのコピー
セキュリティグループ名:web-sg
作成
EC2インスタンスのセキュリティグループを作成したものに変更

DB EC2インスタンスを作成する
ネットワーク:作成しているvpc
サブネット:private-subnet-1a
自動割り当てパブリック IP:無効化
高度な詳細

#!/bin/bash

# ホスト名
sed -i 's/^HOSTNAME=[a-zA-Z0-9\.\-]*$/HOSTNAME=udemy-aws-14days-db-1a/g' /etc/sysconfig/network
hostname 'udemy-aws-14days-db-1a'

# タイムゾーン
cp /usr/share/zoneinfo/Japan /etc/localtime
sed -i 's|^ZONE=[a-zA-Z0-9\.\-\"]*$|ZONE="Asia/Tokyo”|g' /etc/sysconfig/clock

# 言語設定
echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n

セキュリティグループの設定
セキュリティグループ名:DB-sg
ルールの追加:MYSQL
SSH/MYSQLのソースを作成したセキュリティグループweb-sgに変更
SSH,MySQLへの接続はweb-sgがついているEC2インスタンスからの接続のみ可能にする
f:id:kyamashiro:20190105141357p:plain DBインスタンスはWebインスタンスを踏み台にして接続するので、秘密鍵をWebインスタンスへ送る

pemファイルがあるディレクトリに移動
scp -i key-pair.pem key-pair.pem ec2-user@x.x.x.x:/home/ec2-user/

Web-1aに入った状態で,DB-1aに接続する

ssh -i key-pair.pem ec2-user@x.x.x.x

3. NATゲートウェイの設定

VPC→サブネット
public-subnet-1aのサブネットIDをコピー
NATゲートウェイの作成
サブネット:public-subnet-1aのID
新しいEIPの作成
ルートテーブルの編集
privateのルートテーブル→追加
送信先:0.0.0.0/0 ターゲット:NATゲートウェイ

publicはインターネットゲートウェイ
privateはNATゲートウェイ

DB-1aインスタンスyumコマンドが使えるようになる

mysqlのインストール

sudo yum install -y mysql57-server
sudo chkconfig mysqld on
sudo service mysqld start
mysqladmin -u root password
mysql -u root -p
//DB-1aを抜けてWeb-1aからmysqlに接続
exit
mysql -h x.x.x.x -u root -p

PDOでDBへ接続できるようになる。

ネットワーク関連の設計ポイント
異なるシステムはアカウント単位で切る。
同一システムの各環境をアカウント・VPC単位で分けるかは状況による。