Day3 AWSにおけるネットワーク
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
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インスタンスからの接続のみ可能にする
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ゲートウェイ
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へ接続できるようになる。
セキュリティグループ
インスタンス単位の制御
ステートフル=ルールに関係なく、返されたトラフィックが自動的に許可される
インバウンドで入ってくればアウトバウンドも返せるネットワークACL
サブネット単位の制御
ステートレス=返されたトラフィックがルールによって明示的に許可される
インバウンドもアウトバウンドもルールをみる
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Security.html
ネットワーク関連の設計ポイント
異なるシステムはアカウント単位で切る。
同一システムの各環境をアカウント・VPC単位で分けるかは状況による。