gitkadoの気まぐれ日記

島根在住エンジニアが何かに興味を持ったらブログを更新します

AWSでWEB/DBサーバをVPC内に構築する備忘録

概要

AWSでWEB/DBサーバを構築する。
以下の手順で構築を進める。

  1. AWSVPCを作成する
  2. VPCにサブネットを作成する(public/private)
  3. publicサブネットにWEBサーバを作成する
  4. privateサブネットにDBサーバを作成する

AWSVPCを作成する

  1. VPC(10.0.0.0/16)を作成する(インターネットゲートウェイ自動作成)

VPCにサブネットを作成する(public/private)

publicサブネット

  1. アベイラビリティゾーンAでサブネット(10.0.11.0/24)をVPCに作成する
  2. サブネットのルートテーブルを確認する
    • localアクセス設定(10.0.0.0/16:local)
    • localアクセス以外の設定(0.0.0.0/0:インターネットゲートウェイ*1
    • ルートテーブルのNameタグ追加(public-rtb)

NATゲートウェイ

privateサブネット内からは、HTTP通信ができないためNATゲートウェイが必要になる。
作成したサブネットは踏み台サーバとして使用される。

  1. VPC>NATゲートウェイ「作成」
    • サブネット(publicサブネット)
    • 新しいEIP使用

privateサブネット

  1. アベイラビリティゾーンAでサブネット(10.0.21.0/24)をVPCに作成する
  2. サブネットのルートテーブルを確認する
    • localアクセス設定(10.0.0.0/16:local)
    • localアクセス以外の設定(0.0.0.0/0:NATゲートウェイ
    • ルートテーブルのNameタグ追加(private-rtb)

publicサブネットにWEBサーバを作成する

  1. EC2-WEBを作成する(秘密鍵取得)
    • インスタンス作成(無料枠)
    • ネットワーク(作成したVPC
    • サブネット(作成したpublicサブネット)
    • パブリックIP(有効化:GIP自動割り振り)
    • SG(SSH+HTTP:0.0.0.0/0)
  2. 作成したEC2-WEBにSSH接続して諸々設定する
# EC2-WEBへ接続
# IPv4は起動のたびに変わるため注意
$ ssh -i 秘密鍵 ec2-user@IPv4(EC2-WEB)

# MacでPermission落ちする場合はPermissionを600に設定
$ chmod 600 秘密鍵

<以降、EC2-WEB>

# サーバのホスト名設定
# HOSTNAME=aws-web-1a
$ sudo vim /etc/sysconfig/network

# 127.0.0.1の先頭にaws-web-1aを追記
$ sudo vim /etc/hosts

# サーバ再起動
$ sudo reboot

# 言語設定
# LANG=ja_JP.UTF-8
$ sudo vim /etc/sysconfig/i18n

# タイムゾーン
# Japanをlocaltimeとして配置
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime  
# タイムゾーン設定
# ZONE=“Asia/Tokyo”
$ sudo vim /etc/sysconfig/clock

# yum更新
$ sudo yum update -y

# ミドルインストール(apache, mysql, git)
$ sudo yum install -y httpd24 mysql git

# apache設定
# ServerName aws-web-1a
$ sudo vim /etc/httpd/conf/httpd.conf
# Syntaxチェック
$ sudo /etc/init.d/httpd configtest
# サーバ起動時の自動起動設定(apache)
$ sudo chkconfig httpd on
# apache起動
# http://IPv4(EC2-WEB)
$ sudo service httpd start

privateサブネットにDBサーバを作成する

  1. EC2-DBを作成する(前回作成した秘密鍵を使用)
    • インスタンス作成(無料枠)
    • ネットワーク(作成したVPC
    • サブネット(作成したprivateサブネット)
    • パブリックIP(無効化)
    • SG(SSH+Mysql:web-sg指定)
  2. 作成したEC2-DBにSSH接続して諸々設定する
# EC2-DB接続用の秘密鍵を踏み台EC2-WEBにSCPで渡す
$ scp -i 秘密鍵 送る秘密鍵 ec2-user@IPv4(EC2-WEB):/home/ec2-user/

# EC2-WEBへ接続(踏み台)
$ ssh -i 秘密鍵 ec2-user@IPv4(EC2-WEB)

<以降、EC2-WEB>

# EC2-DBへ接続
$ ssh -i 秘密鍵 ec2-user@privateIP(EC2-DB)

<以降、EC2-DB>
# EC2-WEBと同様の手順は説明割愛

# HOSTNAME=aws-db-1a
$ sudo vim /etc/sysconfig/network

# 127.0.0.1の先頭にaws-db-1aを追記
$ sudo vim /etc/hosts

$ sudo reboot
$ sudo vim /etc/sysconfig/i18n
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime  
$ sudo vim /etc/sysconfig/clock
$ sudo yum update -y

# ミドルインストール(apache, mysql, git)
$ sudo yum install -y mysql57-server

# mysql設定
# サーバ起動時の自動起動設定(mysql)
$ sudo chkconfig mysqld on
# mysql起動
$ sudo service mysqld start

# rootパスワード変更
$ mysqladmin -u root password
# mysqlにrootログイン
$ mysql -u root -p
# EC2-WEBの接続設定(sql)
$ grant all privileges on *.* to root@“%” identified by ‘rootパスワード’ with grant option;

# EC2-DBログアウト
$ exit

<以降、EC2-WEB>

# EC2-DBで起動しているmysqlにrootログイン
$ mysql -h privateIP(EC2-DB) -u root -p

メモ

ネットワークACL

今回設定したのはセキュリティグループですが、
類似機能としてネットワークACLというものがあります。

  • セキュリティグループ
  • ネットワークACL
    • サブネット単位FW、ステートレス

NATゲートウェイは有料…

NATゲートウェイは有料なので削除しておく。
削除後privateサブネットはHTTP通信ができなくなるので注意が必要です。

  1. VPC>NATゲートウェイ「削除」
  2. VPC>ルートテーブル>NATゲートウェイのルート設定を削除

参考

Udemy:手を動かしながら学ぶAWS基本から応用まで
SSH接続Permission落ちの対処法

*1:0.0.0.0/0=それ以外の通信全てという意味